получить форму тензорного массива в тензорном потоке - PullRequest
0 голосов
/ 30 апреля 2018

У меня есть сохраненная модель, из которой я хочу получить окончательные веса, которые применяются в последнем слое. Я загрузил график и знаю, где находится тензор, но не могу получить форму тензора в виде массива. Я знаю, что массив имеет форму 2048x6. Как я могу получить фактические значения, такие как [[1,2,3], [1,2,3] ...]. Спасибо

Вот мой код

import tensorflow as tf

saver = tf.train.import_meta_graph('_retrain_checkpoint.meta')
graph = tf.get_default_graph()

tensor = tf.get_default_graph().get_tensor_by_name("final_retrain_ops/weights/final_weights:0")

print(tensor)
print(tf.TensorShape(tensor.get_shape()).as_list()




>>>Tensor("final_retrain_ops/weights/final_weights:0", shape=(2048, 6), dtype=float32_ref)
>>>(2048, 6)

1 Ответ

0 голосов
/ 30 апреля 2018

Чтобы распечатать значения весового тензора, вы можете сделать следующее:

with tf.Session() as sess:
    print( sess.run( tensor ) )

sess.run() оценивает тензор (ы) в аргументе, который здесь означает, что он будет печатать значения.

Однако существует некоторая проблема в том, что ваш код загружает только структуру графика (tf.train.import_meta_graph('_retrain_checkpoint.meta')), а не предварительно подготовленные значения. Поэтому вы получаете сообщение об ошибке, что вы пытаетесь использовать неинициализированные значения.

Вам нужно что-то вроде:

saver.restore(sess,tf.train.latest_checkpoint('./'))

для его загрузки сразу после определения sess, и, конечно, вам нужно указать правильный каталог контрольных точек вместо ./.

Так что-то вроде этого:

with tf.Session() as sess:
    saver.restore(sess,tf.train.latest_checkpoint('./'))
    print( sess.run( tensor ) )
...