Как исправить 'ValueError: Невозможно передать значение формы X для Tensor Y, которая имеет форму Z на Keras - PullRequest
0 голосов
/ 21 апреля 2019

Архитектура модели

model = Sequential()
model.add(LSTM(50,batch_input_shape(50,10,9),return_sequences=True))
model.add(LSTM(30,return_sequences=True, activation='tanh'))
model.add(LSTM(20,return_sequences=False, activation='tanh'))
model.add(Dense(9, activation='tanh'))
model.compile(loss='mean_squared_logarithmic_error',
                   optimizer='adam',metrics=['accuracy'])

Резюме выглядит следующим образом

Layer (type)                 Output Shape              Param #   
=================================================================
lstm_1 (LSTM)                (50, 10, 50)              12000     
_________________________________________________________________
lstm_2 (LSTM)                (50, 10, 30)              9720      
_________________________________________________________________
lstm_3 (LSTM)                (50, 20)                  4080      
_________________________________________________________________
dense_1 (Dense)              (50, 9)                   189       
=================================================================
Total params: 25,989
Trainable params: 25,989
Non-trainable params: 0

Я использую fit_generator для обучения модели.Я намерен использовать предикт вместо предиката.Я написал собственный генератор, используя yeild.Нет проблем с этим, потому что предикат_генератор работает нормально

model.fit_generator(generator=generator, 
                    steps_per_epoch=250, epochs=10, shuffle=True)

Когда я использую predict

model.predict(testX = np.zeros(50,10,9))

Это приводит меня к ошибке ниже

ValueError: Cannot feed value of shape (32, 10, 9) for Tensor
          'lstm_1_input:0', which has shape '(50, 10, 9)'

СейчасЯ понятия не имею, откуда взялись эти 32, потому что входная форма (50,10,9) - это именно то, что он ожидает.

1 Ответ

0 голосов
/ 21 апреля 2019

Используйте

model.predict(np.random.randn(50,10,9), batch_size=50)

Размер партии устанавливается на 50 через batch_input_shape(50,10,9)

Однако, когда вы используете predict, вы не передаете batch_size, который по умолчанию равен 32. Таким образом, он пытается передать (32, 10, 9) в (50, 10, 9) и завершается неудачей.

Это не ошибка в fit_generator, потому что ваш generator должен возвращать партию размером 50.

https://keras.io/models/model/#predict

...