tensorflow.js - 任何变量与损失函数的结果之间没有联系
问题描述
我使用的优化器没有找到我的变量和损失函数之间的联系。
一般来说,我是机器学习的新手,我正在尝试为方程 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));
当我运行优化器时,我得到了错误。
无法找到任何变量与损失结果之间的联系 >function y=f(x)。请确保使用变量的操作在 > 传递给最小化()的函数 f 中。
任何帮助是极大的赞赏。
解决方案
优化器尝试优化在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 的值
推荐阅读
- python - 单独替换商标符号 (™)
- postgresql - 将 csv 复制到容器中以在 init.sql 中使用
- javascript - “fullscreenchange”事件与每个浏览器都不兼容(寻找 Vanilla Javascript 修复)
- excel - 如何定义一个变量等于最后一张表的名称(VBA)?
- html - 使子选项卡溢出选项卡栏(使用 flexbox)
- swift - SwiftUI:致命错误:访问状态
外部视图.body" - java - 在反应式编程中使用番石榴条纹的正确方法是什么?
- java - ShakeService.java 通过意图调用后不打印日志消息
- airflow - 如何在正常功能中获取 xcom 值或如何使用 pubsubOperator
- php - 在 PHP 中合并多维数组