【问题标题】:Can I use the same model with different input tensors? Should I avoid running session.run() multiple times?我可以使用具有不同输入张量的相同模型吗?我应该避免多次运行 session.run() 吗?
【发布时间】:2019-06-30 08:08:37
【问题描述】:

我正在尝试在不重新运行会话、不使用 feed_dict 和使用 tf.data 的情况下构建一个对同一模型(完全连接的 MLP)进行训练和验证的图表。通常,使用 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


    【解决方案1】:

    用于验证的 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})
    

    【讨论】:

    • 谢谢。你能给我一些关于你如何定义mod的细节吗? val 预测将具有相同的 pred 权重?
    • 它应该使用相同的权重。如果您使用的是 tensorflow 的高级 api,例如 keras,那么我想这会得到照顾。即使使用低级别的 api,如果您将 reuse= True 放在 tf.variable_scope 中,我觉得它应该可以正常工作。我从未遇到过使用旧权重而不是新权重的这种情况。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2022-10-06
      • 2023-03-06
      • 2019-11-12
      • 1970-01-01
      • 1970-01-01
      • 2021-05-01
      • 2021-10-30
      • 1970-01-01
      • 2012-05-27
      相关资源
      最近更新 更多