【问题标题】:Error when fitting 3D convolutional neural network拟合 3D 卷积神经网络时出错
【发布时间】:2019-05-29 10:46:01
【问题描述】:

我正在尝试在 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.x keras conv-neural-network


    【解决方案1】:

    假设您使用的是通道优先 data_format,您对第一个 Conv3D 层的 input_shape 参数应该是 (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)))
    

    【讨论】:

    • 我尝试使用你的代码,但仍然抛出错误:'''ValueError: 负尺寸大小是由输入形状的'conv3d_63/convolution'(操作:'Conv3D')从 1 中减去 3 引起的: [?,1,256,256,256], [3,3,3,256,64].'''
    • 你说的是什么意思:“假设batch_size(of 10)被错误地指定了,”?
    • 10 来自input_shape=(10,1,256,256,256)。您收到错误消息是因为您使用的是 channels_last 数据格式。
    • 我庆祝得太早了:(,我开始训练模型然后我离开了(因为它可能需要很多时间来训练)。当我回来时它又给了我一个错误
    • ValueError: 检查输入时出错:预期 conv3d_5_input 有 5 个维度,但得到了形状为 (89, 256, 256, 256) 的数组
    猜你喜欢
    • 2018-07-16
    • 2020-10-19
    • 1970-01-01
    • 1970-01-01
    • 2017-01-01
    • 1970-01-01
    • 2017-07-30
    • 2020-08-16
    相关资源
    最近更新 更多