首页 > 解决方案 > 拟合 3D 卷积神经网络时出错

问题描述

我正在尝试在 google colab 上训练卷积神经网络来解决医学分类问题。数据集是 89 个 256x256x256 图像用于训练和 11 个用于测试。当我尝试制作我的模型训练时,它给了我以下错误:

import keras
from keras import optimizers
import keras.models
from keras.models import Sequential
import keras.layers
from keras.layers.convolutional import Conv3D
from keras.layers.convolutional import MaxPooling3D
from keras.layers import Dropout
from keras.layers import Flatten
from keras.layers import Dense
from keras import metrics
model = Sequential()
model.add(Conv3D(64, kernel_size=(3,3,3),
                 activation='relu',
                 input_shape=(10,1,256,256,256)))
model.add(Conv3D(64, (2,2,2), activation='relu'))
model.add(MaxPooling3D(pool_size=(2,2,2)))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(128, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(2, activation='softmax'))

opt=keras.optimizers.Adam(lr=0.001, beta_1=0.9, beta_2=0.999, epsilon=None, decay=0.0, amsgrad=False)
model.compile(opt, loss='categorical_crossentropy', metrics=['mae','acc'])
model.fit(x=train_data, y=train_labels,epochs=100, batch_size=10, verbose=2 ,callbacks=None, validation_split=0.0, validation_data=(validation_data,validation_labels), shuffle=True)

这是我得到的错误:

ValueError: Input 0 is in compatible with layer conv3d_56: expected ndim=5, found ndim=6

标签: python-3.xkerasconv-neural-network

解决方案


假设您使用的是通道优先 data_format,您input_shape对第一个 Conv3D 层的参数应该是(CHANNELS, HEIGHT, WIDTH, DEPTH). 但是您的输入形状元组的长度为 5,这不是 Conv3D 层所期望的。假设错误指定了 batch_size(of 10),进行以下更改应该可以解决问题

model.add(Conv3D(64, kernel_size=(3,3,3),
                 activation='relu',
                 input_shape=(1,256,256,256)))

编辑

如果您使用的是 channels_last 数据格式,您input_shape应该是(HEIGHT, WIDTH, DEPTH, CHANNELS). 假设你的图像有 1 个通道,上面的行应该是,

model.add(Conv3D(64, kernel_size=(3,3,3),
                 activation='relu',
                 input_shape=(256,256,256, 1)))

推荐阅读