这是我的密码
import tensorflow as tf
from tensorflow import keras
from keras import layers
# definition question and answer
questions = [
"你好嗎?",
"今天天氣如何?",
"你有什麼興趣?",
"你喜歡什麼食物?"
]
answers = [
"我很好,謝謝你。",
"今天天氣非常好。",
"我喜歡看書和打電子遊戲。",
"我喜歡吃中式食物,特別是炒飯。"
]
# 將問題和回答轉換成數字
tokenizer = keras.preprocessing.text.Tokenizer()
tokenizer.fit_on_texts(questions + answers)
question_seqs = tokenizer.texts_to_sequences(questions)
answer_seqs = tokenizer.texts_to_sequences(answers)
# 將問題和回答填充到相同的長度
max_len = 20
question_seqs_padded = keras.preprocessing.sequence.pad_sequences(question_seqs, maxlen=max_len)
answer_seqs_padded = keras.preprocessing.sequence.pad_sequences(answer_seqs, maxlen=max_len)
# 定義模型
model = keras.Sequential()
model.add(layers.Embedding(len(tokenizer.word_index) + 1, 50, input_length=max_len))
model.add(layers.LSTM(64))
model.add(layers.Dense(len(tokenizer.word_index) + 1, activation='softmax'))
# 編譯模型
model.compile(loss='categorical_crossentropy', optimizer='adam')
# 訓練模型
model.fit(question_seqs_padded, keras.utils.to_categorical(answer_seqs_padded, num_classes=len(tokenizer.word_index)+1), epochs=100, batch_size=32)
这就是它的错误
ValueError: Shapes (None, 20, 9) and (None, 9) are incompatible
我尝试修复形状(无,20,9)和(无,9)不兼容
model.fit(question_seqs_padded, keras.utils.to_categorical(answer_seqs_padded, num_classes=len(tokenizer.word_index)+1), epochs=100, batch_size=32)
我尝试删除answer_seqs_padded到不兼容(None,9),但它仍然不起作用。
1条答案
按热度按时间j9per5c41#
在这种情况下,你需要在lstm中返回整个序列,所以只用途:
layers.LSTM(64,return_sequences=True)。如果你不使用return_sequences=True,它只会返回最后一个输出。