预期density_Dense1_input的形状为“ a”,但数组的形状为“ b”

时间:2018-08-10 16:01:24

标签: node.js tensorflow.js

有人会帮我这个TensorFlow JS项目吗? 这是一个具有机器学习功能的聊天机器人,我坚持使用“构建神经网络”, giveme this error

项目链接:https://github.com/ran-j/ChatBotNodeJS

/routes/index.js第189行的培训代码

//Build neural network
  model = tf.sequential();
  model.add(tf.layers.dense({inputShape: [documents.length], units: 100}));
  model.add(tf.layers.dense({units: 4}));
  model.compile({loss: 'categoricalCrossentropy', optimizer: 'sgd'});

  model.fit(xs, ys, {epochs: 1000}); 

2 个答案:

答案 0 :(得分:1)

该错误表明为模型定义的形状与模型使用的张量(训练或测试张量)之间不匹配。

为了消除错误,您需要两个形状都匹配。

  

预计density_Dense1_input的形状为a,但数组的形状为b

在错误中, a 是模型的形状,而 b 是引发错误的张量的形状。因此,需要将模型的形状更改为 b 还是将张量的形状更改为 a

最简单的方法是将模型形状更改为 b ,因为第二种方法将暗示张量的重塑,即

model.add(tf.layers.dense({inputShape: b, units: 100})); 

鉴于问题的模型,它将是

model.add(tf.layers.dense({inputShape: [27, 48], units: 100}));

答案 1 :(得分:0)

documents.length是您拥有的训练数据量,而不是模型的inputShape。因此,您的训练数据的模型形状不正确。

正确的形状应为xs.shape

所以您的拳头层应该是:

tf.layers.dense({inputShape: xs.shape, units: 100})