如何使用optimizer.minimize与TensorFlow.js maxPooling层

时间:2019-02-02 13:04:31

标签: javascript machine-learning conv-neural-network tensorflow.js

optimizer.minimize()model.predict()中使用maxPooling2D来训练TensorFlow.js中具有损失函数的模型时,我遇到了一个问题。这仅当我在卷积神经网络使用Cannot read property 'backend' of undefined层具有类似于下面的代码的代码发生。它将产生以下错误:tf.layers.conv2d()。我不确定是什么原因引起的或如何解决。没有任何池层使用卷积层(0.14.2)时,不会发生错误。我正在使用TensorFlow.js版本71.0.3578.98和Google Chrome版本loss = (pred, label) => pred.sub(label).square().mean(); optimizer = tf.train.sgd(0.001); const input = tf.input({shape: [100, 100, 4]}); const conv = tf.layers.conv2d({ kernelSize: 5, filters: 8, strides: 1, activation: 'relu', kernelInitializer: 'VarianceScaling' }); const pool = tf.layers.maxPooling2d({ poolSize: [2, 2], strides: [2, 2] }); const flat = tf.layers.flatten(); const dense = tf.layers.dense({units: 10}); const output = dense.apply(flat.apply(pool.apply(conv.apply(input)))); const model = tf.model({inputs: input, outputs: output}); for (var i = 0; i < 10; i++) { optimizer.minimize(() => loss(model.predict([tf.ones([1, 100, 100, 4])]), tf.ones([1, 10])) ); } 。可以使用以下代码重现此错误:

model.predict()

编辑:这已得到解决。有关详细信息,请参见scai's answer

编辑2:这似乎不是一个问题,但改变到与反向传播1 A SALES 2 B SALES 3 C SALES 4 D INVENTORY 5 E INVENTORY More information

1 个答案:

答案 0 :(得分:2)

在TensorFlow.js 0.14+中,有一个更改禁用了Model.predict()方法中的反向传播支持。您可以将Model.apply()方法与{training:true}标志一起使用来修复代码。

即,变化

    optimizer.minimize(() =>
    loss(model.predict([tf.ones([1, 100, 100, 4])]), tf.ones([1, 10]))
);

   optimizer.minimize(() =>
    loss(model.apply([tf.ones([1, 100, 100, 4])], {training: true}), tf.ones([1, 10]))
);