【问题标题】:Tensorflow: sess.run() for prediction does not change valuesTensorflow:用于预测的 sess.run() 不会改变值
【发布时间】:2018-05-26 17:35:35
【问题描述】:

我是 tf 的新手,我正在研究图像分类器。我已经建立了模型。我使用sess.run() 从学习的模型中预测单个图像,但无论输入是什么,输出标签都不会改变。

def predict():

tf.reset_default_graph()
with tf.Session() as sess:

    new_saver = tf.train.import_meta_graph('~/trained-model.ckpt.meta')
    new_saver.restore(sess, '~/trained-model.ckpt')

    y_pred = tf.get_default_graph().get_tensor_by_name('y_pred:0') #softmax(output_of_last_layer) is equal to y_pred
    X = tf.get_default_graph().get_tensor_by_name('X:0')
    final = imageprepare('jean.jpeg')
    final = np.asarray(final) 

    print(type(final))
    final = np.reshape(final,[784,1])
    print (type(final))

    output_label = sess.run(y_pred, feed_dict={X: final}) 
    print(output_label)

无论输入是什么,output_label 的值都保持不变,即形状为 [number_of_lables,1] 的 np 数组

我训练了一个模型并保存了它。我现在正在尝试不同的输入图像,以查看它们属于哪个类。如果我更改任何输入图像,它应该更改 output_label,因为 output_label 包含答案有多接近的概率但是 output_label 不取决于输入图像,这是问题任何解决方案吗?

提前致谢

【问题讨论】:

  • 整个代码在codeshare.io/2jO4oR
  • 你检查过权重吗,它们到处都是零吗?
  • @ArpitKathuria 不,无处。我尝试在训练模型后预测一张图像(不保存然后重新加载)。 output_labels 都是一

标签: python tensorflow machine-learning


【解决方案1】:

没有修改output_label值的功能

解决这个问题:

img1 = imageprepare('x.jpeg')
img1 = np.asarray(img1)
img2 = imageprepare('y.jpeg')
img2 = np.asarray(img2) 
img3 = imageprepare('z.jpeg')
img3 = np.asarray(img3) 

input_images = [img1,img2,img3]    
output_label = sess.run(y_pred, feed_dict={X: input_images})

x,y,z 是输入图像

【讨论】:

  • 但是如果我改变输入图像final,它应该改变output_label的值。不应该吗?
  • 我运行了多次。我手动更改了它,值完全相同。
  • 这不是我要问的。如果我更改输入图像,则 output_label 的值保持不变,这是错误的。它显示了图像与标签(或类)的接近程度的概率,但如果我输入两个图像,则值是相同的。
  • 我训练了一个模型并保存了它。我现在正在尝试不同的输入图像,以查看它们属于哪个类。如果我更改任何输入图像,它应该更改 output_label,因为 output_label 包含答案接近程度的概率但是 output_label 不取决于输入图像,这是问题任何解决方案吗?
猜你喜欢
  • 1970-01-01
  • 2017-02-28
  • 2017-05-08
  • 2016-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-19
相关资源
最近更新 更多