首页 > 解决方案 > __init__() 为参数“填充”获得了多个值

问题描述

    def get_model(summary=False, backend='tf'):
        """ Return the Keras model of the network
        """
        model = Sequential()
        if backend == 'tf':
            input_shape=(256, 80, 60, 1) # l, h, w, c
        else:
            input_shape=(1, 256, 80, 60) # c, l, h, w
        model.add(Convolution3D(64, 3, 3, 3, activation='relu',
                                padding='same', name='conv1',
                                input_shape=input_shape))
        model.add(MaxPooling3D(pool_size=(1, 2, 2), strides=(1, 2, 2),
                               padding='valid', name='pool1'))
        # 2nd layer group
        model.add(Convolution3D(128, 3, 3, 3, activation='relu',
                                padding='same', name='conv2'))
        model.add(MaxPooling3D(pool_size=(2, 2, 2), strides=(2, 2, 2),
                               padding='valid', name='pool2'))
+ other layers as well

if __name__ == '__main__':
    model = get_model(summary=True,backend='tf')

我正在尝试实现用于视频分类的 c3d 模型。

输入尺寸 = 256 X 80 X 60 X 1

错误显示在主函数中。

我正在尝试使用 C3D 模型进行视频分类。256 帧,80 H,60 W,1 通道(灰度)但遇到这种填充问题(之前使用 tf = 1.14.0,现在 tf = 2.2.0 工作正常)

请参考所附图片

标签: pythondeep-learningconv-neural-network

解决方案


这是函数签名:

tf.keras.layers.Conv3D(
    filters, kernel_size, strides=(1, 1, 1), padding='valid',
    data_format=None, dilation_rate=(1, 1, 1), groups=1, activation=None,
    use_bias=True, kernel_initializer='glorot_uniform',
    bias_initializer='zeros', kernel_regularizer=None,
    bias_regularizer=None, activity_regularizer=None, kernel_constraint=None,
    bias_constraint=None, **kwargs
)

它需要2 个位置参数

第一个是整数过滤器(64)

第二个是kernel_size整数3个整数的元组

因为您的输入不是(3, 3, 3)它需要的元组kernel_size=3,然后将其余部分分配给3, 3键控参数stridesand padding,但随后它看到另一个padding=分配,因此它出错。

底线,请致电:

model.add(Convolution3D(64, (3, 3, 3), activation='relu', 

推荐阅读