我刚刚浏览了Stack Overflow和其他论坛,但没有找到对我的问题有帮助的内容。不过,这似乎与这个问题有关。
我目前有一个训练好的Tensorflow模型(128个输入和11个输出),我按照Tensorflow的MNIST教程保存了它。
看起来保存是成功的,现在我在这个文件夹中有一个模型,包含3个文件(.meta、.ckpt.data和.index)。然而,我希望恢复它并用于预测:
#encoding[0] => numpy ndarray (128, ) # 无论如何这只是一个只有一个条目的列表#unknowndata = np.array(encoding[0])[None]unknowndata = np.expand_dims(encoding[0], axis=0)print(unknowndata.shape) # 输出 (1, 128)# 恢复预训练的tf模型with tf.Session() as sess: #saver.restore(sess, "models/model_1.ckpt") saver = tf.train.import_meta_graph('models/model_1.ckpt.meta') saver.restore(sess,tf.train.latest_checkpoint('models/./')) y = tf.get_collection('final tensor') # tf.nn.softmax(tf.matmul(y2, W3) + b3) X = tf.get_collection('input') # tf.placeholder(tf.float32, [None, 128]) # W1 = tf.get_collection('vars')[0] # b1 = tf.get_collection('vars')[1] # W2 = tf.get_collection('vars')[2] # b2 = tf.get_collection('vars')[3] # W3 = tf.get_collection('vars')[4] # b3 = tf.get_collection('vars')[5] # y1 = tf.nn.relu(tf.matmul(X, W1) + b1) # y2 = tf.nn.relu(tf.matmul(y1, W2) + b2) # yLog = tf.matmul(y2, W3) + b3 # y = tf.nn.softmax(yLog) prediction = tf.argmax(y, 1) print(sess.run(prediction, feed_dict={i: d for i,d in zip(X, unknowndata.T)})) # 还尝试过sess.run(prediction, feed_dict={X: unknowndata.T})以及未转置的版本,仍然报错# 输出: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] # 显然其中一个应该是1,并且有特定的百分比
我在这里遇到了问题…
ValueError: 无法为形状为(1,)的张量’x:0’提供值,该张量形状为'(?, 128)’。尽管我打印了’unknowndata’的形状,并且它与(1, 128)匹配。我还尝试了
sess.run(prediction, feed_dict={X: unknownData})) # 尝试了转置等,但没有任何效果,那里我得到了另一个错误
TypeError: 不可哈希的类型: ‘list’
我只想对这个漂亮的Tensorflow训练模型进行一些预测。
回答:
prediction
张量是通过对y
进行argmax得到的。除了返回prediction
外,你还可以在执行sess.run
时将y
添加到输出馈送中。
output_feed = [prediction, y]preds, probs = sess.run(output_feed, print(sess.run(prediction, feed_dict={i: d for i,d in zip(X, unknowndata.T)}))
preds
将包含模型的预测结果,而probs
将包含概率分数。