【问题标题】:TensorFlow.js: ValueError: Error when checking : expected dense_Dense1_input to have shape [null,38] but got array with shape [38,1]TensorFlow.js:ValueError:检查时出错:预期dense_Dense1_input的形状为[null,38],但得到的数组形状为[38,1]
【发布时间】:2025-11-25 06:50:02
【问题描述】:

我正在为聊天机器人训练模型,但遇到了这个错误。任何有关如何解决此问题的建议将不胜感激。谢谢。

代码。

设置神经网络:

var model = await tf.sequential();
        model.add(tf.layers.dense({
            units: 8,
            inputShape: training[0].length
        }));
        // console.log(model);
        model.add(tf.layers.dense({
            units: 8
        }));
        model.add(tf.layers.dense({
            units: 8
        }));
        model.add(tf.layers.dense({
            units: output[0].length,
            activation: 'softmax'
        }))
        model.compile({loss: 'meanSquaredError', optimizer: 'sgd'});

        await model.fit(tf.stack(training), tf.stack(output), {
            epochs: 1000,
            batchSize: 8
        }).then(printCall => {

            // IIFE function to prompt for user input.
            (function () {
                console.log("(Type 'quit' to stop)");
                while (true) {
                    let inp = "Hi";
                    if (inp.toLowerCase() == "quit")
                        break;
                    var results = model.predict(tf.tensor(bagOfWords(inp, uniq_words)));
                    console.log(result);
                }
            })();
        })

支持数据: 训练尺寸为 (23, 38) 的二维数组 输出维度为 (23, 6) 的二维数组

词袋:

function bagOfWords(s, words) {
    var bag = [];
    for (var i = 0; i < uniq_words.length; i++) {
        bag.push(0);
    }
    var sWords = tokenizer.tokenize(s);
    var s_words = [];
    sWords.map(each => {
        s_words.push(natural.LancasterStemmer.stem(each));
    });

    for (var se in s_words) {
        for (var w in uniq_words) {
            if (uniq_words[w] == s_words[se])
                bag[w] = 1;
        }
    }
    return bag;
}

上述函数 bagOfWords 返回一个维度为 (38, 1) 的一维数组。

如果我可以添加更多内容以帮助更好地澄清问题,请告诉我。谢谢。

【问题讨论】:

  • 等等,错误信息到底是什么??
  • ValueError: 检查时出错:预期dense_Dense1_input 的形状为[null,38],但得到的数组的形状为[38,1]。

标签: javascript tensorflow deep-learning neural-network tensorflow.js


【解决方案1】:

上述函数 bagOfWords 返回一个维度为 (38, 1) 的一维数组

它不是一维数组。它是一个二维张量。

预计dense_Dense1_input 的形状为[null,38],但得到的数组的形状为[38,1]

错误是由形状不匹配引起的。由于tf.tensor(bagOfWords(inp, uniq_words)) 是形状为 [38, 1] 的张量,而模型期望形状为 [null, 38] 的张量,因此可以将张量重新整形为后一种形状

tf.tensor(bagOfWords(inp, uniq_words)).reshape([-1, 38])

【讨论】:

  • 现在工作正常。谢谢。
  • 但是为什么数组中有null[null, 38]。不应该只是[38] 吗?
最近更新 更多