李宏毅机器学习2022-HW8-Anomaly Detection

news/2024/10/15 23:47:07 标签: 机器学习, 人工智能

文章目录

  • Task
  • Baseline
  • Report
    • Question2
  • Code Link

Task

异常检测Anomaly Detection

在这里插入图片描述

将data经过Encoder,在经过Decoder,根据输入和输出的差距来判断异常图像。training data是100000张人脸照片,testing data有大约10000张跟training data相同分布的人脸照片(label 0),还有10000张不同分布的照片(anomaly, label 1),每张照片都是(64,64,3),.npy file

以训练集的前三张照片为例,auto-encoder的输入和输出如下:

在这里插入图片描述

Baseline

Auto-encoder model一共有五种模型

  • fcn: fully-connected network
  • cnn: convolutional network
  • VAE
  • Resnet
  • Multi-encoder autoencoder
    • encoder(fcn+fcn+fcn)+decoder(fcn)
    • encoder(cnn+cnn+cnn)+decoder(cnn)
    • encoder(fcn+fcn+conv)+decoder(fcn)

通过FCN+调节超参数的方式可以轻易的达到strong,Resnet也是但是Multi-encoder的方式表现并不好,也许是我处理方式有问题,具体代码可以参考GitHub中的文件

Report

Question2

Train a fully connected autoencoder and adjust at least two different element of the latent representation. Show your model architecture, plot out the original image, the reconstructed images for each adjustment and describe the differences.

import matplotlib.pyplot as plt
# sample = train_dataset[random.randint(0,100000)]
sample = train_dataset[0]
print("sample shape:{}".format(sample.size()))
sample = sample.reshape(1,3,64,64)

model.eval()
with torch.no_grad():
    img = sample.cuda()
            
    # 只调整fcn中的latent representation的其中两维,其他模型都是正常输出
    if model_type in ['res']:
        output = model(img)
        output = decoder(output)
        print("res output shape:{}".format(output.size()))
        output = output[0] # 第一个重建图像,当然只有一个图像
        
    if model_type in ['fcn']:
        img = img.reshape(img.shape[0], -1)
        x = model.encoder(img)
        x[0][2] = x[0][2]*3
        output = model.decoder(x)
        print("fcn output shape:{}".format(output.size()))
        output = output.reshape(3,64,64)
        
    if model_type in ['vae']:
        output = model(img)
        print("vae output shape:{}".format(output.size()))
        output = output[0][0] # output[0]是重建后的图像,output[0][0]重建后的第一个图像
        
    if model_type in ['cnn']:
        output = model(img)[0]
        
    print("output shape:{}".format(output.size()))
       
sample = sample.reshape(3,64,64)   

# 创建画布
fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(5, 5))

# plt sample image
axes[0].imshow(transforms.ToPILImage()((sample+1)/2)) #imshow的输入(H,W,C)
axes[0].axis('off')
axes[0].annotate('sample input', xy=(0.5, -0.15), xycoords='axes fraction',ha='center', va='center')
# plt output image
axes[1].imshow(transforms.ToPILImage()((output+1)/2))
axes[1].axis('off')
axes[1].annotate('sample output', xy=(0.5, -0.15), xycoords='axes fraction',ha='center', va='center')

plt.show()

在这里插入图片描述

Code Link

具体代码在Github


http://www.niftyadmin.cn/n/5687851.html

相关文章

Ceph RocksDB 深度调优

介绍 调优 Ceph 可能是一项艰巨的挑战。在 Ceph、RocksDB 和 Linux 内核之间,实际上有数以千计的选项可以进行调整以提高存储性能和效率。由于涉及的复杂性,比较优的配置通常分散在博客文章或邮件列表中,但是往往都没有说明这些设置的实际作…

php email功能实现:详细步骤与配置技巧?

php email发送功能详细教程?如何使用php email服务? 无论是用户注册、密码重置,还是订单确认,电子邮件都是与用户沟通的重要手段。AokSend将详细介绍如何实现php email功能,并提供一些配置技巧,帮助你更好…

第二十三节:学习拦截器或者使用AOP实现用户token参数请求检测(自学Spring boot 3.x的第六天)

这节记录下如何使用aop或者使用interceptor实现用户请求的是否带token,本文只是简单检查用户请求是否带参数token,并不对token的正确性进行验证。通常要从后台缓存中进行token校验。 第一种方式:拦截器方式 第一步:新建一个拦截器…

33 指针与数组:数组名与指针的关系、使用指针遍历数组、数组指针、指针数组、字符指针

目录​​​​​​​ 1 数组名与指针的关系 1.1 数组名 1.2 对数组名取地址 1.3 数组名与指针的区别 1.3.1 类型不同 1.3.2 sizeof 操作符的行为不同 1.3.3 & 操作符的行为不同 1.3.4 自增自减运算的行为不同 1.3.5 可变性不同 2 使用指针遍历数组 2.1 使用 *(nu…

普通人未来还有哪些赚钱机会?

在快速发展的时代,人们对于财富的渴望从未停止。对于普通人而言,寻找合适的赚钱机会至关重要。那么,未来普通人还有哪些赚钱机会呢? 一、互联网领域的新机遇 随着科技的不断进步,互联网依然是充满无限可能的领域。 自媒…

【论文阅读】一种基于元学习框架的针对智能网络入侵检测系统的快速模型窃取攻击技术

FMSA: a meta-learning framework-based fast model stealing attack technique against intelligent network intrusion detection systems 摘要 入侵检测系统越来越多地使用机器学习。虽然机器学习在识别恶意流量方面表现出了出色的性能,但它可能会增加隐私泄露…

高并发内存池(五):ThreadCache、CentralCache和PageCache的内存回收机制、阶段性代码展示和释放内存过程的调试

目录 ThreadCache的内存回收机制 补充内容1 补充内容2 补充内容3 补充内容4 ListTooLong函数的实现 CentralCache的内存回收机制 MapObjectToSpan函数的实现 ReleaseListToSpans函数的实现 PageCache的内存回收机制 补充内容1 补充内容2 ReleaseSpanToPageCache函…

TryHackMe 第5天 | Pre Security (四)

该学习路径讲解了网络安全入门的必备技术知识,比如计算机网络、网络协议、Linux命令、Windows设置等内容。过去三篇已经对前三块内容进行了简单介绍,本篇博客将记录 Windows设置 部分。 Windows Fundamentals Part 1 对于 Windows ,肯定会感…