Невозможно сжать dim [1], ожидаемый размер 1, получил 4 для «метрики / точность / сжатие» (op: «Squeeze») с входными формами: [?, 4] - PullRequest
0 голосов
/ 10 февраля 2020

Tensorflow - 2.1.0

Python - 3.6

Я искал эту проблему в stackoverflow, но не смог найти решение.

Я пытаюсь создать чатбот, использующий тензор потока Это ошибка:

Невозможно сжать диммер [1], ожидаемое измерение 1, получено 4 для «метрики / точность / сжатие» (op: «Squeeze») с входными формами: [? , 4].

Это код:

words = []
    classes = []
    documents = []
    ignore_words = ['?', '!']
    data_file = open('fil.json').read()
    intents = json.loads(data_file)
    for intent in intents['intents']:
        for pattern in intent['question']:
            w = nltk.word_tokenize(pattern)
            words.extend(w)
            documents.append((w, intent['tag']))
            if intent['tag'] not in classes:
                classes.append(intent['tag'])
    words = [lemmatizer.lemmatize(w.lower()) for w in words if w not in ignore_words]
    words = sorted(list(set(words)))
    classes = sorted(list(set(classes)))
    pickle.dump(words, open('words.pkl', 'wb'))
    pickle.dump(classes, open('classes.pkl', 'wb'))
    training = []
    output_empty = [0] * len(classes)
    for doc in documents:
        bag = []
        pattern_words = doc[0]
        pattern_words = [lemmatizer.lemmatize(word.lower()) for word in pattern_words]
        for w in words:
            bag.append(1) if w in pattern_words else bag.append(0)
        output_row = list(output_empty)
        output_row[classes.index(doc[1])] = 1

        training.append([bag, output_row])
    random.shuffle(training)
    training = np.array(training)
    train_x = list(training[:, 0])
    train_y = list(training[:, 1])
    print("Training data created")
    model = tf.keras.models.Sequential([
        tf.keras.layers.Dense(128, input_shape=(len(train_x[0]),), activation='relu'),
        tf.keras.layers.Dropout(0.2),
        tf.keras.layers.Dense(len(train_y[0]), activation='softmax')
    ])
    model.compile(optimizer='adam',
                  loss='sparse_categorical_crossentropy',
                  metrics=['accuracy'])
    hist = model.fit(train_x, train_y, epochs=5)
    model.save('chatbot_model.h5', hist)

    print("model created")

1 Ответ

2 голосов
/ 12 февраля 2020

Действительно, поскольку ваша модель использует плотный слой softmax в качестве вывода, вы должны установить его потерю на categorical_crossentropy. Ошибка, которую вы получите после этого, является известной проблемой . Есть несколько вариантов, которые могут помочь вам исправить это:

  • Проверьте вашу Python среду. Убедитесь, что Keras не установлен вместе с TensorFlow, и что ваши пакеты Keras-Applications и Keras-Preprocessing обновлены.
  • In model.fit() набор вызовов workers=0.
  • Попробуйте понизить ваш пакет TensorFlow до 2.0.1.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...