【发布时间】:2017-02-06 03:39:16
【问题描述】:
我对读取的数据和批处理相关的事情感到困惑。
我是这样读 png 的:
trainInputQueue = tf.train.string_input_producer(filePaths, shuffle=False)
key, value = tf.WholeFileReader().read(trainInputQueue)
images = tf.image.decode_png(value, channels=0)
images = tf.reshape(images, para['shape'])
images.set_shape(para['shape'])
images = tf.cast(images, tf.float32) * (1. / 255) - 0.5
return images
然后用上面的代码读取得到的trainX,testX。它们都是.png。
然后我用tf.placeholder 定义我的网络作为输入和输出。
然后我用:
trainXBatch, trainYBatch = tf.train.batch(
[trainX, trainY],
batch_size=batch_size
)
直到这里,它们都是传统的东西。读取的数据是张量,而不是 numpy.ndarray 或列表。
那么我的问题如下。我真的需要一些示例代码来学习:
1。关于培训
val, c = sess.run([optimizer, cost], feed_dict={X: trainXBatch.eval(), Y: trainYBatch.eval()})
当我训练模型时,如何确保我使用了所有数据?
“eval()”的工作方式是什么?每次它返回新的batch_size 数据或其他方式?
我试过了
for i in range( a very big number):
val, c = sess.run([optimizer, cost], feed_dict={X: trainXBatch.eval(), Y: trainYBatch.eval()})
'eval()' 总是可以返回数据,而且数据是不一样的。我不知道我是否使用了所有数据,以及从eval返回的数据是否有效。
在tensorflow中用mnist的例子有一个名为“next_batch”的函数,但是我用自己的数据时没有这个东西……
我只是想知道如何使用数据以像 keras 一样的传统方式使用标签进行训练。
2。关于模型保存
在训练阶段,我使用 saver 作为:
saver = tf.train.Saver(tf.all_variables())
with tf.Session() as sess:
#...some codes
saver.save(sess, model_path + '/' + modelNamePrefix + model_name)
在预测阶段:
saver = tf.train.Saver(tf.all_variables())
# other codes same as training phase
with tf.Session() as sess:
sess.run(init)
saver.restore(sess, model_path + '/' + modelNamePrefix + model_name)
# then use sess.run to predict
这些代码对吗?我没有得到很好的结果,所以我不确定它是否有效。
3。关于预测
这个问题就像问题 1,关于评估。
比如我有1000张图片要预测,图片在testX中,print(testX.get_shape())我可以看到(?, 32, 32, 3),和trainX一样。
但是对于同一个模型,testX.eval() 不能直接发送到 feed_dict。
也许我还需要
testXBatch, testYBatch = tf.train.batch(
[testX.data, testY.data],
batch_size=1
)
但是!如何确保我预测所有测试数据? 我只是用
for i in range(a big number):
yimgs = sess.run(y_pred, feed_dict={X: testXBatch.eval()})
并且程序可以输出比我拥有的测试图像更多的“大量”图像。 如何以舒适的方式预测测试图像?
【问题讨论】:
标签: python tensorflow