One-Class Convolutional Neural Network -CoRR abs(2019)

本文提出基于卷积神经网络(CNN)的单类分类方法,用潜在空间零中心高斯噪声作伪负类,以交叉熵损失训练网络。任何预训练CNN都可作基础网络,在UMDAA - 02 Face等数据集评估,涉及用户认证等应用,实验显示该方法优于现有方法,代码可在github获取。

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

我们提出了一种基于卷积神经网络(CNN)的单类分类方法。该思想是使用潜在空间中的零中心高斯噪声作为伪负类,并使用交叉熵损失训练网络,以学习一个好的表示和给定类的决策边界。该方法的一个重要特点是,任何预先训练好的CNN都可以作为单类分类的基础网络。本文提出的一类CNN是基于UMDAA-02 Face、abnormity -1001和FounderType200数据集进行评估的。这些数据集涉及到各种单一类的应用问题,如用户认证、异常检测和新颖性检测。大量的实验表明,该方法比目前最先进的方法有显著的改进。源代码可在github.com/otkupjnoz/oc-cnn获得。
在这里插入图片描述

5.1 二维卷积层 卷积神经网络convolutional neural network)是含有卷积层(convolutional layer)的神经网络。本章中介绍的卷积神经网络均使用最常见的二维卷积层。它有高和宽两个空间维度,常用来处理图像数据。本节中,我们将介绍简形式的二维卷积层的工作原理。 5.1.1 二维互相关算算 虽然卷积层得名于卷积(convolution)运算,但我们通常在卷积层中使用更加直观的互相关(cross-correlation)运算。在二维卷积层中,一个二维输入数组和一个二维核(kernel)数组通过互相关运算输出一个二维数组。 我们用一个具体例子来解释二维互相关运算的含义。如图5.1所示,输入是一个高和宽均为3的二维数组。我们将该数组的形状记为3×3 或(3,3)。核数组的高和宽分别为2。该数组在卷积计算中又称卷积核或过滤器(filter)。卷积核窗口(又称卷积窗口)的形状取决于卷积核的高和宽,即2×2 。图5.1中的阴影部分为第一个输出元素及其计算所使用的输入和核数组元素:0×0+1×1+3×2+4×3=19 。 图5.1 二维互相关运算 在二维互相关运算中,卷积窗口从输入数组的最左上方开始,按从左往右、从上往下的顺序,依次在输入数组上滑动。当卷积窗口滑动到某一位置时,窗口中的输入子数组与核数组按元素相乘并求和,得到输出数组中相应位置的元素。图5.1中的输出数组高和宽分别为2,其中的4个元素由二维互相关运算得出: 0×0+1×1+3×2+4×3=19,1×0+2×1+4×2+5×3=25,3×0+4×1+6×2+7×3=37,4×0+5×1+7×2+8×3=43. 下面我们将上述过程实现在corr2d函数里。它接受输入数组X与核数组K,并输出数组Y。 import torch from torch import nn ​ print(torch.__version__) 1.5.0 def corr2d(X, K): # 本函数已保存在d2lzh_pytorch包中方便以后使用 h, w = K.shape X, K = X.float(), K.float() Y = torch.zeros((X.shape[0] - h + 1, X.shape[1] - w + 1)) for i in range(Y.shape[0]): for j in range(Y.shape[1]): Y[i, j] = (X[i: i + h, j: j + w] * K).sum() return Y 我们可以构造图5.1中的输入数组X、核数组K来验证二维互相关运算的输出。 X = torch.tensor([[0, 1, 2], [3, 4, 5], [6, 7, 8]]) K = torch.tensor([[0, 1], [2, 3]]) corr2d(X, K) tensor([[19., 25.], [37., 43.]]) 5.1.2 二维卷积层 二维卷积层将输入和卷积核做互相关运算,并加上一个标量偏差来得到输出。卷积层的模型参数包括了卷积核和标量偏差。在训练模型的时候,通常我们先对卷积核随机初始化,然后不断迭代卷积核和偏差。 下面基于corr2d函数来实现一个自定义的二维卷积层。在构造函数__init__里我们声明weight和bias这两个模型参数。前向计算函数forward则是直接调用corr2d函数再加上偏差。 class Conv2D(nn.Module): def __init__(self, kernel_size): super(Conv2D, self).__init__() self.weight = nn.Parameter(torch.randn(kernel_size)) self.bias = nn.Parameter(torch.randn(1)) ​ def forward(self, x): return corr2d(x, self.weight) + self.bias 卷积窗口形状为𝑝×𝑞 的卷积层称为𝑝×𝑞 卷积层。同样,𝑝×𝑞 卷积或𝑝×𝑞 卷积核说明卷积核的高和宽分别为𝑝 和𝑞 。 5.1.3 图像中物体边缘检测 下面我们来看一个卷积层的简应用:检测图像中物体的边缘,即找到像素变化的位置。首先我们构造一张6×8 的图像(即高和宽分别为6像素和8像素的图像)。它中间4列为黑(0),其余为白(1)。 X = torch.ones(6
最新发布
04-02
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值