TensorFlow. js: ValueError: Ошибка при проверке: ожидалось, что dens_Dense1_input имеет форму [null, 38], но получил массив с формой [38,1] - PullRequest
1 голос
/ 21 февраля 2020

Я ищу модель для чат-бота, и я сталкиваюсь с этой ошибкой. Будем весьма благодарны за любые предложения о том, как это исправить. Спасибо.

Код.

Настройка нейронной сети:

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);
                }
            })();
        })

Вспомогательные данные: обучение 2d массива с размерами (23, 38) вывод 2d массива с измерениями ( 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).

Пожалуйста, дайте мне знать, если Я могу добавить что-нибудь еще, чтобы лучше прояснить проблему. Спасибо.

1 Ответ

1 голос
/ 21 февраля 2020

Приведенная выше функция bagOfWords возвращает одномерный массив с размерами (38, 1)

Это не одномерный массив. Это скорее двумерный тензор.

ожидал, что dens_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])
...