为什么模型历史记录和模型outputHistory始终未定义

时间:2019-01-29 19:14:41

标签: javascript typescript tensorflow tensorflow.js

我是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方法,我猜想预测函数会在内存中为我的程序建立一个模型,然后根据这个*

进行预测

1 个答案:

答案 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

但是,目前还不清楚你想要创建的一维张量做什么historyhistory是一个对象,不能用于创建其构造函数参数为数组的张量

要训练或适合您的模型,需要你有或自己创建的供应值。您使用this.someModel.historythis.someModel.outputHistory

认为,模型本身不会返回这些值