卷积函数
卷积函数定义在Tensorflow/python/ops下的nn_impl.py和nn_ops.py文件中:
- tf.nn.conv2d(input, filter, strides, padding, use_cudnn_on_gpu=None, name=None)
- tf.nn.depthwise_conv2d(input, filter, strides, padding, name=None)
- tf.nn.separable_conv2d(input, depthwise_filter, pointwise_filter, strides, padding, name=None)
二维卷积函数:tf.nn.conv2d(input, filter, strides, padding, use_cudnn_on_gpu=None, name=None)
- input:需要做卷积的输入数据。注意:这是一个4维的张量([batch, in_height, in_wight, in_channels]),具体含义是指 “训练时,一个batch的图片数量,图片高度,图片宽度,图像通道数(彩色图像为3通道,灰度图像为1通道)”。注意 input 是一个四维的 Tensor,要求为float32 或者是 float64。
- filter:卷积核。[filter_height, filter_wight, in_channels, out_channels],具体含义是指 “过滤器的高度,过滤器的宽度,图像通道数,过滤器的个数”。
- strides:步长,是一个一维向量[1, x, y, 1],第一数和第四个数默认为1,表示batch = 1指在样本上的步长为1,depth = 1 指在通道上的步长为1,即 strides[0] = strides[3] = 1。x表示往右移动的步长,y表示向下移动的步长。
- padding:取值为“SAME”或者“VALID”, 填充方式。‘VALID’ 表示边缘不填充,'SAME’表示边缘填充 。
- use_cudnn_on_gpu:bool类型,是否使用cudnn加速
- name:该操作的名称
代码示例
import tensorflow as tf
import numpy as np
# 10 9 9 4 表示一个batch训练10个样本数 图像为9*9*4
# 3 3 4 2 表示过滤器3*3*4 2个过滤器
input_data = tf.Variable(np.random.rand(10, 9, 9, 4), dtype=np.float32)
filter_data = tf.Variable(np.random.rand(3, 3, 4, 2), dtype=np.float32)
# strides[0] = 1 表示batch=1在样本上的步长为1
# strides[1] = 1 表示向右移动的步长为1
# strides[2] = 1 表示向下移动的步长为1
# strides[3] = 1 表示在通道上的步长为1
# padding='SAME' 边缘填充 填充后卷积结果的图像大小和原图像大小一致
y = tf.nn.conv2d(input_data, filter_data, strides=[1, 1, 1, 1], padding='SAME')
print(input_data)
print(y)
# 输出结果
<tf.Variable 'Variable:0' shape=(10, 9, 9, 4) dtype=float32_ref>
Tensor("Conv2D:0", shape=(10, 9, 9, 2), dtype=float32)
池化函数
池化函数定义在tensorflow/python/ops下的nn.py和gen_nn_ops.py文件中
- 最大池化:tf.nn.max_pool(value, ksize, strides, padding, name=None)
- 平均池化:tf.nn.avg_pool(value, ksize, strides, padding, name=None)
- value:需要池化的输入。一般池化层接在卷积层后面,所以输入通常是conv2d所输出的feature map,依然是4维的张量([[batch, in_height, in_wight, in_channels]]),含义在上面已经解释过。
- ksize:池化窗口的大小,由于一般不在batch和channel上做池化,所以ksize一般是[1, height, wight, 1]
- strides:图像每一维的步长,是一个一维向量,长度为4。[1, x, y, 1]:第一数和第四个数默认为1,表示batch = 1指在样本上的步长为1,depth = 1 指在通道上的步长为1,即 strides[0] = strides[3] = 1。x表示往右移动的步长,y表示向下移动的步长。
- padding:和卷积函数中的padding含义一样。填充方式。
- name:该操作的名称。
- 返回值:返回一个tensor。
参考视频:深度学习应用开发TensorFlow实践