keras实现 3d 分组卷积实现

tensorflow 3d 分组卷积实现

只有2D想着自己弄个3D的

class Group_Conv(layers.Layer):  # 分组卷积
    	def __init__(self, filters, stride=(1, 1, 1), kernel_size=(3, 3, 3), 		groups=4, padding='same', activation='relu',
                 name='',
                 **kwargs):  # 里面可以自己传递想要的参数,这里我只设置了一个参数alpha
        super(Group_Conv, self).__init__(**kwargs)
        self.kernel = kernel_size
        self.n = name
        self.padding = padding
        self.activation = activation
        self.stride = stride
        self.filters = filters
        self.groups = groups
        self.nb_og = self.filters // self.groups  # 对输出特征图通道进行分组
        self.conv3d = Conv3D(filters=self.nb_og, kernel_size=self.kernel, strides=self.stride, padding=self.padding,
                             activation=self.activation, name=self.n)
                             
    def call(self, x, **kwargs):
        channel_axis = 1 if K.image_data_format() == 'channels_first' else -1
        in_channels = K.int_shape(x)[channel_axis]  # 计算输入特征图的通道数
        nb_ig = in_channels // self.groups  # 对输入特征图通道进行分组

        gc_list = []
        for i in range(self.groups):
            if channel_axis == -1:
                x_group = layers.Lambda(lambda z: z[:, :, :, :, i * nb_ig: (i + 1) * nb_ig])(x)
            else:
                x_group = layers.Lambda(lambda z: z[:, i * nb_ig: (i + 1) * nb_ig, :, :, :])(x)
            # gc_list.append(MyConv(x_group , filters=nb_og, kernel_size=kernel ,strides=stride))
            gc_list.append(self.conv3d(x_group))  # 对每组特征图进行单独卷积
        return layers.Concatenate(axis=channel_axis)(gc_list)  # 在通道上进行特征图的拼接

改了一下大神的2D实现: link.

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值