【问题标题】:How can I use newton or L-BFGS as optimizer?如何使用牛顿或 L-BFGS 作为优化器?
【发布时间】:2018-07-30 15:10:42
【问题描述】:

我阅读了一个牛顿或 lbfgs 优化器的示例,如下所示:

optimizer = ScipyOptimizerInterface(loss, options={'maxiter': 100})
with tf.Session() as session:
    optimizer.minimize(session)

但我很困惑,因为它与梯度下降优化器不同:

optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(cost)
with tf.Session() as sess:
    sess.run(optimizer, feed_dict = {....})

我的问题是我可以使用如下所示的 L-BFGS 优化器吗? 如果答案不是,我该如何在下面的代码中使用 L-BFGS 优化器?

cost = compute_cost(ys, Z, W_soft, lambd)

train_soft = tf.train.GradientDescentOptimizer(0.5).minimize(cost)
correct_prediction = tf.equal(tf.argmax(Y_hat, 0), tf.argmax(ys, 0))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))

init = tf.global_variables_initializer()

mini_batch_data, mini_batch_labels, mini_batch_nums = batch_split(train_X, train_Y, batch_size)

paras_soft = {}
with tf.Session() as sess:
    sess.run(init)
    for epoch in range(max_iter):
        train_soft_cost, _ = sess.run([cost, train_soft], feed_dict = {xs: train_X, ys: train_Y, keep_prob: 1})

【问题讨论】:

  • 你试过了吗,结果如何?

标签: python tensorflow


【解决方案1】:

ScipyOpimizerInterface 是一个包装器,允许scipy.optimize.minimize 在张量流Session 中运行。

它接受一个method kwarg,您可以将docs 中列出的任何方法传递给它。

optimizer = ScipyOptimizerInterface(loss, ..., method='L-BGFS-B')

您应该了解方法的适用性取决于所使用的约束条件。有关详细信息,请参阅文档。

【讨论】:

    猜你喜欢
    • 2017-07-14
    • 2014-07-11
    • 2018-01-03
    • 2016-03-03
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-19
    相关资源
    最近更新 更多