【问题标题】:Expected dense_Dense1_input to have shape "a" but got array with shape "b"预期dense_Dense1_input 的形状为“a”,但数组的形状为“b”
【发布时间】:2019-01-18 06:56:21
【问题描述】:

有人会帮助我完成这个 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}); 

【问题讨论】:

  • 你能给我们看看你的xs张量吗?
  • 张量 { isDisposedInternal: false, size: 1296, shape: [ 27, 48 ], dtype: 'float32', strides: [ 48 ], dataId: {}, id: 0, rankType: ' 2' }
  • 27是批量输入量还是48还是你的输入是二维的?尝试使用model.fit(xs.transpose(), ys, {epochs: 1000});
  • 我不知道,我的数据是这样的pastebin.com/ktacvqCh
  • 那是你的文档数组?

标签: node.js tensorflow.js


【解决方案1】:

错误表明为模型定义的形状与模型使用的张量(无论是训练张量还是测试张量)不匹配。

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

预期dense_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}));

【讨论】:

    【解决方案2】:

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

    正确的形状是xs.shape

    所以你的第一层应该是:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-05-14
      • 2019-05-09
      • 2019-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-11
      相关资源
      最近更新 更多