我使用的优化程序没有在变量和损失函数之间找到联系。
我通常是机器学习的新手,我正在尝试为方程y = a * 2 ^(t / b)构建曲线拟合应用程序。可训练变量为“ a”和“ b”。现在,我正在使用一些综合数据对其进行测试。
// Declare variables
const a = tf.variable(tf.scalar(Math.random()));
const b = tf.variable(tf.scalar(Math.random()));
const year = tf.tensor1d([1,2,3,4]);
//Declare optimizer
var optimizer = tf.train.sgd(learningRate);
// y = a * 2^(t/b)
function Moore(t){
var Moore_results = [];
aPrime = a.dataSync();
bPrime = b.dataSync();
tPrime = t.dataSync();
for(i = 0; i < tPrime.length; i++){
Moore_results.push(aPrime * Math.pow(2,(tPrime[i]/bPrime)) );}
const tensorMoore = tf.variable(tf.tensor1d(Moore_results));
return tensorMoore;}
// Define loss function
function loss(predictions, labels) {
const meanSquareError = predictions.sub(labels).square().mean();
return meanSquareError;}
//Optimize loss function
optimizer.minimize(() => loss(Moore(year),year));
运行优化器时出现错误。
找不到任何变量与损失结果>函数y = f(x)之间的连接。请确保使用变量的操作在传递给minimum()的函数f内。
任何帮助将不胜感激。
答案 0 :(得分:0)
给定预测值与期望值之间的损失,优化器将尝试优化使用tf.variable
创建的变量张量。您必须通过以下预测值:
function predict(t) {
// y = a * 2 ^ (t / b)
return tf.tidy(() => {
return a.mul(tf.scalar(2)) // a * 2
.pow(t.div(b)) // ^ (t / b)
});
}
for (let iter = 0; iter < numIterations; iter++) {
optimizer.minimize(() => {
const predsYs = predict(xs);
return loss(predsYs, ys);
});
}
然后优化器将计算最能预测模型的a和b的值