有没有办法在没有 .dataSync() 的情况下从 tensorflow.js 变量中获取值?
Is there a way to get the value from a tensorflow.js variable without .dataSync()?
标题有点self-explanatory。我需要在将函数拟合到实验数据的优化过程的每次迭代之前获取变量的值。变量是 c0 和 k,它们只是标量。使用 .dataSync() 我得到如下错误:
找不到任何变量和损失函数y=f(x)的结果之间的联系。请确保使用变量的操作在传递给 minimize() 的函数 f 内。
代码如下:
const c0_tensor = tf.scalar(c0).variable(), k_tensor = tf.scalar(k).variable();
// y = c0*e^(k*x)
const fun = (t) => t.mul(k_tensor).exp().mul(c0_tensor);
const cost = (pred, label) => pred.sub(label).square().mean();
const learning_rate = 0.1;
const optimizer = tf.train.adagrad(learning_rate);
// Train the model.
for (let i = 0; i < 500; i++) {
optimizer.minimize(() => cost(fun(x_tensor), y_tensor));
};
我的问题是,有没有其他方法可以在不使用 .dataSync() 的情况下将每次迭代中的 c0 和 k 的值捕获到新的 JS 变量中?
请直接在代码中找说明
let list_k = []
for (let i = 0; i < 500; i++) {
// if you want to get all the values of k as the optimizations continues
// push k in the array
// however, the values downloaded from the backend could also be pushed
// ie list_k.push(...k.dataSync())
list_k.push(k)
// do likewise for the other parameters
optimizer.minimize(() => cost(fun(x), y));
}
// after the optimizations the k(s) values can be accessed here
// for example print them
tf.stack(list_k).print()
标题有点self-explanatory。我需要在将函数拟合到实验数据的优化过程的每次迭代之前获取变量的值。变量是 c0 和 k,它们只是标量。使用 .dataSync() 我得到如下错误:
找不到任何变量和损失函数y=f(x)的结果之间的联系。请确保使用变量的操作在传递给 minimize() 的函数 f 内。
代码如下:
const c0_tensor = tf.scalar(c0).variable(), k_tensor = tf.scalar(k).variable();
// y = c0*e^(k*x)
const fun = (t) => t.mul(k_tensor).exp().mul(c0_tensor);
const cost = (pred, label) => pred.sub(label).square().mean();
const learning_rate = 0.1;
const optimizer = tf.train.adagrad(learning_rate);
// Train the model.
for (let i = 0; i < 500; i++) {
optimizer.minimize(() => cost(fun(x_tensor), y_tensor));
};
我的问题是,有没有其他方法可以在不使用 .dataSync() 的情况下将每次迭代中的 c0 和 k 的值捕获到新的 JS 变量中?
请直接在代码中找说明
let list_k = []
for (let i = 0; i < 500; i++) {
// if you want to get all the values of k as the optimizations continues
// push k in the array
// however, the values downloaded from the backend could also be pushed
// ie list_k.push(...k.dataSync())
list_k.push(k)
// do likewise for the other parameters
optimizer.minimize(() => cost(fun(x), y));
}
// after the optimizations the k(s) values can be accessed here
// for example print them
tf.stack(list_k).print()