我是否可以使用不同的输入张量相同的模型?我应该避免运行session.run()多次?

问题描述 投票:0回答:2

我试图建立与trainining和相同的模型(完全连接的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()多次?

python-3.x tensorflow iterator tensorflow-datasets
2个回答
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})

0
投票

有什么问题喂养验证设置成以相同的方式将数据管道?

© www.soinside.com 2019 - 2024. All rights reserved.