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