降噪自编码器(Denoising Autoencoder)

降噪自编码器(Denoising Autoencoder)是一种用于无监督学习的神经网络模型。与普通的自编码器不同,降噪自编码器的目标是通过在输入数据中引入噪声,然后尝试从具有噪声的输入中重建原始无噪声数据。
以下是降噪自编码器的主要特点和工作原理:

1.噪声引入: 在训练阶段,降噪自编码器将输入数据添加一些噪声,例如高斯噪声或随机失活(random dropout)。这样的操作迫使网络学习对输入的噪声具有鲁棒性,使得模型更能够从嘈杂的数据中提取有用的特征。
2.网络结构: 降噪自编码器通常由编码器(encoder)和解码器(decoder)两个部分组成。编码器负责将输入数据映射到一个低维表示,而解码器则将这个低维表示还原为尽可能接近原始输入的输出。这个过程迫使模型学习提取输入数据中的关键特征。
3.损失函数: 降噪自编码器的目标是最小化重构误差,即原始输入与解码器输出之间的差异。常用的损失函数包括均方误差(Mean Squared Error,MSE)或交叉熵损失。
4.特征学习: 通过在输入中引入噪声,降噪自编码器迫使模型学习对输入的潜在表示,而不仅仅是简单地记住训练数据。这有助于模型学习数据的通用特征,提高了模型对新样本的泛化能力。
5.应用: 降噪自编码器广泛应用于特征学习、数据去噪、生成模型等任务。在训练后,编码器部分可以被用作特征提取器,产生的低维表示可以在其他任务中使用。

总体而言,降噪自编码器是一种有效的无监督学习方法,通过在训练数据中引入噪声,可以学习到更健壮、有意义的特征表示,对于数据的去噪和特征学习任务有着良好的性能。
对于输入层 x,以一定概率将其节点置0,得到 x1,用 x1去计算 y ,计算 z ,并将 z与原始 x做误差迭代,对结果误差较小的节点可以认为是噪声。每层处理重复上述工作。

在这里插入图片描述
在这里插入图片描述

from six.moves import urllib
opener = urllib.request.build_opener()
opener.addheaders = [('User-agent', 'Mozilla/5.0')]
urllib.request.install_opener(opener)import torch
import numpy as np
from torchvision import datasets
import torchvision.transforms as transforms
import os
os.environ["KMP_DUPLICATE_LIB_OK"]="TRUE"
# 将数据转换为 Torch。浮动张量
transform = transforms.ToTensor()# 加载训练数据集和测试数据集
train_data = datasets.MNIST(root='~/.pytorch/MNIST_data/', train=True,download=True, transform=transform)
test_data = datasets.MNIST(root='~/.pytorch/MNIST_data/', train=False,download=True, transform=transform)# 创建训练和测试数据加载器
num_workers = 0
# 每批要加载多少个样品
batch_size = 20# 准备数据加载程序
train_loader = torch.utils.data.DataLoader(train_data, batch_size=batch_size, num_workers=num_workers)
test_loader = torch.utils.data.DataLoader(test_data, batch_size=batch_size, num_workers=num_workers)# 可视化数据
import matplotlib.pyplot as plt
# 获取一批训练图像
dataiter = iter(train_loader)# images, labels = dataiter.next()
images, labels = next(dataiter)
images = images.numpy()# 从批处理中获取一个图像
img = np.squeeze(images[0])fig = plt.figure(figsize = (5,5))
ax = fig.add_subplot(111)
ax.imshow(img, cmap='gray')plt.show()import torch
import torch.nn as nn
import torch.optim as optim
import torch.nn.functional as F
from torch.utils.data import DataLoader
import numpy as np
import matplotlib.pyplot as plt# 假设您之前已经定义了train_loader并test_loader某个地方class ConvDenoiser(nn.Module):def __init__(self):super(ConvDenoiser, self).__init__()self.encoder = nn.Sequential(nn.Conv2d(1, 32, kernel_size=3, padding=1),nn.ReLU(),nn.MaxPool2d(2, 2),nn.Conv2d(32, 64, kernel_size=3, padding=1),nn.ReLU(),nn.MaxPool2d(2, 2))self.decoder = nn.Sequential(nn.ConvTranspose2d(64, 32, kernel_size=2, stride=2),nn.ReLU(),nn.ConvTranspose2d(32, 1, kernel_size=2, stride=2),nn.Sigmoid()  # To ensure output values are between 0 and 1)def forward(self, x):x = self.encoder(x)x = self.decoder(x)return x# 初始化神经网络
model = ConvDenoiser()# 指定损失函数和优化器
criterion = nn.MSELoss()
optimizer = optim.Adam(model.parameters(), lr=0.001)# 训练模型的纪元数
n_epochs = 20# 用于为图像添加噪点
noise_factor = 0.5for epoch in range(1, n_epochs + 1):# 监控训练损失train_loss = 0.0# 训练模型for data in train_loader:images, _ = data# 向输入图像添加随机噪声noisy_imgs = images + noise_factor * torch.randn_like(images)# 将图像剪辑为介于 0 和 1 之间noisy_imgs = torch.clamp(noisy_imgs, 0., 1.)# 清除所有优化变量的梯度optimizer.zero_grad()# 前向传递:通过将*嘈杂*图像传递到模型来计算预测输出outputs = model(noisy_imgs)# 计算损失# “目标”仍然是原始的、不嘈杂的图像loss = criterion(outputs, images)# 后向传递:计算相对于模型参数的损失梯度loss.backward()# 执行单个优化步骤(参数更新)optimizer.step()# 更新跑步训练损失train_loss += loss.item() * images.size(0)# 打印平均训练统计信息train_loss = train_loss / len(train_loader)print('Epoch: {} \tTraining Loss: {:.6f}'.format(epoch, train_loss))# Obtain one batch of test images
# dataiter = iter(test_loader)
# images, _ = dataiter.next()
dataiter = iter(train_loader)
images, labels = next(dataiter)
# 为测试图像添加噪点
noisy_imgs = images + noise_factor * torch.randn_like(images)
noisy_imgs = torch.clamp(noisy_imgs, 0., 1.)# 获取示例输出
output = model(noisy_imgs)# 准备要显示的图像
noisy_imgs = noisy_imgs.numpy()
output = output.detach().numpy()# 绘制前十个输入图像,然后绘制重建图像
fig, axes = plt.subplots(nrows=2, ncols=10, sharex=True, sharey=True, figsize=(25, 4))# 输入图像在顶行,重建在下行
for noisy_img, row in zip([noisy_imgs, output], axes):for img, ax in zip(noisy_img, row):ax.imshow(np.squeeze(img), cmap='gray')ax.get_xaxis().set_visible(False)ax.get_yaxis().set_visible(False)plt.show()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/605648.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于SSM的停车管理系统设计与实现

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:采用JSP技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目&#x…

Pytest自动化测试框架

1、pytest简介 pytest是Python的一种单元测试框架,与python自带的unittest测试框架类似,但是比unittest框架使用起来更简洁,效率更高。 执行测试过程中可以将某些测试跳过,或者对某些预期失败的case标记成失败能够支持简单的单元…

关于vite的glob坑

我先展示一段代码: /*** function 根据pages路径动态生成路由* param {Array} 基础路由*/ export default function (routes) {const modules import.meta.glob("../pages/**/page.js", { eager: true, import: "default" });const comps im…

如何让ArcGIS Pro启动显示空白页面

刚接触ArcGIS Pro的你是否会觉得在操作上有那么一些不习惯,从一开始软件启动就发现和ArcGIS差距很大:丰富的欢迎页面,加上默认加载的地图让你眼花缭乱,这里教你如何去掉这些繁杂的内容,还你一个干净的启动页面。 跳过…

【算法】算法设计与分析 期末复习总结

第一章 算法概述 时间复杂度比大小,用代入法,代入2即可。求渐进表达式,就是求极限,以极限为O的括号;O是指上界,Ω是指下界,θ是指上下界相等,在这里,可以这样理解&#…

6.综合案例

1. 需求描述 1.1 显示所有员工信息 URI:emps 请求方式:GET 显示效果 1.2 添加操作- 去往添加页面 显示添加页面: URI:emp 请求方式:GET 显示效果 1.3 添加操作- 添加员工 添加员工信息: URI:emp 请求方式:POST 显示效果:完成添加, 重定向到 list 页面。 1.4…

【深度学习:Domain Adversarial Neural Networks (DANN) 】领域对抗神经网络简介

【深度学习:Domain Adversarial Neural Networks】领域对抗神经网络简介 前言领域对抗神经网络DANN 模型架构DANN 训练流程DANN示例 GPT示例 前言 领域适应(DA)指的是当不同数据集的输入分布发生变化(这种变化通常被称为共变量变…

RT-Thread 内核基础(三)

程序内存分布 一般MCU包含的存储空间有:片内Flash与片内RAM,RAM相当于内存,Flash相当于硬盘。 编译器会将一个程序分类为好几个部分,分别存储在MCU不同的存储区。 Keil工程在编译完之后,会有相应的程序所占用的空间提…

图灵日记之java奇妙历险记--抽象类和接口

目录 抽象类概念抽象类语法 接口概念规则使用特性实现多个接口接口的继承接口使用实例Clonable接口和深拷贝抽象类和接口的区别 Object类 抽象类 概念 在面向对象的概念中,所有对象都是通过类来描述的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够…

SD-WAN:提升连锁零售企业异地组网稳定性

连锁零售企业往往拥有众多分布在不同地区的分支机构和零售店,为保证企业高效运转,各地区之间的网络连接必须稳定可靠。但基于各地网络基础设施的不同和网络延迟、带宽等限制,异地组网往往并不稳定。在这背景下,SD-WAN成为连锁零售…

UV贴图和展开初学者指南

在线工具推荐: 3D数字孪生场景编辑器 - GLTF/GLB材质纹理编辑器 - 3D模型在线转换 - Three.js AI自动纹理开发包 - YOLO 虚幻合成数据生成器 - 三维模型预览图生成器 - 3D模型语义搜索引擎 介绍 这正是本文的主题——UV贴图——登上舞台的时候。大多数 3D 建…

在win10和Linux上配置SSH 无密码登录

文章目录 一、用途二、在本地机器上使用ssh-keygen产生公钥私钥对1)在Linux (或macOS) 上产生SSH公私钥的方法2)在win10上产生SSH公私钥的方法a)检查windows 本地是否安装有sshb)在本地生成SSH密钥对(公钥和私钥&#…

基于Java SSM框架实现时间管理系统项目【项目源码+论文说明】

基于java的SSM框架实现时间管理系统演示 摘要 随着科学技术的飞速发展,各行各业都在努力与现代先进技术接轨,通过科技手段提高自身的优势;对于时间管理系统当然也不能排除在外,随着网络技术的不断成熟,带动了时间管理…

SQL Server从0到1——提权

xp_cmdshell提权 xp_cmdshell在前面写webshell已经讲解过了,在这里不在重复 sp_oacreate提权 启用: EXEC sp_configure show advanced options, 1; RECONFIGURE WITH OVERRIDE; EXEC sp_configure Ole Automation Procedures, 1; RECONFIGURE WITH OV…

MySQL运维实战(3.1) MySQL官方客户端使用介绍

作者:俊达 引言 MySQL是MySQL安装包默认的客户端,该客户端程序通常位于二进制安装包的bin目录中,或者通过rpm安装包安装mysql-community-client,是数据库管理系统的重要组成部分。MySQL客户端不仅仅是一个简单的软件工具&#x…

程序员必知!中介者模式的实战应用与案例分析

中介者模式通过引入中介类降低对象间耦合度,在电商平台中,卖家、买家、物流公司和支付平台原本需复杂交互,在引入“交易中介”类后,各角色只需与中介交互,由中介协调各方操作,从而简化了交互流程&#xff0…

APP加固技术及其应用

文章目录 引言 APP加固的概念 APP加固的方案 APP加固在实际开发中的应用 总结 引言 在移动应用开发过程中,APP加固技术起到了非常重要的作用。APP加固是将apk文件进行混淆加密,以防止别人反编译获取我们的源码和资源文件。目前市场上主流的APP加固…

手写一个加盐加密算法(java实现)

目录 前言 什么是MD5?? 加盐算法 那别的人会不会跟你得到相同的UUID? 如何使用盐加密? 代码实现 前言 对于我们常见的登录的时候需要用到的组件,加密是一个必不可少的东西,如果我们往数据库存放用户…

零售EDI:Petco EDI对接指南

Petco 始于1965年,是一家美国宠物零售商,提供各种宠物产品和服务以及某些类型的活体小动物。起初Petco只是一家邮购兽医用品公司,后发展为一家成熟的宠物食品和供应链的公司。Petco与其供应商之间是如何传输业务数据的呢? 通过EDI…

【docker笔记】DockerFile

DockerFile Docker镜像结构的分层 镜像不是一个单一的文件,而是有多层构成。 容器其实是在镜像的最上面加了一层读写层,在运行容器里做的任何文件改动,都会写到这个读写层。 如果删除了容器,也就是删除了其最上面的读写层&…