首页 > 解决方案 > tensorflow.js 在检查输入时出错:预期的 dense_Dense1_input 具有 3 个维度。但是有形状的数组

问题描述

简单的问题,我确定答案很简单,但我真的很难将模型形状与张量拟合到模型中。

这个简单的代码

    let tf = require('@tensorflow/tfjs-node');

    let features = {
        x: [1,2,3,4,5,6,7,8,9],
        y: [1,2,3,4,5,6,7,8,9]
      }

    let tensorfeature  = tf.tensor2d(Object.values(features))

    console.log(tensorfeature.shape)

    const model = tf.sequential();
        model.add(tf.layers.dense(
            {
            inputShape: tensorfeature.shape,
            units: 1
        }
            ))
            const optimizer = tf.train.sgd(0.005);
            model.compile({optimizer: optimizer, loss: 'meanAbsoluteError'}); 
            model.fit(tensorfeature,
                {epochs: 5}
                )

导致错误:检查输入时出错:预期的 dense_Dense1_input 具有 3 个维度。但得到了形状为 2,9 的数组

尝试了多种方法,包括重塑、切片等,但都没有运气。有人能指出我到底出了什么问题吗?

标签: tensorflowtensorflow.js

解决方案


model.fit至少需要两个参数 x, y,它们是张量或张量数组。config 对象是第三个参数。

此外,tensorfeature作为参数传递给 model.fit 的 feature() 张量应该比inputShape模型的高一维。由于tensorfeature.shape用作inputShape,如果我们要训练模型,tensorfeature其维度应该被扩展。可以使用reshape或来完成expandDims

model.fit(tensorfeature.expandDims(0))
// or possibly
model.fit(tensorfeature.reshape([1, ...tensorfeature.shape])

模型和训练数据之间的这种形状不匹配已经在这里那里讨论过


推荐阅读