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

当我一直试图将此功能实现tf.train.stg(learningRate).minimize(loss)到我的代码中以进行反向传播时。我收到了多个错误,例如The f passed in variableGrads(f) must be a function。我如何将上面的功能成功地实现到下面的代码中?为什么会出现这个错误?


神经网络:


    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

    }


这是一个用于情感分类的神经网络,具有多对一的结构。


慕村225694
浏览 98回答 1
1回答

皈依舞

错误说明了一切:variableGrads(f) 中传入的 f 必须是一个函数optimizer.minimize期望函数作为参数而不是张量。由于代码试图最小化 meanSquaredError,the argumentofminimize可以是一个计算预测值和预期值之间的 meanSquaredError 的函数。const loss = (pred, label) => pred.sub(label).square().mean();for (let f = 0; f < 10; f++) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 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 functionconst 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++) {&nbsp; &nbsp; optimizer.minimize(() => tf.losses.meanSquaredError(Y, model))}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript