我是ML的新手,并尝试使用TensorFlow.js训练我的程序并根据2个输入预测输出,但是我不确定我是否做得正确,使用代码很容易解释,因此在下面添加它。
下面的代码被调用一次,
const hiddenLayer = tf.layers.dense({
units: 6,
inputShape: [2],
activation: 'sigmoid',
kernelInitializer: 'leCunNormal',
useBias: true,
biasInitializer: 'randomNormal',
});
const outputLayer = tf.layers.dense({ units: 1 });
this.someModel = tf.sequential();
this.someModel.add(hiddenLayer);
this.someModel.add(outputLayer);
this.someModel.compile({ loss: 'meanSquaredError', optimizer: 'sgd' });
下面的代码每秒调用一次,以训练模型并预测下一个输出,
const h = this.trainModel();
var inputs = [input1, input2];
tf.tidy(() => {
const outputs = this.someModel.predict(tf.tensor2d([ inputs ]));
outputs.data().then(output => {
if (output > 0.5) {
// do some action
}
});
});
async trainModel() {
console.log("this.someModel.history " + this.someModel.history)
console.log("this.someModel.outputHistory " + this.someModel.outputHistory)
return await this.someModel.fit(tf.tensor2d(this.someModel.history), tf.tensor1d(this.someModel.outputHistory), {
shuffle: true,
});
}
this.someModel.history和this.someModel.outputHistory始终在打印,
this.someModel.history undefined
this.someModel.outputHistory undefined
由于它们是未定义的,所以我收到以下错误消息,
未捕获(承诺)错误:张量构造函数的输入必须 为非空值。
*我在做什么错?我不确定为什么甚至需要model.fit方法,我猜想预测函数会在内存中为我的程序建立一个模型,然后根据这个*
进行预测答案 0 :(得分:1)
这是你传递到张量构造函数的参数为null。这就是为什么您得到错误的原因。
tf.model
不具有history
属性。的history
的训练是由fit
方法返回。因此,如果你想获得的历史,就可以进行这种方式:
history = await this.someModel.fit(tf.zeros([1, 3]) , tf.zeros([1, 1]), {
shuffle: true,
});
// then you can do whatever you want with the history
但是,目前还不清楚你想要创建的一维张量做什么history
。 history
是一个对象,不能用于创建其构造函数参数为数组的张量
要训练或适合您的模型,需要你有或自己创建的供应值。您使用this.someModel.history
,this.someModel.outputHistory