Я определил simpleRNN в keras со следующим кодом:
# define RNN architecture
from keras.layers import Input
from keras.models import Model
from keras.layers import SimpleRNN
from keras.models import Sequential
model = Sequential()
model.add(SimpleRNN(units = 10,
return_sequences=False,
unroll=True,
input_shape=(6, 2)))
model.compile(loss='mse',
optimizer='rmsprop',
metrics=['accuracy'])
model.summary()
затем я передаю его входными данными, имеющими форму (batch_size, 6, 2), то есть 6 временных шагов, каждый из которых имеет две особенности. Поэтому я ожидаю 6 простых клеток РНН.
При запуске тренинга я получаю следующее сообщение об ошибке:
Error when checking target: expected simple_rnn_2 to have shape (10,) but got array with shape (1,)
и я не понимаю почему.
Смысл RNN (в моем понимании) состоит в том, чтобы его вход питался предыдущей ячейкой RNN, если это не первая ячейка RNN, а новый вход временного шага.
Таким образом, в этом случае я ожидаю, что вторая ячейка RNN будет снабжаться первой ячейкой RNN вектором формы (10,) с единицей измерения = 10. Почему получается, что он получает вектор размером (1,)?
Что странно, так это то, что как только я добавляю плотный слой в модель, это решает проблему. Итак, следующая архитектура:
# define RNN architecture
from keras.layers import Input
from keras.models import Model
from keras.layers import SimpleRNN, Dense
from keras.models import Sequential
model = Sequential()
model.add(SimpleRNN(units = 10,
return_sequences=False,
unroll=False,
input_shape=(6, 2)))
model.add(Dense(1, activation='relu'))
model.compile(loss='mse',
optimizer='rmsprop',
metrics=['accuracy'])
model.summary()
не выдает ошибку. Есть идеи почему?