首页 文章

如何使用两个损失函数训练模型?

提问于
浏览
0

我有一个带有两个损失函数的TensorFlow图 . 我想交替训练我的模型:

  • 使用第一个损失函数训练模型 .

  • 使用第二个损失函数训练模型 .

  • 重复一次和两次直到收敛 .

我是否必须创建两个图形,然后加载,训练并保存每个步骤的权重?或者用单个图表可以实现吗?

1 回答

  • 2

    是的,这是可能的:

    import tensorflow as tf
    
    x = tf.get_variable('x', initializer=42.)
    y = tf.square(x)
    
    optimizer = tf.train.GradientDescentOptimizer(0.1)
    
    train_min = optimizer.minimize(y)  # minimize x*x
    train_max = optimizer.minimize(-y) # maximize x*x
    
    with tf.Session() as sess:
        sess.run(tf.global_variables_initializer())
    
        for _ in range(20):
            cost, _ = sess.run([y, train_min])
            print(cost)
            cost, _ = sess.run([y, train_max])
            print(cost)
    

    如果您不介意在完全相同的批次上最小化成本函数,您甚至可以编写

    import tensorflow as tf
    
    x = tf.get_variable('x', initializer=42.)
    y = tf.square(x)
    
    optimizer = tf.train.GradientDescentOptimizer(0.1)
    
    train_min = optimizer.minimize(y)
    
    with tf.control_dependencies([train_min]):
        train_min_then_max = optimizer.minimize(-y)
    
    with tf.Session() as sess:
        sess.run(tf.global_variables_initializer())
    
        for _ in range(20):
            cost, _ = sess.run([y, train_min_then_max])
            print(cost)
    

    使用单个sess.run调用进行优化 .

相关问题