我可以将同一模型用于不同的输入张量吗?我应该避免多次运行session.run()吗?

时间:2019-02-06 11:23:13

标签: python-3.x tensorflow iterator tensorflow-datasets

我正在尝试通过训练和验证同一模型(完全连接的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()吗?

2 个答案:

答案 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)

以相同方式将验证集输入数据管道有什么问题?