在神经网络中,降维和升维是处理数据时常用的技术。降维可以减少数据的维度,从而减少计算量和过拟合的风险;升维则是增加数据的维度,以便神经网络能够更好地捕捉数据中的复杂特征。以下是一些在TensorFlow中常用的降维和升维方法:### 降维方法1. **主成
摘要:大名鼎鼎的UNet和我们经常看到的编解码器模型,他们的模型都是先将数据下采样,也称为特征提取,然后再将下采样后的特征恢复回原来的维度。这个特征提取的过程我们称为“下采样”,这个恢复的过程我们称为“上采样”,本文就专注于神经网络中的下采样和上
大名鼎鼎的UNet和我们经常看到的编解码器模型,他们的模型都是先将数据下采样,也称为特征提取,然后再将下采样后的特征恢复回原来的维度。这个特征提取的过程我们称为“下采样”,这个恢复的过程我们称为“上采样”,本文就专注于神经网络中的下采样和上采样来进行一次总结。写的不好勿怪哈。
神经网络中的降维方法
池化层
池化层(平均池化层、最大池化层),卷积
平均池化层
pytorch
nn.AvgPool1d
nn.AvgPool2d
tensorflow
tf.layers.AveragePooling1D
tf.layers.AveragePooling2D
最大池化层
pytorch
nn.MaxPool1d
nn.MaxPool2d
tensorflow
tf.layers.MaxPooling1D
tf.layers.MaxPooling2D
还有另外一些pool层:nn.LPPool、nn.AdaptiveMaxPool、nn.AdaptiveAvgPool、nn.FractionalMaxPool2d
卷积
普通卷积
pytorch
nn.Conv1d
nn.Conv2d
tensorflow
tf.layers.Conv1D
tf.layers.Conv2D
还有一些独特的卷积,感兴趣的可以自己去了解
扩张卷积 (又称空洞卷积):tf.nn.atrous_conv2d
depthwise卷积:tf.nn.depthwise_conv2d
分离卷积:tf.nn.separable_conv2d
量化卷积:tf.nn.quantized_conv2d
...
升维方法
插值方法
插值方法有很多种有:阶梯插值、线性插值、三次样条插值等等
numpy的实现方法我在另外一篇文章中已经介绍过了,为了避免重复,想要了解的同学请移步【插值方法及python实现】
pytorch实现方法
torch.nn.Upsample(size=None, scale_factor=None, mode='nearest', align_corners=None)
对给定多通道的1维(时间)、2维(空间)、3维(体积)数据进行上采样。
1维(向量数据),输入数据Tensor格式为3维:(batch_size, channels, width)
2维(图像数据),输入数据Tensor格式为4维:(batch_size, channels, height, width)
3维(点云数据),输入数据Tensor格式为5维:(batch_size, channels, depth, height, width)
参数
size:输入数据(一维 or 二维 or 三维)
scale_factor:缩放大小
mode:上采样算法(nearest(最近邻插值)、linear(线性插值)、bilinear(双线性插值)、bicubic(双三次插值)、trilinear(三次线性插值))
align_corners:如果为True,则输入和输出张量的角像素对齐,从而保留这些像素处的值。 仅在模式为“线性”,“双线性”或“三线性”时有效。 默认值:False
返回:
Input:$(N, C, W_{in}), (N, C, H_{in}, W_{in}) 或(N, C, D_{in}, H_{in}, W_{in})$
Output: $(N, C, W_{out}), (N, C, H_{out}, W_{out}) 或(N, C, D_{out}, H_{out}, W_{out})$
$D_{out}=[D_{in}× \text{scale_factor}]$
$H_{out} = [H_{in} \times \text{scale_factor}]$
$W_{out} = [W_{in} \times \text{scale_factor}]$
unpooling
Unpooling是在CNN中常用的来表示max pooling的逆操作。
