我正在尝试通过训练和验证相同的模型(完全连接的MLP)来构建一个图,而不需要重新运行会话,不使用feed_dict和tf.data。通常,使用feed_dict时,我会使用输入张量X定义模型,并评估张量损失或准确性。然后,在图形执行期间,我会编写类似这样的代码
...
#Training
session.run([train_op], feed_dict={X: XTrainingData, Y: YTrainingData})
#Validation
session.run([accuracy_validation], feed_dict={X: XValidationData, Y: YValidationData})
我知道如何使用数据集进行训练并避免feed_dict。我的问题是:如何避免使用feed_dict进行训练和验证?如果X来自迭代器,我将调用.get_next()两次(一次用于训练X1,一次用于验证X2),我如何构建使用X1和X2的图?
一般来说,我应该避免多次调用session.run()吗?
发布于 2019-02-06 12:33:24
用于验证的session.run()调用将是简单的前馈网络,它将占用非常少的时间和内存。因此,如果你多次使用它,它应该不是什么大问题。您可以尝试使用X1和Y1的不同输入占位符进行另一个验证操作,并将这些张量传递给您的模型并进行验证。
x1 = tf.placeholder(shape=[None,256,256,1],dtype='float32',name='input_img')
y1 = tf.placeholder(shape=[None,256,256,1],dtype='float32',name='output_img')
x2 = tf.placeholder(shape=[None,256,256,1],dtype='float32',name='val_input_img')
y2 = tf.placeholder(shape=[None,256,256,1],dtype='float32',name='val_output_img')
pred = mod(x1) #mod is the network
val = mod(x2) #prediction for validation
los = tf.reduce_mean(tf.square(pred-y1))
val_los = tf.reduce_mean(tf.square(val-y2)) # validation loss
opt = tf.train.AdamOptimizer(learning_rate=0.001)
train = opt.minimize(los)
init = tf.global_variables_initializer()
然后做这样的事情
_,val_lo = session.run([train,val_los],feed_dict={x1:xtr,y1:ytr,x2:xval,ytr:yval})
发布于 2019-02-06 15:59:53
以同样的方式将验证集输入数据管道有什么问题?
https://stackoverflow.com/questions/54552492
复制相似问题