TensorFlow池化操作

卷积操作之后往往执行池化操作,进一步压缩数据

池化

池化函数将平面内某一位置及其相邻位置的特征值进行统计汇总,并将汇总后的结果作为这一位置在该平面内的值。常见的池化操作有最大池化、平均池化。

TensorFlow中池化函数

tf.nn.max_pool
最大池化

tf.nn.max_pool(
    input, ksize, strides, padding, data_format=None, name=None
)
参数讲解
input秩N + 2张量,形状的[batch_size] + input_spatial_shape + [num_channels]如果data_format不与“NC”(缺省),或启动[batch_size, num_channels] + input_spatial_shape如果与“NC” DATA_FORMAT启动。池发生过仅在空间维度。
ksizeint或列表ints ,其具有长度1 , N或N+2 。窗口用于输入张量的每个维度的尺寸。
stridesint或列表ints ,其具有长度1 , N或N+2 。用于将输入张量的每个维度的滑动窗口的步幅。
padding一个字符串,无论是’VALID’或’SAME’ 。填充算法。见的“收益”部分tf.nn.convolution了解详情。
data_format指定通道尺寸。对于N = 1它可以是 “NWC”(默认)或 “NCW”,对于N = 2它可以是 “NHWC”(默认)或 “NCHW” 和对于N = 3任一 “NDHWC”(默认值)或“NCDHW”。
name一种操作(可选)的名称。

操作实例

import numpy as np
import tensorflow as tf

x_in = np.array([[
  [[2], [1], [2], [0], [1]],
  [[1], [3], [2], [2], [3]],
  [[1], [1], [3], [3], [0]],
  [[2], [2], [0], [1], [1]],
  [[0], [0], [3], [1], [2]], ]])
kernel_in = np.array([
 [ [[2, 0.1]], [[3, 0.2]] ],
 [ [[0, 0.3]],[[1, 0.4]] ], ])
x = tf.constant(x_in, dtype=tf.float32)
kernel = tf.constant(kernel_in, dtype=tf.float32)
conv = tf.nn.conv2d(x, kernel, strides=[1, 1, 1, 1], padding='VALID')

#max_pool()函数实现了最大池化层的前向传播过程
#参数value为输入数据,strides为提供了步长信息,padding提供了是否使用全0填充。
pool = tf.nn.max_pool(conv, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding="SAME")

init_op=tf.global_variables_initializer()
with tf.Session() as sess:
    init_op.run()
#     print(conv)
#     print(sess.run(conv))
    print(sess.run(pool))

#结果输出 
'''
[[[[15.   2.2]
   [13.   2.7]]

  [[11.   1.7]
   [16.   1.5]]]]
''' 
其他池化函数
tf.nn.max_pool1d(
    input, ksize, strides, padding, data_format='NWC', name=None
)

tf.nn.max_pool2d(
    input, ksize, strides, padding, data_format='NHWC', name=None
)

tf.nn.max_pool3d(
    input, ksize, strides, padding, data_format='NDHWC', name=None
)
 
tf.nn.max_pool_with_argmax(
    input, ksize, strides, padding, data_format='NHWC',
    output_dtype=tf.dtypes.int64, include_batch_in_index=False, name=None
)
 
tf.nn.avg_pool(
    input, ksize, strides, padding, data_format=None, name=None
)
 
tf.nn.avg_pool1d(
    input, ksize, strides, padding, data_format='NWC', name=None
)
 
tf.nn.avg_pool2d(
    input, ksize, strides, padding, data_format='NHWC', name=None
)
 
tf.nn.avg_pool3d(
    input, ksize, strides, padding, data_format='NDHWC', name=None
)  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值