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

本文详细介绍了TensorFlow中的卷积操作API,包括普通卷积、二维卷积、一维卷积、三维卷积、逆卷积等,并对卷积层的输入输出尺寸计算进行了说明。同时,文章还讲解了池化操作API,如平均池化和最大池化,以及它们在神经网络中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

卷积操作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

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

池化操作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. 等等

计算

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

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

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

卷积核个数

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

池化

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值