一种先进的无监督方法,用于去噪、降维、异常检测等
到目前为止,我分享的所有关于TensorFlow和神经网络的教程都是关于监督学习。而这一篇将讲述无监督学习技术Autoencoder。简单来说,Autoencoder通过压缩输入数据、编码和重构数据的方式来减少数据中的噪音。这样,Autoencoder可以减少数据的维度或噪音,并专注于输入数据的真正要点。
从这里对Autoencoder的介绍中可以看到,这里涉及到了不止一个过程。
- 首先,需要一个模型来压缩输入数据,也就是编码器模型。
- 然后需要另一个模型来重构压缩后的数据,使其尽可能接近输入数据,也就是解码器模型。
通过这个过程,可以去除噪音,降低数据的维度,并清晰输入数据。
在本教程中,我将详细解释Autoencoder是如何工作的,并提供一个实际示例。
对于这个示例,我选择使用一个名为deep_weeds的公共数据集(Apache License 2.0)。
import tensorflow as tf
import tensorflow_datasets as tfds
ds = tfds.load('deep_weeds', split='train', shuffle_files=True)
数据准备
我们需要为这个无监督的异常检测示例准备一个数据集。我们将选择一个类作为主要类,并将其视为有效类。然后,我会将另一个类别的一些数据作为异常。然后,我们将开发模型来查找这几个异常数据。
我选择类别5作为有效类别,类别1作为异常。在下面的代码块中,我首先获取类别5和类别1的所有数据,并创建图像和相应标签的列表。
import numpy as np
images_main = []
images_anomaly = []
labels_main = []
labels_anomaly = []
ds = ds.prefetch(tf.data.AUTOTUNE)
for example in ds...