TensorFlow卷积、池化操作API 及卷积核个数和不同池化的比较

卷积操作API

  1. 普通卷积
tf.nn.convlution(input, filter, padding, strides=None, dilation=None, name=None, data_format=None)
  1. 二维卷积
tf.nn.conv2d(input, filter, strides, padding, use_cudnn_on_gpu=None, name=None)
    # input:[batch, in_height, in_width, in_channels]
    # filter:[filter_height,filter_wideth,in_channels,out_channels]
    # strides:[1,stride,stride,1]
    # padding: 'SAME' or 'VALID' 'VALID'表示0填充。注意:'SAME'并不是表示输入输出尺寸大小一样,只是考虑边界,如果不够用0填充
  1. 单独对每个通道做卷积
tf.nn.depthwise_conv2d(input,filter,strides,padding,name=None)
  1. 单独对每个通道做完卷积后再用pointwise filter组合起来
tf.nn.separable_conv2d(input,depthwise_filter,pointwise_filter, strides,padding,name=None)
  1. 扩张卷积
tf.nn.atrous_conv2d(value, filters, rate, padding, name=None)
  1. 逆卷积
tf.nn.conv2d_transpose(value, filter, output_shape, strides, padding=SAME, data_format=NHWC, name=None)
  1. 一维卷积
tf.nn.conv1d(value, filters, stride, padding, use_cudnn_on_gpu=None, name=None)
  1. 三维卷积
tf.nn.conv3d(input, filter, strides, padding, name=None)

严格的来说,叫做cross-correlation运算,(卷积的话核要旋转180°)

conv2d

输入数据体尺寸: W 1 × H 1 × D 1 W_1\times H_1\times D_1 W1×H1×D1
滤波器尺寸: F × F × D 1 × D 2 F\times F\times D_1\times D_2 F×F×D1×D2 D 2 D_2 D2个滤波器
步长为 S S S,填充为 P P P
则输出的的数据体尺寸: W 2 × H 2 × D 2 W_2\times H_2\times D_2 W2×H2×D2
其中:
W 2 = ( W 1 − F + 2 P ) / S + 1 W_2=(W_1-F+2P)/S+1 W2=(W1F+2P)/S+1
H 2 = ( H 1 − F + 2 P ) / S + 1 H_2=(H_1-F+2P)/S+1 H2=(H1F+2P)/S+1
如果为零填充,即padding='VALID',则输出尺寸比输入尺寸小了 F − 1 F-1 F1

池化操作API

池化层也叫汇聚层,能够有效地减少网络中的参数,也能有效地控制过拟合。

  1. 平均池化
tf.nn.avg_pool(value, ksize, strides, padding, data_format=NHWC, name=None)
  1. 最大池化
tf.nn.max_pool(value, ksize, strides, padding, data_format=NHWC, name=None)
	# valua: [batch, in_height, in_width, in_channels] feature map
	# ksize: 池化窗口的大小 [1,height, width, 1]
	# strides:[1,stride,stride,1]
	# padding: 'SAME' or 'VALID' 一般都是'VALID'
	# data_format: 'NHWC' or 'NCHW'(caffe), 必须和conv2d中一致
  1. 找每个最大值处的索引
tf.nn.max_pool_with_argmax(input, ksize, strides, padding, Targmax=None, name=None)
  1. 等等

计算

输入数据体尺寸: W 1 × H 1 × D 1 W_1\times H_1\times D_1 W1×H1×D1
滤波器尺寸: F × F × D 1 × D 2 F\times F\times D_1\times D_2 F×F×D1×D2 D 2 D_2 D2个滤波器
步长为 S S S,很少有填充
则输出的的数据体尺寸: W 2 × H 2 × D 2 W_2\times H_2\times D_2 W2×H2×D2
其中:
W 2 = ( W 1 − F ) / S + 1 W_2=(W_1-F)/S+1 W2=(W1F)/S+1
H 2 = ( H 1 − F ) / S + 1 H_2=(H_1-F)/S+1 H2=(H1F)/S+1
D 2 = D 1 D_2=D_1 D2=D1
没有引入参数
池化层通常只有两种形式:

  • 重叠池化(overlapping pooling): F=3, S=2
  • 最常用的:F=2,S=2

再大的话,就会对网络有破坏性
实践证明,一般最大池化比平均池化要好

卷积核个数

下面在一个只包含一个卷积层和一个全连接层的网络上,改变卷积核的个数,看看网络性能的变化:
在这里插入图片描述
训练集上的损失:
在这里插入图片描述
验证集上的损失:
在这里插入图片描述
在这里插入图片描述

池化

conv+relu+(maxpool or avgpool)+linear_fc
在这里插入图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值