Ошибка при проверке цели: ожидалось, что dens_21 имеет 2 измерения, но получил массив с формой (2300, 4, 54) - PullRequest
0 голосов
/ 21 марта 2020

У меня есть проблема, которая связана с предсказанием четырех выходных данных, когда задан вектор предикторов. Выдает ошибку на входе слоя LSTM.

У меня есть

X.shape,Y.shape = ((2300, 36, 768), (2300, 4, 54))


# Core Part

checkpoint = ModelCheckpoint('model-{epoch:03d}-{acc:03f}-{val_acc:03f}.h5', verbose=1, monitor='val_loss',save_best_only=True, mode='auto')  

data_dim = 768
timesteps = X.shape[1]
num_classes = 10


# # expected input data shape: (batch_size, timesteps, data_dim)
model = Sequential()

model.add(LSTM(256, return_sequences=True, input_shape=(timesteps, data_dim))) 
model.add(LSTM(64, return_sequences=True))  
model.add(LSTM(32)) 

model.add(Dense(54, activation='softmax'))

model.compile(loss='categorical_crossentropy', optimizer='rmsprop',  metrics=['accuracy'])

model.fit(X, Y, batch_size=64, epochs=10, validation_split=0.1)

Приведенный выше код работает нормально, когда у меня есть X.shape,Y.shape = ((2300, 36, 768), (2300, 15))

Как мне преодолеть Исходя из этого, и как я могу установить уровни LSTM и DENSE, если у меня более одного, четырех или десяти выводов прогноза?

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 22 марта 2020

Если ваш вывод не является последовательностью, вы можете использовать слой Reshape следующим образом:

from keras.models import Sequential
from keras.layers import LSTM, Reshape, Dense, Activation
model = Sequential()

model.add(LSTM(256, return_sequences=True, input_shape=(100, 32))) 
model.add(LSTM(64, return_sequences=True))  
model.add(LSTM(32))

# now we have a vector of length 32 and
# we want the dense layer to have 4*54=216 neurons so that
# we will be able to reshape it to a matrix of shape (4, 54) in
# the next (Reshape) layer.
model.add(Dense(4*54))
model.add(Reshape((4, 54)))

model.add(Activation('softmax'))

model.summary()

, который будет печатать:

Model: "sequential_1"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
lstm_1 (LSTM)                (None, 100, 256)          295936    
_________________________________________________________________
lstm_2 (LSTM)                (None, 100, 64)           82176     
_________________________________________________________________
lstm_3 (LSTM)                (None, 32)                12416     
_________________________________________________________________
dense_1 (Dense)              (None, 216)               7128      
_________________________________________________________________
reshape_1 (Reshape)          (None, 4, 54)             0         
_________________________________________________________________
activation_1 (Activation)    (None, 4, 54)             0         
=================================================================
Total params: 397,656
Trainable params: 397,656
Non-trainable params: 0
0 голосов
/ 21 марта 2020

Если вы ожидаете получить 4 выходных данных, ваш последний Dense слой должен иметь 4 нейронов, а не 54 , то есть

model.add(Dense(54, activation='softmax'))

должно быть:

model.add(Dense(4, activation='softmax'))

Кроме того, ваш Y должен иметь форму (number_of_examples, 4) в вашем Если это

(2300, 4) вместо (2300, 4, 54)

Если у вас действительно есть Y с формой (2300, 4, 54), то вы не можете использовать * Слой 1030 * на выходе как слой Dense работает только с примерами, каждый из которых является одномерным вектором.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...