使用GAN进行异常检测——可以进行网络流量的自学习哇,哥哥,人家是半监督,无监督的话,还是要VAE,SAE。
实验了效果,下面的还是图像的异常检测居多。
https://github.com/LeeDoYup/AnoGAN
https://github.com/tkwoo/anogan-keras
看了下,本质上是半监督学习,一开始是有分类模型的。代码如下,生产模型和判别模型:
### generator model define def generator_model(): inputs = Input((10,)) fc1 = Dense(input_dim=10, units=128*7*7)(inputs) fc1 = BatchNormalization()(fc1) fc1 = LeakyReLU(0.2)(fc1) fc2 = Reshape((7, 7, 128), input_shape=(128*7*7,))(fc1) up1 = Conv2DTranspose(64, (2, 2), strides=(2, 2), padding='same')(fc2) conv1 = Conv2D(64, (3, 3), padding='same')(up1) conv1 = BatchNormalization()(conv1) conv1 = Activation('relu')(conv1) up2 = Conv2DTranspose(64, (2, 2), strides=(2, 2), padding='same')(conv1) conv2 = Conv2D(1, (5, 5), padding='same')(up2) outputs = Activation('tanh')(conv2) model = Model(inputs=[inputs], outputs=[outputs]) return model ### discriminator model define def discriminator_model(): inputs = Input((28, 28, 1)) conv1 = Conv2D(64, (5, 5), padding='same')(inputs) conv1 = LeakyReLU(0.2)(conv1) pool1 = MaxPooling2D(pool_size=(2, 2))(conv1) conv2 = Conv2D(128, (5, 5), padding='same')(pool1) conv2 = LeakyReLU(0.2)(conv2) pool2 = MaxPooling2D(pool_size=(2, 2))(conv2) fc1 = Flatten()(pool2) fc1 = Dense(1)(fc1) outputs = Activation('sigmoid')(fc1) model = Model(inputs=[inputs], outputs=[outputs]) return model
对于无监督GAN就搞不定了!
https://zhuanlan.zhihu.com/p/32505627
https://arxiv.org/pdf/1805.06725.pdf
https://www.ctolib.com/tkwoo-anogan-keras.html
https://github.com/trigrass2/wgan-gp-anomaly/tree/master/models