TensorFlow.js:ValueError:检查时出错:预期density_Dense1_input的形状为[null,38],但数组的形状为[38,1]

时间:2020-02-21 01:42:55

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

我正在寻找一种聊天机器人模型,但遇到此错误。任何有关如何解决此问题的建议将不胜感激。谢谢。

代码。

设置神经网络:

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)的2d数组

单词袋:

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)。

请让我知道是否可以添加更多内容以帮助更好地阐明问题。谢谢。

1 个答案:

答案 0 :(得分:1)

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

它不是一维数组。而是2d张量。

预计density_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])