TensorFlow2.0学习,7---卷积神经网络 - 吱吱了了

TensorFlow2.0学习(7)---卷积神经网络

来自书籍:TensorFlow深度学习

一、卷积神经网络

1、卷积层

  • 卷积核:kernel
  • 步长:stride
  • 填充:padding
    • padding = same:如步长=2卷积核扫描结束后还剩 1 个元素,不够卷积核扫描了,这个时候就在后面补 1 个零,补完后满足卷积核的扫描,这种方式就是same。
    • padding = valid:如果说把刚才不足以扫描的元素位置抛弃掉,就是valid方式。
  • 代码实现:

(1)自定义卷积核权值

x = tf.random.normal([2,5,5,3]) # 模拟输入,3通道,高宽为5
# 需要根据[k,k,cin,cout]格式创建W张量,4 个3x3大小卷积核
w = tf.random.normal([3,3,3,4])
# 步长为1, padding为0, 格式padding=[[0,0],[上,下],[左,右],[0,0]]
out = tf.nn.conv2d(x,w,strides=1,padding=[[0,0],[1,1],[1,1],[0,0]])

##设置 padding = ‘same’,strides=1可以直接得到输入与输出同大小的卷积层
#输入x大小 [2,5,5,3] , 输出 out 大小[2, 5, 5, 4]
out = tf.nn.conv2d(x,w,strides=1,padding=\'SAME\')


#当strides > 1时,padding = ‘same’,则输出高和宽成1/s倍减少。
#输入x大小 [2,5,5,3] , 输出 out 大小[2, 2, 2, 4],因为(5+1)/3 = 2
out = tf.nn.conv2d(x,w,strides=3,padding=\'SAME\') 

(2)卷积层类

layers.Conv2D :在新建卷积层类时,只需要指定卷积核数量参数filters,卷积核大小kernel_size,步长 strides,填充padding 等即可。

#创建4个3×3大小的卷积核的卷积层,步长为1,padding=“same”:
layer = layers.Conv2D(4,kernel_size=3,strides=1,padding=\'SAME\') 

#创建4 个3 × 4 大小的卷积核,竖直方向移 动步长