Обнаружение аномалий в TensorFlow и Keras с использованием метода автоэнкодера

Обнаружение аномалий в TensorFlow и Keras с автоэнкодером

Фото Leiada Krozjhen на Unsplash

Современный метод без учителя для удаления шума, снижения размерности, обнаружения аномалий и многое другое

Все учебники о TensorFlow и нейронных сетях, которые я ранее публиковал, были о супервизорном обучении. В этом учебнике речь пойдет об автоэнкодере, который является методом без учителя. Если говорить простыми словами, автоэнкодеры уменьшают шумы в данных, сжимая входные данные и кодируя их, а затем восстанавливают данные. Таким образом, автоэнкодеры могут снизить размерность или шум данных и сосредоточиться на реальной сущности входных данных.

Как вы можете видеть из введения в автоэнкодеры, здесь требуется более одного процесса.

  1. Во-первых, модель для сжатия входных данных, которая является моделью кодировщика.
  2. Затем другая модель для восстановления сжатых данных, которая должна быть максимально близкой к входным данным, – модель декодировщика.

В этом процессе можно удалить шум, снизить размерность и очистить входные данные.

В этом учебнике я подробно объясню, как работает автоэнкодер на примере.

Для этого примера я выбрал общедоступный набор данных (лицензия Apache 2.0) под названием deep_weeds.

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...