tf.nn.conv2d (input, filter, strides, padding, use_cudnn_on_gpu=None, data_format=None, name=None)
# 第一个参数input:表示输入数据 其形状是 [batch_size, in_height, in_width, in_channels]
# 第二个参数filter:表示卷积核大小 其形状是[filter_height, filter_width, in_channels, out_channels] 注意一下,第一个参数和第二个参数in_channels必须是一样的 而且out_channels表示输出的频道数 我们做卷积提取图像特征的时候 一般会把out_channels设置的越来越大 应该是找的越来越具体
# 第三个参数strides:表示卷积核在输入数据上每次移动多少步
# 第四个参数:网上有很多的例子将padding中SAME 和 VALID,但是都是模糊不清的 我通过一个例子解释一下
下面是个直观图
假设输入图像的高和宽是: 5 * 5 过滤器大小是 3 * 3 步长 3 * 3
输出图像的特征
如果使用VALID的话 只能做一次卷积操作 下一次的时候会超过input的宽度 所以输出的是 1 * 1
SAME的话 就是为了解决剩下的两个格子不能使用的问题 会把input自动扩展 使其能够进行下一步扩展 2 * 2
OK代码是不会说谎的 用代码来证明我们的猜想
# -*- coding: utf-8 -*-
# @Time : 2019/3/13 22:34
# @Author : YYLin
# @Email : 854280599@qq.com
# @File : Tensorflow.py
import tensorflow as tf
# 定义一个tensorflow 变量
input = tf.Variable(tf.random_normal([10, 5, 5, 3]))
filter = tf.Variable(tf.random_normal([3, 3, 3, 5]))
# padding的取值是 VALID SAME
out_conv2d_VALID = tf.nn.conv2d(input, filter, strides=[1, 3, 3, 1], padding='VALID')
out_conv2d_SAME = tf.nn.conv2d(input, filter, strides=[1, 3, 3, 1], padding='SAME')
print("卷积神经网络之中使用VALID时数据的输出",out_conv2d_VALID)
print("卷积神经网络之中使用SAME时数据的输出",out_conv2d_SAME)
# 程序输出的结果是: 根据结果证明使用same的时候 语言有点匮乏 有没有人能总结一下
# 卷积神经网络之中使用VALID时数据的输出 Tensor("Conv2D:0", shape=(10, 1, 1, 5), dtype=float32)
# 卷积神经网络之中使用SAME时数据的输出 Tensor("Conv2D_1:0", shape=(10, 2, 2, 5), dtype=float32)