глубина ввода должна делиться равномерно на глубину фильтра: 1 против 3 [[{{модель узла / conv1_conv / Conv2D}}]] - PullRequest
0 голосов
/ 24 апреля 2020

На самом деле у меня есть первый опыт работы с проектом компьютерного зрения, и я запускаю свой код и получаю эту ошибку. Фактически я написал один код для color_mode = 'rgb', а другой - для color_mode = 'grayescale' ... когда я запускаю код для RGB в порядке, но для оттенков серого я получил эту ошибку.

глубина ввода должна делиться равномерно на глубину фильтра: 1 против 3 [[{{модель узла / conv1_conv / Conv2D}}]]

Я просто меняю цветовой режим '' '

BATCH_SIZE=32
totalTrain=3980
totalVal=334
TARGET_SIZE=(640,480)
    train_datagen = ImageDataGenerator(
    rescale=1./255,
    shear_range=0.2,
    zoom_range=0.2,
    horizontal_flip=True)

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

train = train_datagen.flow_from_dataframe(
    dataframe=train_df,
    directory=t_dir,
    x_col="filename",
    y_col="class",
    target_size=TARGET_SIZE,
    color_mode='grayscale',
    batch_size=BATCH_SIZE,
    class_mode='categorical',
    shuffle=True)

validation = valid_generate.flow_from_dataframe(
    dataframe=valid_df,
    directory=t_dir,
    x_col="filename",
    y_col="class",
    target_size=TARGET_SIZE,
    color_mode='grayscale',
    batch_size=BATCH_SIZE,
    class_mode='categorical',
    shuffle=True)

gen = ImageDataGenerator(rescale=1./255)
test = gen.flow_from_directory(
    directory=test_path, class_mode="categorical", target_size=TARGET_SIZE,color_mode='grayscale', batch_size=BATCH_SIZE)

base_model = ResNet50(include_top=False, weights='imagenet',
                      input_shape=(TARGET_SIZE[0], TARGET_SIZE[1], 3))


x = base_model.output
x = GlobalAveragePooling2D(name='avg_pool')(x)
x = Dense(2, activation='softmax', name='probs')(x)
model = Model(base_model.input, x)

model.compile(optimizer=Adam(lr=LEARNING_RATE),
              loss='categorical_crossentropy',
              metrics=['accuracy'])

print("start training ...")
history = model.fit(train,
                    steps_per_epoch=totalTrain // BATCH_SIZE,
                    epochs=EPOCHS,
                    validation_data=validation,
                    validation_steps=totalVal//BATCH_SIZE)

' ''

1 Ответ

0 голосов
/ 25 апреля 2020

решено. Вместо использования color_mode = 'grayescale', сохраните его в RGB и добавьте эту функцию, чтобы передать как preprocessing_function

def gray_to_rgb(img):
   x=np.dot(img[...,:3], [0.2989, 0.5870, 0.1140])
   mychannel=np.repeat(x[:, :, np.newaxis], 3, axis=2)
   return mychannel
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...