简体   繁体   English

在keras中修复3D Conv的input_shape(后端的Tensorflow)

[英]fix input_shape of 3D Conv in keras (Tensorflow at the backend)

I have around 8k+ images. 我有大约8k +图像。 After preprocessing I have numpy arrays of images of size 224*224*3 and I am using inception_V3 as a base model. 在预处理后,我有大小为224 * 224 * 3的numpy图像数组,我使用inception_V3作为基本模型。 I have label(y) of binary classification. 我有二进制分类的标签(y)。

Here are some quick insights: 以下是一些快速见解:

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

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

Now when I try to fit my model then I am getting this error: 现在,当我尝试适合我的模型时,我收到此错误:

ValueError: Error when checking input: expected conv3d_42_input to have shape (5058, 224, 224, 3) but got array with shape (224, 224, 3, 1) 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))

Literally, I am screwed up with the above error. 从字面上看,我搞砸了上面的错误。 I also saw some similar answers but can't find the solution 我也看到了一些类似的答案,但找不到解决方案

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))

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM