Как сохранить обрезку модели Tf.contrib?

Я построил модель, и я успешно могу ее обрезать с помощью модуля обрезки модели tf.contrib с параметрами по умолчанию и разреженностью как 90%, но проблема в том, что когда я запускаю модель, она по-прежнему занимает такое же время выполнения, как и Исходная модель, я предполагаю, что вместо запуска только сокращенной версии тензорный поток запускает весь граф с замаскированными весами, и поэтому нет никаких улучшений даже после обрезки.

Итак, как экспортировать обрезанную модель с подграфом и соответствующими весами и использовать ее?


person Avinash Rai    schedule 21.07.2018    source источник


Ответы (1)


Утилита strip_pruning_vars может быть тем, что вы ищете.

Из файла read.me: https://github.com/tensorflow/tensorflow/tree/master/tensorflow/contrib/model_pruning#adding-pruning-ops

Удаление операций обрезки из обученного графа

После обучения модели необходимо удалить вспомогательные переменные (маску, порог) и операции обрезки, добавленные к графику на описанных выше шагах. Это можно сделать с помощью утилиты strip_pruning_vars.

Не могли бы вы поделиться своим кодом?

person Eric Page    schedule 27.08.2018
comment
Спасибо за ответ, попробую этот способ как можно скорее - person Avinash Rai; 27.08.2018
comment
@AvinashRai 1) Влияли ли strip_pruning_vars на ускорение? 2) Вы пробовали пример CIFAR10, предоставленный Tensorflow? Вы заметили ускорение вывода? - person Anil Maddala; 28.08.2018
comment
@AnilMaddala Это не улучшает скорость, причина в том, что, согласно документации, strip_pruning_vars не воссоздает граф модели с меньшими или сокращенными ширинами, вместо этого он применяет двоичную маску к весам, она не изменяется форма гирь. Я ищу удаление ненужных грузов, что улучшит скорость. - person Avinash Rai; 29.08.2018
comment
Роман Никишин связался с Майклом Х. Чжу, одним из создателей этой библиотеки, и получил такой ответ: Веса модели хранятся в виде тензора плотных весов и тензора плотных масок (0 или 1 тензор). Чтобы сохранить обрезанную модель, вы должны сохранить и веса, и маску, и вы можете восстановить разреженный тензор как masked_weights = mask. * Weights. Чтобы получить ускорение, вы должны реализовать свой собственный код вывода, используя разреженность, которую в настоящее время не делает TensorFlow. Напишите здесь: stackoverflow.com/questions/52064450/ - person Eric Page; 26.09.2018
comment
Короче говоря, похоже, что это невозможно сделать с какой-либо существующей библиотекой тензорного потока. - person Eric Page; 26.09.2018