Я пытаюсь создать машинный перевод на уровне персонажей, используя нейронные сети. Я сделал предварительную обработку текста. input_one_hot_encoded_list
содержит входные предложения с горячим кодированием, а output_one_hot_encoded_list
содержит предложения с горячим кодированием на другом языке, которого я хочу достичь. В этом примере мой словарь состоит из 55 символов, и у меня есть 100 предложений, поэтому оба массива состоят из 100 списков, который содержит 50 списков (самое длинное предложение имеет 50 символов), который содержит 55 целых чисел (одно горячее кодирование, каждый список содержит пятьдесят четыре 0 и один 1 ). У вас есть идеи, почему это не работает? Ошибка отображается внизу.
print('shape of input_one_hot_encoded_list: ' + str(array(input_one_hot_encoded_list).shape))
print('shape of output_one_hot_encoded_list: ' + str(array(output_one_hot_encoded_list).shape))
shape = array(input_one_hot_encoded_list).shape
model = Sequential()
model.add(LSTM(len(dict), return_sequences=True, stateful=True,
batch_input_shape=shape))
model.add(LSTM(len(dict), return_sequences=True, stateful=True))
model.add(LSTM(len(dict), return_sequences=True, stateful=True))
model.add(Dense(len(dict), activation='softmax'))
model.compile(loss='categorical_crossentropy',
optimizer='rmsprop',
metrics=['accuracy'])
print(model.summary())
model.fit(input_one_hot_encoded_list, output_one_hot_encoded_list, epochs=20)
Результат выполнения кода выше:
shape of input_one_hot_encoded_list: (100, 50, 55)
shape of output_one_hot_encoded_list: (100, 50, 55)
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
lstm_1 (LSTM) (100, 50, 55) 24420
_________________________________________________________________
lstm_2 (LSTM) (100, 50, 55) 24420
_________________________________________________________________
lstm_3 (LSTM) (100, 50, 55) 24420
_________________________________________________________________
dense_1 (Dense) (100, 50, 55) 3080
=================================================================
Total params: 76,340
Trainable params: 76,340
Non-trainable params: 0
_________________________________________________________________
None
Traceback (most recent call last):
File "data_preparation.py", line 175, in <module>
model.fit(input_one_hot_encoded_list, output_one_hot_encoded_list, epochs=20)
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/keras/engine/training.py", line 952, in fit
batch_size=batch_size)
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/keras/engine/training.py", line 751, in _standardize_user_data
exception_prefix='input')
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/keras/engine/training_utils.py", line 102, in standardize_input_data
str(len(data)) + ' arrays: ' + str(data)[:200] + '...')
ValueError: Error when checking model input: the list of Numpy arrays that you are passing to your model is not the size the model expected. Expected to see 1 array(s), but instead got the following list of 100 arrays: [array([[1, 0, 0, ..., 0, 0, 0],
[0, 1, 0, ..., 0, 0, 0],
[0, 0, 1, ..., 0, 0, 0],
...,
[1, 0, 0, ..., 0, 0, 0],
[1, 0, 0, ..., 0, 0, 0],
[1, 0, 0, ..., 0, 0,...