Как извлечь обученные веса Tensorflow из graph.pbtxt в необработанные данные - PullRequest
0 голосов
/ 02 октября 2018

Я обучил пользовательскую нейронную сеть с функцией:

tf.estimator.train_and_evaluate

После правильного обучения он содержит следующие файлы:

  • контрольная точка
  • events.out.tfevents.1538489166.ti
  • model.ckpt-0.data-00000-of-00002
  • model.ckpt-0.index
  • model.ckpt-10.data-00000-of-00002
  • model.ckpt-10.index eval
  • graph.pbtxt
  • model.ckpt-0.data-00001-of-00002
  • model.ckpt-0.meta
  • model.ckpt-10.data-00001-of-00002
  • model.ckpt-10.meta

Теперь мне нужно экспортировать веса и смещения каждого слоя в структуру необработанных данных, например, массив, numpy.

Я прочитал несколько страниц на TensorFlow и других темах, но ни один не может найти этот вопрос.Первым делом я бы предположил собрать файлы вместе в graph.pd с помощью freeze.py, как предложено здесь:

Tensorflow: Как преобразовать файлы моделей .meta, .data и .index в одинфайл graph.pb

Но тогда главный вопрос остается нерешенным.

Ответы [ 2 ]

0 голосов
/ 02 октября 2018

Если вашим строгим требованием является сохранение весов и смещений в массиве numpy, вы можете следовать этому примеру:

# In a TF shell, define all requirements and call the model function 
y = model(x, is_training=False, reuse=tf.AUTO_REUSE) # For example

После вызова этой функции вы можете увидеть все переменные на графике, выполнив команду

tf.global_variables()

Вам необходимо восстановить все эти переменные из последней контрольной точки (скажем, ckpt_dir ), а затем выполнить каждую из этих переменных, чтобы получить последние значения.

checkpoint = tf.train.latest_checkpoint('./model_dir/')
fine_tune = tf.contrib.slim.assign_from_checkpoint_fn(checkpoint,
                                                      tf.global_variables(),
                                                      ignore_missing_vars=True)


sess = tf.Session()
sess.run(tf.global_variables_initializer())
gv = sess.run(tf.global_variables())

Now gv будет списком всех значений ваших переменных (весов и смещений);Вы можете получить доступ к любому отдельному компоненту с помощью индексации - gv [5] и т. Д. Или вы можете преобразовать все это в массив и сохранить с помощью numpy.

np.save('my_weights', np.array(gv))

Это сохранит все вашивесовые коэффициенты в вашем текущем рабочем каталоге в виде массива - my_weights.npy.

Надеюсь, это поможет.

0 голосов
/ 02 октября 2018

Если вы хотите оценить только тензоры, вы можете проверить этот вопрос .Но если вы хотите, например, развернуть свою сеть, вы можете взглянуть на TensorFlow , обслуживающий , который, вероятно, является наиболее эффективным на данный момент.Или, если вы хотите экспортировать эту сеть в другие инфраструктуры и использовать их там, вы можете использовать ONNX для этой цели.

...