【问题标题】:TensorFlow: resume training with different loss functionTensorFlow:使用不同的损失函数恢复训练
【发布时间】:2018-01-03 23:55:26
【问题描述】:

这个问题与this one 的精神相似,但我根本无法让它工作,所以我需要一些帮助......

目标:使用具有相当粗略的损失​​函数的 TensorFlow 对网络进行预训练,以便所有权重/偏差都在正确的范围内。然后,继续使用更复杂的损失函数进行训练以微调模型。

尝试的方法:在预训练阶段后,保存模型(使用tf.train.Saver()),然后立即重新加载变量并更改损失函数。下面我添加了一个简约的非工作示例:

# Crude loss function
loss_fn_1 = tf.reduce_mean(tf.losses.huber_loss(labels=box_in, predictions=box_out), name="loss")

# Less crude loss function
loss_fn_2 = tf.reduce_mean(model.IOU_loss(box_in, box_out), name="IOU_loss")

train_step = tf.train.AdamOptimizer(1e-4).minimize(loss_fn_1)
saver = tf.train.Saver()

# First round of training
with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    # Train hard, fight easy
    saver.save(sess, savefile)

# Second round of training
with tf.Session() as sess:

    saver = tf.train.import_meta_graph(savefile_meta)
    saver.restore(sess, tf.train.latest_checkpoint(savedir))

    graph = tf.get_default_graph()
    IOU_loss = graph.get_tensor_by_name("IOU_loss:0")

    train_step = tf.train.AdamOptimizer(1e-4).minimize(IOU_loss)

    # 'Eye of the tiger'-type of training

我尝试了在重新启动 tf.Session() 之前或之后重新定义 train_step 以及加载/重命名各种其他变量的各种组合。主要问题是我对自己在做什么,或者错误的真正含义一无所知,而且我的随机游走没有让我到任何地方。

【问题讨论】:

    标签: python tensorflow


    【解决方案1】:

    随机游走一段时间后,我发现以下解决方案对我有用:您可以简单地定义第二个优化函数 - 参见下面的示例

    # Crude loss function
    loss_fn_1 = tf.reduce_mean(tf.losses.huber_loss(labels=box_in, predictions=box_out), name="loss")
    
    # Less crude loss function
    loss_fn_2 = tf.reduce_mean(model.IOU_loss(box_in, box_out), name="IOU_loss")
    
    trainer1 = tf.train.AdamOptimizer(1e-4).minimize(loss_fn_1)
    trainer2 = tf.train.AdamOptimizer(1e-4).minimize(loss_fn_2)
    
    with tf.Session() as sess:
        sess.run(tf.global_variables_initializer())
    
        # First round of training
        for i in range(100):
            trainer1.run()
    
        # Second round of training
        for i in range(1000):
            trainer2.run()
    

    如果您认为其他解决方案更可取,请发表评论/回答。

    【讨论】:

      猜你喜欢
      • 2019-08-19
      • 2021-12-27
      • 2020-08-15
      • 2021-02-21
      • 2021-12-28
      • 2018-07-28
      • 2020-11-24
      • 2020-07-09
      • 2018-10-01
      相关资源
      最近更新 更多