Ошибка: ValueError: Error when checking input: expected dense_1_input to have 3 dimensions, but got array with shape (20, 27, 48, 1)
Пытаюсь обучить нейросеть на своем датасете. Пример картинки (все изображения битовые).
Код создания модели:
model = Sequential()
model.add(Dense(1296, activation='relu', input_shape=(27, 48)))
model.add(Dense(10, activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer=RMSprop(), metrics=['accuracy'])
Код обучения и создания генератора:
datagen = ImageDataGenerator()
dirTrain = "D:\\GeneratedI\\train"
train_data = datagen.flow_from_directory(dirTrain, target_size=(27, 48), batch_size=20,
class_mode="categorical", color_mode="grayscale")
dirVal = "D:\\GeneratedI\\val"
validation_data = datagen.flow_from_directory(dirVal, target_size=(27, 48), batch_size=20,
class_mode="categorical", color_mode="grayscale")
print("Training the network...")
t_start = time.time()
history = model.fit_generator(train_data,
steps_per_epoch=60000 / 20,
epochs=10,
validation_data=validation_data,
validation_steps=6000 / 20)
print(time.time() - t_start)
PS Использую tensorflow 1.5 и keras 2.1.6 ввиду отсутствия AVX на моем процессоре.
Ответы (1 шт):
Автор решения: MaxU
→ Ссылка
Судя по тексту ошибки вы подаете на вход сети 4х-мерный тензор, поэтому попробуйте так:
model.add(Dense(1296, activation='relu', input_shape=(27, 48, 1)))
# NOTE: ---------------------------------------> ^^^
PS число образцов / batch_size в размерности input_shape не учитывается, поэтому размерность input_shape должна быть на единицу меньше размерности входного тензора.