首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >keras卷积层_keras实现全卷积神经网络

keras卷积层_keras实现全卷积神经网络

作者头像
全栈程序员站长
发布2022-11-17 12:39:24
发布2022-11-17 12:39:24
48000
代码可运行
举报
运行总次数:0
代码可运行

大家好,又见面了,我是你们的朋友全栈君。

分组卷积在pytorch中比较容易实现,只需要在卷积的时候设置group参数即可 比如设置分组数为2

代码语言:javascript
代码运行次数:0
运行
复制
conv_group = nn.Conv2d(C_in,C_out,kernel_size=3,stride=3,padding=1,groups = 2)

但是,tensorflow中目前还没有分组卷积,只能自己手动编写分组卷积函数。 在编写程序之前大家要先理解分组卷积的形式,也就是对特征图在通道上进行划分,例如设置group=3,对输入特征图通道划分成三组,输出特征图也要划分成3组,再对三组输入输出特征图分别进行卷积。 实现过程如下: 1.获取输入特征图和输出特征图通道数,再结合分组数进行划分 2.对输入特征图的每一组进行单独卷积 3.将每组卷积后的结果进行通道上的拼接 代码如下:

代码语言:javascript
代码运行次数:0
运行
复制
def group_conv(x, filters, kernel, stride, groups):
channel_axis = 1 if K.image_data_format() == 'channels_first' else -1
in_channels = K.int_shape(x)[channel_axis]#计算输入特征图的通道数
nb_ig = in_channels // groups#对输入特征图通道进行分组
nb_og = filters // groups#对输出特征图通道进行分组
gc_list = []
for i in range(groups):
if channel_axis == -1:
x_group = Lambda(lambda z: z[:, :, :, i * nb_ig: (i + 1) * nb_ig])(x)
else:
x_group = Lambda(lambda z: z[:, i * nb_ig: (i + 1) * nb_ig, :, :])(x)
gc_list.append(Conv2D(filters=nb_og, kernel_size=kernel, strides=stride, 
padding='same', use_bias=False)(x_group))#对每组特征图进行单独卷积
return Concatenate(axis=channel_axis)(gc_list)#在通道上进行特征图的拼接

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/226858.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年10月30日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档