【发布时间】:2017-06-26 20:28:05
【问题描述】:
我正在尝试在 python 3 中使用 keras 执行序列分类。我正在尝试对单词序列进行分类。在我的数据中,我使用 word_2_vec 将单词转换为形状为 300 的数组。我的训练数据如下
X --> 词向量列表列表(所有词向量列表长度为50个词向量)
Y --> 一个热编码的正确类的列表(像这样:[[0, 0, 1], [1, 0, 0], [1, 0, 0]...])
当我尝试初始化模型并将我的数据拟合到它时,我不断收到错误。我是使用 keras 进行深度学习的新手。我的模型的层应该是什么。我得到的一个特殊错误是我的 input_shape 不正确。在这种情况下我的 input_shape 是什么?
代码:
training_data = []
with open(INTENT_RECOGNITION_TRAINING, 'r') as json_file:
json_obj = json.load(json_file)
for data in json_obj['data']:
for query in data['queries']:
words = [START_TOKEN] + word_tokenize(query[0]) + [END_TOKEN]
if len(words) > JText.MAX_QUERY_LENGTH:
JText.MAX_QUERY_LENGTH = len(words)
training_data.append((words, data['intent']))
training_data = [(JText._pad_sequence(ws, JText.MAX_QUERY_LENGTH), intent) for (ws, intent) in training_data]
for i in range(len(training_data)):
if training_data[i][1] not in JText.INTENTS:
JText.INTENTS.append(training_data[i][1])
query_vector = []
for w in training_data[i][0]:
if w in JText.WORD2VEC.vocab:
query_vector.append(JText.WORD2VEC[w])
else:
query_vector.append(np.zeros(300))
training_data[i] = (query_vector, training_data[i][1])
random.shuffle(training_data)
X_train = [tup[0] for tup in training_data]
y_train = [tup[1] for tup in training_data]
y_labelencoder = LabelEncoder()
y_train = y_labelencoder.fit_transform(y_train).reshape(-1, 1)
y_onehotencoder = OneHotEncoder(categorical_features=[0])
y_train = y_onehotencoder.fit_transform(y_train).toarray()
recognizer = Sequential([
LSTM(100, input_shape=(JText.MAX_QUERY_LENGTH, 300)),
Dense(len(JText.INTENTS), activation='sigmoid')
])
recognizer.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
recognizer.fit(X_train, y_train, nb_epoch=100, batch_size=10)
收到此错误:
Exception: Error when checking model input: expected lstm_input_1 to have 3 dimensions, but got array with shape (21, 1)
【问题讨论】:
-
欢迎来到 StackOverflow。请阅读并遵循帮助文档中的发布指南。 Minimal, complete, verifiable example 适用于此。在您发布 MCVE 代码并准确描述问题之前,我们无法有效地帮助您。
标签: python python-2.7 python-3.x machine-learning nlp