исправить input_shape 3D Conv в кератах (Tensorflow на бэкэнде) - PullRequest
0 голосов
/ 23 июня 2019

у меня около 8к + картинок.После предварительной обработки у меня есть множество массивов изображений размером 224 * 224 * 3, и я использую inception_V3 в качестве базовой модели.У меня есть метка (y) двоичной классификации.

Вот несколько быстрых выводов:

X_train.shape = (5058, 224, 224, 3, 1)   #after reshaping

Conv_3d input_shape = (5058,224,224, 3) 

Теперь, когда я пытаюсь соответствовать своей модели, я получаю эту ошибку:

ValueError: Ошибка при проверке ввода: ожидалось, что conv3d_42_input будет иметь форму (5058, 224, 224, 3), но получит массив с формой (224, 224, 3, 1)

base_model = InceptionV3(weights='imagenet', include_top=False, input_shape=(224, 224, 3))

def conv_3d():

    model = Sequential()
    model.add(Conv3D(32, (3, 3, 3), activation='relu',input_shape= (5058,224,224, 3) ,padding='same'))                      #(time_sequence, width, height, channels)
    model.add(MaxPooling3D(pool_size=(1, 2, 2), strides=(1, 2, 2)))
    model.add(Conv3D(64, (3, 3, 3), activation='relu'))
    model.add(MaxPooling3D(pool_size=(1, 2, 2), strides=(1, 2, 2)))
    model.add(Conv3D(128, (3, 3, 3), activation='relu'))
    model.add(Conv3D(128, (3, 3, 3), activation='relu'))
    model.add(MaxPooling3D(pool_size=(1, 2, 2), strides=(1, 2, 2)))
    model.add(Conv3D(256, (2, 2, 2), activation='relu'))
    model.add(Conv3D(256, (2, 2, 2), activation='relu'))
    model.add(MaxPooling3D(pool_size=(1, 2, 2), strides=(1, 2, 2)))

    model.add(Flatten())
    model.add(Dense(1024))
    model.add(Dropout(0.5))
    model.add(Dense(1024))
    model.add(Dropout(0.5))
    model.add(Dense(2, activation='softmax'))

    return model


X_train_temp = X_train.reshape(X_train.shape[0], 224, 224, 3, 1)
X_valid_temp = X_valid.reshape(X_valid.shape[0], 224, 224, 3, 1)

model.fit(X_train_temp, y_train, epochs=50, validation_data=(X_valid_temp, y_valid))

Буквально я облажался с вышеуказанной ошибкой.Я также видел некоторые похожие ответы, но не могу найти решение

1 Ответ

0 голосов
/ 23 июня 2019
def conv_3d():

    model = Sequential()
    model.add(Conv3D(32, (3, 3, 3), activation='relu',input_shape= (224,224,3) ,padding='same'))                      #(time_sequence, width, height, channels)
    model.add(MaxPooling3D(pool_size=(1, 2, 2), strides=(1, 2, 2)))
    model.add(Conv3D(64, (3, 3, 3), activation='relu'))
    model.add(MaxPooling3D(pool_size=(1, 2, 2), strides=(1, 2, 2)))
    model.add(Conv3D(128, (3, 3, 3), activation='relu'))
    model.add(Conv3D(128, (3, 3, 3), activation='relu'))
    model.add(MaxPooling3D(pool_size=(1, 2, 2), strides=(1, 2, 2)))
    model.add(Conv3D(256, (2, 2, 2), activation='relu'))
    model.add(Conv3D(256, (2, 2, 2), activation='relu'))
    model.add(MaxPooling3D(pool_size=(1, 2, 2), strides=(1, 2, 2)))

    model.add(Flatten())
    model.add(Dense(1024))
    model.add(Dropout(0.5))
    model.add(Dense(1024))
    model.add(Dropout(0.5))
    model.add(Dense(2, activation='softmax'))

    return model


X_train_temp = X_train.reshape(X_train.shape[0], 224, 224, 3, 1)
X_valid_temp = X_valid.reshape(X_valid.shape[0], 224, 224, 3, 1)

model.fit(X_train_temp, y_train, epochs=50, validation_data=(X_valid_temp, y_valid))
...