#python #tensorflow #keras #conv-neural-network
Вопрос:
Я постоянно сталкиваюсь со следующей ошибкой, независимо от того, какой набор данных я использую или слои, которые я вставляю:
Ошибка значения: Фигуры (Нет, Нет) и (Нет, 246, 336, 5) несовместимы
Это был всего лишь пример, очевидно, что цифры меняются в каждом сценарии. Я хотел бы понять, как исправить этот код, но я также был бы признателен за любое объяснение того, как избежать этого в будущем, и знаю, как это исправить, если проблема возникнет в другом сценарии.
Мой соответствующий код:
train_path=data_dir '/train'
test_path=data_dir '/val'
img_shape=(250,340,3)
Preprocessing
from tensorflow.keras.preprocessing.image import ImageDataGenerator
image_gen=ImageDataGenerator(rescale=1/255,
rotation_range=360,
width_shift_range=0.2,
height_shift_range=0.2,
shear_range=0.2,
zoom_range=0.5,
horizontal_flip=True,
vertical_flip=True,
fill_mode='nearest')
image_gen.flow_from_directory(train_path)
Found 3452 images belonging to 5 classes.
<tensorflow.python.keras.preprocessing.image.DirectoryIterator at 0x7f82838f8970>
Model
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Dropout, Conv2D, MaxPool2D, Flatten
batch_size=32
model=Sequential()
model.add(Conv2D(filters=32, kernel_size=(3,3), input_shape=img_shape, activation='relu'))
model.add(Conv2D(filters=32, kernel_size=(3,3), input_shape=img_shape, activation='relu'))
model.add(Dense(5, activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
model.summary()
Model: "sequential_7"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
conv2d_5 (Conv2D) (None, 248, 338, 32) 896
_________________________________________________________________
max_pooling2d_2 (MaxPooling2 (None, 124, 169, 32) 0
_________________________________________________________________
conv2d_6 (Conv2D) (None, 122, 167, 32) 9248
_________________________________________________________________
dense (Dense) (None, 122, 167, 5) 165
=================================================================
Total params: 10,309
Trainable params: 10,309
Non-trainable params: 0
_________________________________________________________________
train_image_gen=image_gen.flow_from_directory(train_path,
target_size=img_shape[:2],
color_mode='rgb',
batch_size=batch_size,
class_mode='categorical')
Found 3452 images belonging to 5 classes.
test_image_gen=image_gen.flow_from_directory(test_path,
target_size=img_shape[:2],
color_mode='rgb',
batch_size=batch_size,
class_mode='categorical',
shuffle=False)
Found 865 images belonging to 5 classes.
test_image_gen.class_indices
{'daisy': 0, 'dandelion': 1, 'rose': 2, 'sunflower': 3, 'tulip': 4}
results=model.fit(train_image_gen,
epochs=5,
validation_data=test_image_gen)
Когда я запускаю model.fit(), именно тогда я сталкиваюсь с ошибкой, как показано выше.
Заранее спасибо!
Комментарии:
1. Ваша сеть состоит из двух сверточных слоев, за которыми следует плотный слой; однако вам необходимо
flatten
вывести свой сверточный слой, прежде чем вы сможете использовать плотный слой. Видишь keras.io/api/layers/reshaping_layers/flatten