ValueError: Ошибка при проверке ввода: ожидалось, что conv2d_1_input будет иметь форму (200, 200, 3), но получил массив с формой (200, 200, 4) - PullRequest
0 голосов
/ 03 мая 2020

все. Я использую Keras для классификации изображений. У меня есть изображения (200,200,4), которые имеют 4 слоя (Результат слияния RGB плюс карта расстояний).

`import warnings
warnings.filterwarnings("ignore")
from keras.models import Sequential
from keras.layers import Convolution2D
from keras.layers import MaxPooling2D
from keras.layers import Flatten
from keras.layers import Dense
from keras.layers import Dropout
from keras.applications import resnet50
from keras.regularizers import l2
import os
from matplotlib import pyplot as plt
from keras.callbacks import ModelCheckpoint
import tensorflow as tf
import keras

os.environ["CUDA_DEVICE_ORDER"]="PCI_BUS_ID" # read gpu in pci order, just like nvidia-smi
os.environ["CUDA_VISIBLE_DEVICES"]="3" # select a number

# Etape 1: Initialisation du cnn
classifier = Sequential()
# Etape de convolution. Ajouter la couche de convolution
classifier.add(Convolution2D(filters=64, kernel_size=3, strides=1, 
                             input_shape=(200, 200, 4), activation="relu"))
classifier.add(MaxPooling2D(pool_size=(2, 2)))
# Ajout d'une couche de convolution
classifier.add(Convolution2D(filters=128, kernel_size=3, strides=1, activation="relu"))
classifier.add(MaxPooling2D(pool_size=(2, 2)))
# Ajout d'une couche de convolution
classifier.add(Convolution2D(filters=256, kernel_size=3, strides=1, activation="relu"))
classifier.add(MaxPooling2D(pool_size=(2, 2)))
# Ajout d'une couche de convolution
classifier.add(Convolution2D(filters=512, kernel_size=3, strides=1, activation="relu"))
classifier.add(MaxPooling2D(pool_size=(2, 2)))
# Etape de flatening
classifier.add(Flatten())
# Etape 4 Couche completement connectée
classifier.add(Dense(units=2048, activation="relu", kernel_regularizer=l2(0.01), bias_regularizer=l2(0.01)))
classifier.add(Dropout(0.5))

classifier.add(Dense(units=1, activation="sigmoid"))
# Compilation du reseau
from keras.optimizers import Adam
opt = Adam(lr=0.0009)
classifier.compile(optimizer=opt, loss="binary_crossentropy",
                   metrics=["accuracy"])

# checkpoint
filepath = "classification_4channels.hdf5"
checkpoint = ModelCheckpoint(filepath, monitor='val_accuracy', verbose=1, save_best_only=True, mode='max')
callbacks_list = [checkpoint]

from keras.preprocessing.image import ImageDataGenerator


train_datagen = ImageDataGenerator(
        rescale=1./255,
        shear_range=0.2,
        zoom_range=0.2,
        brightness_range=(0.1, 0.9),
        channel_shift_range=150.0,
        horizontal_flip=True)

test_datagen = ImageDataGenerator(rescale=1./255)


training_set = train_datagen.flow_from_directory(
        'datasetTe/training_set',
        target_size=(200, 200),
        color_mode='rgba',
        batch_size=32,
        class_mode='binary')


test_set = test_datagen.flow_from_directory(
        'datasetTe/test_set',
        target_size=(200, 200),
        color_mode='rgba',
        batch_size=32,
        class_mode='binary')

history = classifier.fit_generator(
        training_set,
        steps_per_epoch=(training_set.samples / 32),
        epochs=20,
        callbacks=callbacks_list,
        validation_data=test_set,
        validation_steps=(test_set.samples / 32)

        )

`Но когда я выполняю код, он дает мне эту ошибку.

ValueError: Ошибка при проверке ввода: ожидалось, что conv2d_1_input имеет форму (200, 200, 3), но получил массив с формой (200, 200, 4).

Я новичок в Deeplearning. Пожалуйста, помогите мне.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...