我正在尝试通过训练和验证同一模型(完全连接的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()吗?
答案 0 :(得分:0)
用于验证的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})
答案 1 :(得分:0)
以相同方式将验证集输入数据管道有什么问题?