# tf.nn.max_pool(input , ksize, strides, padding, name=None)
函数的作用是找到按照 ksize进行移动找到input中的数据最大值 然后进行输出
# tf.nn.max_pool()包含四个参数信息
第一个参数:表示input 标识的是输入的真实数据 其形状是 [batch_size, in_height, in_width, in_channels]
第二个参数: 表示的是卷积核大小 只能是具体的list数据不能是list的变量
第三个参数是: 表示卷积的步长 也只能是具体的list数据 不能是list的变量
# 第四个参数:网上有很多的例子将padding中SAME 和 VALID,但是都是模糊不清的 我通过一个例子解释一下
下面是个直观图
假设输入图像的高和宽是: 5 * 5 过滤器大小是 3 * 3 步长 3 * 3
输出图像的特征
1 | 2 | 3 | 4 | 5 |
---|---|---|---|---|
6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 |
100 | 100 | 100 | 100 | 100 |
100 | 100 | 100 | 100 | 100 |
过滤器 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
import numpy as np
# 定义一个tensorflow 变量
input = tf.Variable(tf.random_normal([10, 5, 5, 3]))
tf_pooling_result = tf.nn.max_pool(input, [1, 3, 3, 1], [1,3,3,1],padding = 'SAME')
print("*************tf_pooling_result**************", tf_pooling_result)