当前位置:网站首页>tensorflow2.0 cnn(layerwise)
tensorflow2.0 cnn(layerwise)
2022-07-31 15:37:00 【全栈程序员站长】
大家好,又见面了,我是你们的朋友全栈君。
实验环境:tensorflow版本1.2.0,python2.7
介绍
depthwise_conv2d
来源于深度可分离卷积:
Xception: Deep Learning with Depthwise Separable Convolutions
tf.nn.depthwise_conv2d(input,filter,strides,padding,rate=None,name=None,data_format=None)
除去name
参数用以指定该操作的name,data_format
指定数据格式,与方法有关的一共五个参数:
- input: 指需要做卷积的输入图像,要求是一个4维Tensor,具有
[batch, height, width, in_channels]
这样的shape,具体含义是[训练时一个batch的图片数量, 图片高度, 图片宽度, 图像通道数] - filter: 相当于CNN中的卷积核,要求是一个4维Tensor,具有
[filter_height, filter_width, in_channels, channel_multiplier]
这样的shape,具体含义是[卷积核的高度,卷积核的宽度,输入通道数,输出卷积乘子],同理这里第三维in_channels,就是参数value的第四维 - strides: 卷积的滑动步长。
- padding: string类型的量,只能是”SAME”,”VALID”其中之一,这个值决定了不同边缘填充方式。
- rate: 这个参数的详细解释见【Tensorflow】tf.nn.atrous_conv2d如何实现空洞卷积?
结果返回一个Tensor,shape为[batch, out_height, out_width, in_channels * channel_multiplier]
,注意这里输出通道变成了in_channels * channel_multiplier
实验
为了形象的展示depthwise_conv2d
,我们必须要建立自定义的输入图像和卷积核
img1 = tf.constant(value=[[[[1],[2],[3],[4]],[[1],[2],[3],[4]],[[1],[2],[3],[4]],[[1],[2],[3],[4]]]],dtype=tf.float32)
img2 = tf.constant(value=[[[[1],[1],[1],[1]],[[1],[1],[1],[1]],[[1],[1],[1],[1]],[[1],[1],[1],[1]]]],dtype=tf.float32)
img = tf.concat(values=[img1,img2],axis=3)
filter1 = tf.constant(value=0, shape=[3,3,1,1],dtype=tf.float32)
filter2 = tf.constant(value=1, shape=[3,3,1,1],dtype=tf.float32)
filter3 = tf.constant(value=2, shape=[3,3,1,1],dtype=tf.float32)
filter4 = tf.constant(value=3, shape=[3,3,1,1],dtype=tf.float32)
filter_out1 = tf.concat(values=[filter1,filter2],axis=2)
filter_out2 = tf.concat(values=[filter3,filter4],axis=2)
filter = tf.concat(values=[filter_out1,filter_out2],axis=3)
建立好了img和filter,就可以做卷积了
out_img = tf.nn.conv2d(input=img, filter=filter, strides=[1,1,1,1], padding='VALID')
好了,用一张图来详细展示这个过程
这是普通的卷积过程,我们再来看深度卷积。
out_img = tf.nn.depthwise_conv2d(input=img, filter=filter, strides=[1,1,1,1], rate=[1,1], padding='VALID')
现在我们可以形象的解释一下depthwise_conv2d
卷积了。看普通的卷积,我们对卷积核每一个out_channel
的两个通道分别和输入的两个通道做卷积相加,得到feature map的一个channel,而depthwise_conv2d
卷积,我们对每一个对应的in_channel
,分别卷积生成两个out_channel
,所以获得的feature map的通道数量可以用in_channel* channel_multiplier
来表达,这个channel_multiplier
,就可以理解为卷积核的第四维。
代码清单
import tensorflow as tf
img1 = tf.constant(value=[[[[1],[2],[3],[4]],[[1],[2],[3],[4]],[[1],[2],[3],[4]],[[1],[2],[3],[4]]]],dtype=tf.float32)
img2 = tf.constant(value=[[[[1],[1],[1],[1]],[[1],[1],[1],[1]],[[1],[1],[1],[1]],[[1],[1],[1],[1]]]],dtype=tf.float32)
img = tf.concat(values=[img1,img2],axis=3)
filter1 = tf.constant(value=0, shape=[3,3,1,1],dtype=tf.float32)
filter2 = tf.constant(value=1, shape=[3,3,1,1],dtype=tf.float32)
filter3 = tf.constant(value=2, shape=[3,3,1,1],dtype=tf.float32)
filter4 = tf.constant(value=3, shape=[3,3,1,1],dtype=tf.float32)
filter_out1 = tf.concat(values=[filter1,filter2],axis=2)
filter_out2 = tf.concat(values=[filter3,filter4],axis=2)
filter = tf.concat(values=[filter_out1,filter_out2],axis=3)
out_img = tf.nn.depthwise_conv2d(input=img, filter=filter, strides=[1,1,1,1], rate=[1,1], padding='VALID')
输出:
rate=1, VALID mode result:
[[[[ 0. 36. 9. 27.] [ 0. 54. 9. 27.]] [[ 0. 36. 9. 27.] [ 0. 54. 9. 27.]]]]
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/127979.html原文链接:https://javaforall.cn
边栏推荐
猜你喜欢
[Meetup Preview] OpenMLDB+OneFlow: Link feature engineering to model training to accelerate machine learning model development
外媒所言非虚,苹果降价或许是真的在清库存
「秋招系列」MySQL面试核心25问(附答案)
type of timer
全新宝马3系上市,安全、舒适一个不落
The use of button controls
t-sne 数据可视化网络中的部分参数+
6-22漏洞利用-postgresql数据库密码破解
DBeaver连接MySQL 8.x时Public Key Retrieval is not allowed 错误解决
Getting Started with TextBlock Control Basic Tools Usage, Get Started
随机推荐
WPF project - basic usage of controls entry, you must know XAML
Vb how to connect mysql_vb how to connect to the database collection "advice"
ML.NET related resources
多主复制的适用场景(2)-需离线操作的客户端和协作编辑
对话庄表伟:开源第一课
修改SQL语言实现Mysql 多表关联查询优化
定时器的类型
R语言ggplot2可视化:使用ggpubr包的ggmaplot函数可视化MA图(MA-plot)、font.legend参数和font.main参数设置标题和图例字体加粗
复制延迟案例(3)-单调读
Efficient use of RecyclerView Section 3
工程力学复习资料
ASP.NET Core 产生连续 Guid
Linux check redis version (check mongodb version)
Emmet 语法
【Meetup预告】OpenMLDB+OneFlow:链接特征工程到模型训练,加速机器学习模型开发
7、常见面试口语提问问题汇总
[MySQL] Mysql paradigm and the role of foreign keys
WPF项目--控件入门基础用法,必知必会XAML
第二届中国PWA开发者日
为什么黑客领域几乎一片男生?