您如何在tensorflow.js中设置Adam优化器的学习率?

时间:2019-06-30 00:53:40

标签: node.js tensorflow.js

对于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);
        }
    }
});

2 个答案:

答案 0 :(得分: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​​的非官方部分,该部分随时可能中断。

答案 1 :(得分:1)

创建模型时,可以设置将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)   
      }
    }
  } 
})