ValueError: Ошибка при проверке ввода: ожидалось, что simple_rnn_1_input имеет 3 измерения, но получил массив с формой (32, 813, 701, 3) - PullRequest
0 голосов
/ 04 марта 2020

У меня проблемы с запуском SimpleRNN. Я пытаюсь создать классификатор изображений RNN, используя Keras, используя tenorflow. Я читаю изображения, используя метод Keras ImageDataGenerator FlowFromDirectory, чтобы я мог контролировать размер пакета через него и передавать свой тренировочный набор в качестве значения x в методе fit. Я считаю, что моя проблема связана с параметром input_shape слоя SimpleRNN. Я понимаю, что это должно быть (размер пакета, временные шаги, входное измерение), но я не могу понять, почему массив, который дается слою (32, 813, 701, 3). Ниже приведен мой текущий код.

train_datagen = ImageDataGenerator(rescale = 1./255,
                                   shear_range = 0.2,
                                   zoom_range = 0.2,
                                   horizontal_flip=True)

test_datagen = ImageDataGenerator(rescale=1./255)

training_set = train_datagen.flow_from_directory('../main_set2/train_set',
                                                 target_size=(813, 701),
                                                 batch_size=32,
                                                 class_mode='binary')

test_set = test_datagen.flow_from_directory('../main_set2/test_set',
                                            target_size=(813, 701),
                                            batch_size=32,
                                            class_mode='binary')
timesteps = 20

model = Sequential()
model.add(SimpleRNN(units=32,
                    activation='tanh',
                    use_bias=True,
                    kernel_initializer='orthogonal',
                    recurrent_initializer='orthogonal',
                    input_shape=(timesteps, 1)
                    ))
model.add(Dense(units=32, activation='relu'))
model.add(Dense(1, activation="relu"))
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])

model.fit(training_set, 
          epochs=50, 
          verbose=2, 
          validation_data=test_set,
          steps_per_epoch=50, 
          validation_steps=20)

Я хотел бы понять, что ожидает input_shape и что я делаю неправильно. Спасибо за вашу помощь

...