【问题标题】:How do you set the Adam optimizer learning rate in tensorflow.js?如何在 tensorflow.js 中设置 Adam 优化器学习率?
【发布时间】:2019-06-30 00:53:40
【问题描述】:

对于 tensorflow.js,如何设置 node.js 中 Adam 优化器的学习率?我收到一个错误:

model.optimizer.setLearningRate 不是函数

const optimizer = tf.train.adam(0.001)
model.compile({
    loss: 'sparseCategoricalCrossentropy',
    optimizer,
    shuffle: true,
    metrics: ['accuracy']
});

await model.fit(trainValues, trainLabels, {
    epochs: 50,
    validationData: [testValues, testLabels],
    callbacks: {
        onEpochBegin: async (epoch) => {
            const newRate = getNewRate();
            model.optimizer.setLearningRate(newRate);
        }
    }
});

【问题讨论】:

  • 你提供的代码有什么问题?
  • 这是我得到的错误:model.optimizer.setLearningRate is not a function
  • @Andrew 那是因为这个功能只存在于sgd。您必须使用非官方 API 来更改其他优化器的 learningRate。我把它放在我的答案中。

标签: node.js tensorflow.js


【解决方案1】:

当您调用model.compile 时,您可以传递tf.train.Optimizer 的实例而不是传递字符串。这些实例是通过 tf.train.* 工厂创建的,您可以将学习率作为第一个参数传递。

代码示例

model.compile({
    optimizer: tf.train.sgd(0.000001), // custom learning rate
    /* ... */
});

在训练期间更改学习率

目前,只有sgd 优化器实现了setLearningRate 方法,这意味着以下代码仅适用于通过tf.train.sgd 创建的优化器实例:

const optimizer = tf.train.sgd(0.001);
optimizer.setLearningRate(0.000001);

使用非官方 API

优化器实例有一个protected 属性learningRate,您可以更改它。该属性不是公开的,但由于这是 JavaScript,您可以通过在对象上设置 learningRate 来简单地更改值,如下所示:

const optimizer = tf.train.adam();
optimizer.learningRate = 0.000001;
// or via your model:
model.optimizer.learningRate = 0.000001;

请记住,您使用的是 API 的非官方部分,可能随时中断。

【讨论】:

    【解决方案2】:

    创建模型时,可以设置将optimizer传递给model.compile时的学习率

    const myOptimizer = tf.train.sgd(myLearningRate) 
    model.compile({optimizer: myOptimizer, loss: 'meanSquaredError'});
    

    可以在训练期间使用setLearningRate更改学习率

    model.fit(xs, ys, {
      epochs: 800, 
      callbacks: {
        onEpochEnd: async (epoch, logs) => {
    
          if (epoch == 300){
            model.optimizer.setLearningRate(0.14)  
        }
    
          if (epoch == 400){
            model.optimizer.setLearningRate(0.02)   
          }
        }
      } 
    })   
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-09-25
      • 2018-05-09
      • 1970-01-01
      • 2020-10-16
      • 1970-01-01
      • 2019-12-09
      • 1970-01-01
      相关资源
      最近更新 更多