概述
博客之星评选,谢谢您的支持!微信、qq五连击投票(无需关注、无需登录)
人工智能博士(投票链接):http://m234140.nofollow.ax.mvote.cn/opage/4fddfa73-b1fa-b047-f666-98f84c9c25c4.html
tf.nn.conv2d是TensorFlow里面实现卷积的函数,是搭建卷积神经网络比较核心的一个方法。
函数格式:
tf.nn.conv2d(input, filter, strides, padding, use_cudnn_on_gpu = Noen, name = None)
参数说明:
第一个参数input:指需要做卷积的输入图像,它要求是一个4维的Tensor,类型为float32和float64之一,shape为[batch, in_height, in_width, in_channels]:
- batch:训练时一个batch的图片数量
- in_height:输入图像的高度
- in_width:输入图像的宽度
- in_channels:输入图像的通道数,灰度图像则为1,彩色图像则为3
第二个参数filter:CNN卷积网络中的卷积核,要求是一个Tensor,类型和input类型相同,shape为[filter_height, filter_width, in_channels, out_channels]:
- filter_height:卷积核的高度
- filter_width:卷积核的宽度
- in_channels:图像的通道数,input的in_channels相同
- out_channels:卷积核的个数
第三个参数strides:不同维度上的步长,是一个长度为4的一维向量,[ 1, strides, strides, 1],第一维和最后一维的数字要求必须是1。因为卷积层的步长只对矩阵的长和宽有效。
第四个参数padding:string类型,表示卷积的形式,是否考虑边界,值为“SAME”和“VALID”,"SAME"是考虑边界,不足的时候用填充周围,"VALID"则不考虑边界。
第五个参数use_cudnn_on_gpu: bool类型,是否使用cudnn加速,默认为true。
该函数返回的就是我们常说的feature map,shape仍然是[batch, height, width, channels]
这种形式。
下边通过例子来说明tf.nn.conv2d()函数的用法:
case1:输入是1张 3*3 大小的图片,图像通道数是5,卷积核是 1*1 大小,数量是1 ,步长是[1,1,1,1],最后得到一个 3*3 的feature map。1张图最后输出就是一个 shape为[1,3,3,1] 的tensor。
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import tensorflow as tf
Input = tf.Variable(tf.random_normal([1, 3, 3, 5]))
Filter = tf.Variable(tf.random_normal([1, 1, 5, 1]))
conv1 = tf.nn.conv2d(Input, Filter, strides=[1, 1, 1, 1], padding='VALID')
with tf.Session() as sess:
# 初始化变量
op_init = tf.global_variables_initializer()
sess.run(op_init)
print(sess.run(conv1))
运行结果:
case2:输入是1张 3*3 大小的图片,图像通道数是5,卷积核是 2*2大小,数量是1 ,步长是[1,1,1,1],padding 设置为“VALID”,最后得到一个 2*2的feature map。1张图最后输出就是一个 shape为[1,2,2,1] 的tensor。
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import tensorflow as tf
Input = tf.Variable(tf.random_normal([1, 3, 3, 5]))
Filter = tf.Variable(tf.random_normal([2, 2, 5, 1]))
conv2 = tf.nn.conv2d(Input, Filter, strides=[1, 1, 1, 1], padding='VALID')
with tf.Session() as sess:
# 初始化变量
op_init = tf.global_variables_initializer()
sess.run(op_init)
print(sess.run(conv2))
运行结果:
case3:将case2例子的padding值改为“SAME”,即考虑边界。(输入是1张 3*3 大小的图片,图像通道数是5,卷积核是 2*2大小,数量是1 ,步长是[1,1,1,1],padding 设置为“SAME”,最后得到一个 3*3的feature map。1张图最后输出就是一个 shape为[1,3,3,1] 的tensor。)
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import tensorflow as tf
Input = tf.Variable(tf.random_normal([1, 3, 3, 5]))
Filter = tf.Variable(tf.random_normal([2, 2, 5, 1]))
conv3= tf.nn.conv2d(Input, Filter, strides=[1, 1, 1, 1], padding='SAME')
with tf.Session() as sess:
# 初始化变量
op_init = tf.global_variables_initializer()
sess.run(op_init)
print(sess.run(conv3))
运行结果为:
case4:输入是2张 3*3 大小的图片,图像通道数是5,卷积核是 2*2大小,数量是1,步长是[1,1,1,1],padding 设置为“SAME”,最后得到2个 3*3的feature map。1张图最后输出就是一个 shape为[2,3,3,1] 的tensor。
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import tensorflow as tf
Input = tf.Variable(tf.random_normal([2, 3, 3, 5]))
Filter = tf.Variable(tf.random_normal([2, 2, 5, 1]))
conv4 = tf.nn.conv2d(Input, Filter, strides=[1, 1, 1, 1], padding='SAME')
with tf.Session() as sess:
# 初始化变量
op_init = tf.global_variables_initializer()
sess.run(op_init)
print(sess.run(conv4))
运行结果:
case4:输入是4张 3*3 大小的图片,图像通道数是5,卷积核是 2*2大小,数量是4,步长是[1,1,1,1],padding 设置为“SAME”,最后每张图片得到4个 3*3的feature map。1张图最后输出就是一个 shape为[4,3,3,4] 的tensor。
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import tensorflow as tf
Input = tf.Variable(tf.random_normal([4, 3, 3, 5]))
Filter = tf.Variable(tf.random_normal([2, 2, 5, 4]))
conv5 = tf.nn.conv2d(Input, Filter, strides=[1, 1, 1, 1], padding='SAME')
with tf.Session() as sess:
# 初始化变量
op_init = tf.global_variables_initializer()
sess.run(op_init)
print(sess.run(conv5))
运行结果为:
[[[[ 4.1313605 -4.5319715 4.3040133 -0.13911057]
[-10.3389225 -2.2463617 -3.033617 2.0877244 ]
[ -2.3154557 5.4515543 -4.647153 -3.0869713 ]]
[[ 3.0420232 -0.87613493 4.6381464 0.90558195]
[ 3.7932742 -2.4520369 -0.7195463 4.9921722 ]
[ 1.5384624 0.11533099 -2.408429 5.3733883 ]]
[[ 0.45401835 -2.7483764 0.07065094 0.443908 ]
[ -6.8117185 2.2884533 -5.3677235 1.5834118 ]
[ -1.2048031 1.848783 -1.6733127 -1.7782905 ]]]
[[[ 0.5970616 0.77205956 -3.116805 -2.0577238 ]
[ -1.9527029 0.34587446 -5.7365794 -7.39325 ]
[ 2.9361765 -3.504585 4.057106 1.7304868 ]]
[[ 7.262891 -2.492215 4.7126684 1.7249267 ]
[ -7.4239445 2.9972248 4.2400084 0.9729483 ]
[ 1.9529393 3.4738922 0.24985534 -2.922786 ]]
[[ -0.3828507 0.49657637 0.47466695 0.8126482 ]
[ -0.3671472 -0.67494106 0.46129555 -0.9638461 ]
[ 1.6664319 0.885748 0.31974202 -1.9972321 ]]]
[[[ -1.7906806 -1.0376648 1.7166338 -1.0403266 ]
[ 2.5069232 4.0962963 -1.6884253 -0.23492575]
[ -0.3881849 -2.4799151 3.8491216 -2.5564618 ]]
[[ -3.5605621 1.6819414 -4.8645535 -1.9251393 ]
[ -1.8077193 -5.6664057 4.750779 1.2238139 ]
[ 2.346087 -6.2254734 5.1787786 4.3055882 ]]
[[ 0.21012396 -2.145918 1.358845 -0.25860584]
[ -2.3559752 4.263964 -0.51586103 -6.9163604 ]
[ 5.504827 4.0707703 0.11547554 -7.818963 ]]]
[[[ 3.716207 0.63655686 -1.2434999 -4.472955 ]
[ 2.067041 2.0510454 4.2357826 -4.159449 ]
[ 0.63638914 1.9863756 0.42491168 0.13413942]]
[[ 2.5624473 5.041215 3.689196 -1.1119944 ]
[ 4.470556 6.4554853 -7.154124 3.396954 ]
[ -4.9033055 -4.636659 3.7072423 -0.6310719 ]]
[[ -0.92771626 5.868825 -3.1153893 -3.9012384 ]
[ 3.4494157 -2.7036839 5.6135087 3.6358144 ]
[ 1.0283424 -4.246024 0.7325883 0.4899721 ]]]]
最后
以上就是执着钢铁侠为你收集整理的【TensorFlow】TensorFlow函数精讲之tf.nn.conv2d()的全部内容,希望文章能够帮你解决【TensorFlow】TensorFlow函数精讲之tf.nn.conv2d()所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复