Tensorflow 图像的深度学习异常检测

Tensorflow 图像的深度学习异常检测,tensorflow,scikit-learn,keras,autoencoder,anomaly-detection,Tensorflow,Scikit Learn,Keras,Autoencoder,Anomaly Detection,我对深度学习的世界还比较陌生。我想创建一个用于图像异常检测的深度学习模型(最好使用Tensorflow/Keras)。我所说的异常检测实际上是一种OneClassSVM 我已经尝试了sklearn的OneClassSVM,它使用图像中的HOG特征。我想知道是否有一些例子可以说明我如何在深度学习中做到这一点。我查了一下,但找不到一个处理这种情况的代码块。在Keras中实现这一点的方法是使用包装器模块(他们包装sci kit learn的回归器接口)。在该模块的代码中也可以找到有用的信息。基本上,您

我对深度学习的世界还比较陌生。我想创建一个用于图像异常检测的深度学习模型(最好使用Tensorflow/Keras)。我所说的异常检测实际上是一种
OneClassSVM


我已经尝试了sklearn的OneClassSVM,它使用图像中的HOG特征。我想知道是否有一些例子可以说明我如何在深度学习中做到这一点。我查了一下,但找不到一个处理这种情况的代码块。

在Keras中实现这一点的方法是使用包装器模块(他们包装sci kit learn的回归器接口)。在该模块的代码中也可以找到有用的信息。基本上,您首先必须定义您的网络模型,例如:

def simple_model():
#输入层
数据输入(形状=(13,))
#第一层,完全连接,ReLU激活
第1层=密集(13,activation='relu',kernel\u initializer='normal')(数据中)
#第二层……等等
第2层=密集(第6层,激活='relu',内核初始化器='normal')(第1层)
#输出,单节点,无需激活
数据输出=密集(1,内核初始化器=正常)(第2层)
#保存和编译模型
模型=模型(输入=数据输入,输出=数据输出)
#您可以选择任何loss或optimizer函数,请小心选择哪一个
compile(loss='mean\u squared\u error',optimizer='adam')
回归模型
然后,将其传递给
KerasRegressor
builder,并
fit
使用数据:

来自keras.wrappers.scikit\u了解导入KerasRegressor
#选择您的年代和批次
回归器=Keras回归器(构建=simple\u模型,nb\u历元=100,批量=64)
#符合您的数据
拟合(数据、标签、历元=100)
您现在可以对其进行预测或获得分数:

p=regressor.predict(数据检验)#获得预测值
分数=回归系数。分数(数据测试、标签测试)#获得测试分数

在您的情况下,由于需要从正常图像中检测异常图像,您可以采取的一种方法是通过传递标记为
1
的异常图像和标记为
0
的正常图像来训练回归器

这将使您的模型在输入为异常图像时返回更接近1的值,从而使您能够设置所需结果的阈值。您可以将此输出视为训练为1(完美匹配)的“异常模型”的R^2系数

此外,正如您所提到的,自动编码器是进行异常检测的另一种方法。为此,我建议您看一看Keras的博客文章,其中详细解释了Keras库的实现


值得注意的是,单类分类是表示回归的另一种方式

分类尝试在
N
可能的类别中找到概率分布,您通常选择最可能的类别作为输出(这就是为什么大多数分类网络在其输出标签上使用
Sigmoid
激活,因为它具有范围[0,1])。它的输出是离散的/分类的


类似地,回归试图通过最小化误差或其他度量(如著名的R^2度量或R^2度量)来找到表示数据的最佳模型。它的输出是实数/连续的(这也是大多数回归网络不在其输出上使用激活的原因)。我希望这会有所帮助,祝您编码顺利。

使用HOG是一种功能工程方法。通常在深度学习中,你不会处理这些问题,而是让你的模型为你解决,这就是为什么你很可能找不到非常相似的例子。因此,如果你想尝试深入学习,你应该尝试一种标准的卷积网络,将图像作为输入,而不是预提取的特征。谢谢@maz。是的,我同意。你能给我举一个在tensorflow中进行单类分类的好例子吗?我花了很多时间研究这一点,但仍然空手而归。你可以使用一个多类分类的例子,有两个改变:第一,改变你的最后一个激活为乙状结肠或tanh(不要对单个类使用softmax,它不会起作用)。其次,更改最后一个致密层,使其具有单个输出(在keras中,这是通过致密层(1)完成的)。我不知道单个类的例子,但是有了这两个变化,您可以尝试来自keras的mnist cnn例子。请注意keras 2和keras 1之间的差异(主要是名称更改)。谢谢@maz让我试试。这个包装模型可以保存为.pb图形吗?我希望在c#中实现这一点,但无法实现,因为c#中的port中没有sklearn。我不确定Jodh。但是,也许可以研究这个模型保存的格式,并以某种方式将其转换为您提到的.pb格式