gpt4 book ai didi

javascript - Tensorflow.js 神经网络中的反向传播

转载 作者:行者123 更新时间:2023-12-03 23:44:58 26 4
gpt4 key购买 nike

当我一直试图实现这个功能时tf.train.stg(learningRate).minimize(loss)进入我的代码以进行反向传播。我遇到了多个错误,例如在 variableGrads(f) 中传递的 f 必须是一个函数。我如何将上面的功能成功地实现到下面的代码中?为什么会出现这个错误?
神经网络:

    var X = tf.tensor([[1,2,3], [4,5,6], [7,8,9], [10,11,12]])
var Y = tf.tensor([[0,0,0],[0,0,0], [1,1,1]])
var m = X.shape[0]
var a0 = tf.zeros([1,3])
var y_hat = tf.zeros([1,3])
var parameters = {
"Wax": tf.randomUniform([1,3]),
"Waa": tf.randomUniform([3,3]),
"ba": tf.zeros([1,3]),
"Wya": tf.randomUniform([3,3]),
"by": tf.zeros([1,3])
}



function RNN_cell_Foward(xt, a_prev, parameters){
var Wax = parameters["Wax"]
var Waa = parameters["Waa"]
var ba = parameters["ba"]

var a_next = tf.sigmoid(tf.add(tf.add(tf.matMul(xt, Wax), tf.matMul(a_prev , Waa)),ba))

return a_next
}
function RNN_FowardProp(X, a0, parameters){
var T_x = X.shape[0]
var a_next = a0
var i = 1
var Wya = parameters["Wya"]
var by = parameters["by"]
var l = 1


for(; i <= T_x; i++){
var X_i = X.slice([i-1,0],[1,-1])
for(; l <= X.shape[1]; l++){
var xt = X_i.slice([0,l-1],[1,1])
var a_next = RNN_cell_Foward(xt, a_next, parameters)
}
var y_pred = tf.sigmoid((tf.add(tf.matMul(a_next, Wya), by)))
l = 1

if (i == 1){
var y_pred1 = y_pred
} else if (i == 2) {
var y_pred2 = y_pred
} else if (i == 3) {
var y_pred3 = y_pred
}


}
var y_predx = tf.concat([y_pred1, y_pred2, y_pred3])
return y_predx
}
const learningRate = 0.01;
var optimizer = tf.train.sgd(learningRate);
var model = RNN_FowardProp(X, a0, parameters)
var loss = tf.losses.meanSquaredError(Y, model)



for (let f = 0; f < 10; f++) {
optimizer.minimize(loss)
}
这是一个用于情感分类的神经网络,具有多对一的结构。

最佳答案

错误说明了一切:

The f passed in variableGrads(f) must be a function

optimizer.minimize期望函数作为参数而不是张量。由于代码试图最小化 meanSquaredError, the argumentminimize可以是计算预测值和预期值之间的 meanSquaredError 的函数。
const loss = (pred, label) => pred.sub(label).square().mean();

for (let f = 0; f < 10; f++) {
optimizer.minimize(() => tf.losses.meanSquaredError(Y, model))
}
它是否解决了问题,还没有完全解决?错误将更改为:
variableGrads() expects at least one of the input variables to be trainable
这是什么意思 ?使用优化器时,它期望作为参数传递的函数包含其值将更新为 minimize 的变量。函数输出。
以下是要进行的更改:
var Y = tf.tensor([[0,0,0],[0,0,0], [1,1,1]]).variable() // a variable instead

// var loss = tf.losses.meanSquaredError(Y, model)
// computed below in the minimize function

const learningRate = 0.01;
var optimizer = tf.train.sgd(learningRate);
var model = RNN_FowardProp(X, a0, parameters);

const loss = (pred, label) => pred.sub(label).square().mean();
for (let f = 0; f < 10; f++) {
optimizer.minimize(() => tf.losses.meanSquaredError(Y, model))
}

关于javascript - Tensorflow.js 神经网络中的反向传播,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63407284/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com