使用MXNet的Keras中的Conv3D:张量形状错误

时间:2019-07-05 13:48:44

标签: python keras conv-neural-network mxnet

我在TensorFlow的Keras中实现了3D CNN,在此之前效果很好。现在,为了加快在多个GPU上的培训,我想尝试将MXNetKeras一起使用。我希望除了“ {channels_last”到“ channels_first”问题外,无需更改很多代码,但是该程序在Conv3D操作时崩溃。

是keras.json文件,因此应将其设置为可以正常运行:

{
    "backend": "mxnet",
    "image_data_format": "channels_first",
    "epsilon": 1e-07,
    "floatx": "float32"
}

这是显示错误的一小部分:

from keras.models import *
from keras.layers import *
from keras.optimizers import *

def SimpleInceptionBlock(input, num_kernels, kernel_init='he_normal', padding='same', bn_axis=1):
    tower1 = Conv3D(num_kernels, 1, padding=padding, kernel_initializer=kernel_init)(input)
    tower1 = BatchNormalization()(tower1)
    tower1 = ELU()(tower1)

    tower2 = MaxPooling3D(pool_size=(2, 2, 2), strides=(1, 1, 1), padding=padding)(input)
    tower2 = Conv3D(num_kernels, 1, padding=padding, kernel_initializer=kernel_init)(tower2)
    tower2 = BatchNormalization()(tower2)
    tower2 = ELU()(tower2)

    output = concatenate([tower1, tower2], axis=bn_axis)
    return output


def TestNet(input_size=(1,64,64,64), num_class=7):
    bn_axis = 1

    img_input = Input(shape=input_size)

    filter1 = SimpleInceptionBlock(img_input, 16)
    # this runs fine, filter1.shape = (None, 32, 64, 64, 64)

    filter2 = SimpleInceptionBlock(filter1, 16)

    output = Conv3D(num_class, (1, 1, 1), activation='softmax', kernel_initializer = kernel_init, padding='same', kernel_regularizer=l2(1e-4))(filter2)
    model = Model(input=img_input, output=output)

    return model


model = TestNet()

SimpleInceptionBlock”的第一个调用运行正常,与预期的filter1.shape = (None, 32, 64, 64)相同,但是第二个调用会产生错误消息:

  

操作符concat0中的错误:[15:40:58]   C:\ Jenkins \ workspace \ mxnet-tag \ mxnet \ src \ operator \ nn \ concat.cc:66:   检查失败:shape_assign(&(* in_shape)[i],dshape)输入不兼容   形状:预期[0,0,64,64,64],得到[0,16,64,65,65]

0 个答案:

没有答案