相关文章推荐

​ 中值池化是参考图像处理中的中值滤波而引申的一种池化方式。在目前CNN架构中极为少见,仅发现一篇论文: 基于卷积神经网络和中值池化的人脸识别 ,不确定是否为水文。

​ 在前向与反向传播过程中,中值池化类似于最大值池化,故不再赘述。

​ 中值池化同样具有学习边缘和纹理结构的特性,同时具有抗噪性。代码描述参考:

# 代码摘自开源项目:pytorch-image-models
class MedianPool2d(nn.Module):
    """ Median pool (usable as median filter when stride=1) module.
    Args:
         kernel_size: size of pooling kernel, int or 2-tuple
         stride: pool stride, int or 2-tuple
         padding: pool padding, int or 4-tuple (l, r, t, b) as in pytorch F.pad
         same: override padding and enforce same padding, boolean
    def __init__(self, kernel_size=3, stride=1, padding=0, same=False):
        super(MedianPool2d, self).__init__()
        self.k = _pair(kernel_size)
        self.stride = _pair(stride)
        self.padding = _quadruple(padding)  # convert to l, r, t, b
        self.same = same
    def _padding(self, x):
        if self.same:
            ih, iw = x.size()[2:]
            if ih % self.stride[0] == 0:
                ph = max(self.k[0] - self.stride[0], 0)
            else:
                ph = max(self.k[0] - (ih % self.stride[0]), 0)
            if iw % self.stride[1] == 0:
                pw = max(self.k[1] - self.stride[1], 0)
            else:
                pw = max(self.k[1] - (iw % self.stride[1]), 0)
            pl = pw // 2
            pr = pw - pl
            pt = ph // 2
            pb = ph - pt
            padding = (pl, pr, pt, pb)
        else:
            padding = self.padding
        return padding
    def forward(self, x):
        x = F.pad(x, self._padding(x), mode='reflect')
        x = x.unfold(2, self.k[0], self.stride[0]).unfold(3, self.k[1], self.stride[1])
        x = x.contiguous().view(x.size()[:4] + (-1,)).median(dim=-1)[0]
        return x

分数阶最大值池化

​ 分数阶最大值池化(Fractional Max Pooling)见诸于 ARXIV 。本文查阅Pytorch代码时发现的,先前未曾了解过,也未曾用过。感兴趣者可以参见原文或者用pytorch代码试玩几把,这里提供一个pytorch试玩deme:

import torch
import torch.nn as nn
inputs = torch.rand(20, 16, 50, 32)
fmp = nn.FractionalMaxPool2d(3, output_ratio=(0.8, 0.8))
output = fmp(inputs)
print(output.size())
# 此时output的尺寸为:20X16X40X25.

​ 组合池化则是同时利用最大值池化与均值池化两种的优势而引申的一种池化策略。常见组合策略有两种:Cat与Add。其代码描述如下:

def add_avgmax_pool2d(x, output_size=1):
    x_avg = F.adaptive_avg_pool2d(x, output_size)
    x_max = F.adaptive_max_pool2d(x, output_size)
    return 0.5 * (x_avg + x_max)
def cat_avgmax_pool2d(x, output_size=1):
    x_avg = F.adaptive_avg_pool2d(x, output_size)
    x_max = F.adaptive_max_pool2d(x, output_size)
    return torch.cat([x_avg, x_max], 1)
中值池化​ 中值池化是参考图像处理中的中值滤波而引申的一种池化方式。在目前CNN架构中极为少见,仅发现一篇论文:基于卷积神经网络和中值池化的人脸识别,不确定是否为水文。​ 在前向与反向传播过程中,中值池化类似于最大值池化,故不再赘述。​ 中值池化同样具有学习边缘和纹理结构的特性,同时具有抗噪性。代码描述参考:# 代码摘自开源项目:pytorch-image-modelsclas...
池化 层:对输入的特征图进行压缩,一方面使特征图变小,简化网络计算复杂度;一方面进行特征压缩,提取主要特征。 池化 操作一般有两种,一种是Avy Pooling,一种是max Pooling,如下: 同样地采用一个2*2的filter,max pooling是在每一个区域中寻找最大值,这里的stride=2,最终在原特征图中提取主要特征得到右图。 (Avy pooling现在不怎么用了(其实就是平...
PyTorch version: 1.4.0 IDE: PyCharm 文章目录0. 写在前面1. 卷积与转置卷积1.1 卷积层1.2 转置卷积层2. 池化 与去 池化 2.1 池化 层2.2 去 池化 层3. 线性连接4. 激活函数4.1 sigmoid4.2 tanh4.3 ReLU4.4 ReLU 的修改版们 0. 写在前面 本文记录一下使用 PyTorch 建立神经网络模型中各种层的定义方法,包括卷积层(卷积、转置卷积)、 池化 层(平均 池化 、最大 池化 、反 池化 )、全连接层、激活函数层。这里主要记录对于二
1.当数据有缺失值的时候, 你认为处理缺失值比较合理的方法(缺失值举例:泰坦尼克号幸存者数据中 有年龄 性别 职业 是否存活 四个特征 但某些样本的职业特征为空)。 (1)均值,极值,众数,中位数填补 (2)回归决策树预测,把label作为特征也加入到特征里来 2.请简述随机梯度下降,批梯度下降的区别和各自的优点 (1)随机就是计算一个样本的loss之后就进行梯度下降 a)优点:迭代速度快,可以跳出局部最小(因为震荡大) b)缺点:收敛速度慢(因为震荡大) (2)批梯度下降就是一批样本计算los
异常检测实际案例:网络安全中的攻击检测,金融交易欺诈检测,疾病侦测,和噪声数据过滤等。时间序列的异常又分为点异常和模式异常。对于一个新观测值进行判断: 离群点检测: 训练数据包含离群点,即远离其它内围点。离群点检测估计器会尝试拟合出训练数据中内围点聚集的区域, 会忽略有偏离的观测值。 新奇点检测: 训练数据未被离群点污染,我们对新观测值是否为离群点感兴趣。在这个语境下,离群点被认为是新奇点。 离群点检测 也被称之为 无监督异常检测; 而 新奇点检测 被称之为 半监督异常检测。 在离群点检
在 MATLAB 中,可以使用 `conv2()` 函数 实现 卷积操作,使用 `imresize()` 函数 实现 池化 操作。 以下是一个示例代码,演示如何使用 `conv2()` 和 `imresize()` 函数 实现 卷积和 池化 操作: ```matlab % 读取图像 img = imread('image.jpg'); % 定义卷积核 kernel = [1 1 1; 1 -8 1; 1 1 1]; % 执行卷积操作 conv_img = conv2(double(img), kernel, 'same'); % 显示卷积结果 figure; subplot(1, 2, 1); imshow(img); title('Original Image'); subplot(1, 2, 2); imshow(conv_img, []); title('Convolved Image'); % 执行 池化 操作 pool_img = imresize(conv_img, 0.5); % 显示 池化 结果 figure; subplot(1, 2, 1); imshow(conv_img, []); title('Convolved Image'); subplot(1, 2, 2); imshow(pool_img, []); title('Pooled Image'); 在这个示例中,我们首先读取了一张图像,然后定义了一个卷积核。接着,使用 `conv2()` 函数执行卷积操作,将卷积结果保存到 `conv_img` 变量中,并使用 `imshow()` 函数显示卷积结果。 接下来,使用 `imresize()` 函数执行 池化 操作,将卷积结果缩小一半,并将结果保存到 `pool_img` 变量中。最后,使用 `imshow()` 函数显示 池化 结果。
 
推荐文章