降噪自编码器(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.rhkb.cn/news/231275.html

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

相关文章

VCoder:大语言模型的眼睛

简介 VCoder的一个视觉编码器,能够帮助MLLM更好地理解和分析图像内容。提高模型在识别图像中的对象、理解图像场景方面的能力。它可以帮助模型显示图片中不同物体的轮廓或深度图(显示物体距离相机的远近)。还能更准确的理解图片中的物体是什…

three.js Raycaster(鼠标点击选中模型)

效果&#xff1a; 代码&#xff1a; <template><div><el-container><el-main><div class"box-card-left"><div id"threejs" style"border: 1px solid red"></div><div class"box-right"…

科普:嵌入式多核并行仿真

自信息技术革命以来&#xff0c;计算机一直被应用在各种复杂的数据处理中&#xff0c;如火箭弹道&#xff0c;高能物理和生物学数据等。随着嵌入式领域的多样化需求的不断丰富&#xff0c;多核CPU的应用也越来越广泛&#xff1a;嵌入式系统通常需要同时处理多个任务和实时数据&…

14:00面试,14:08就出来了,问的问题过于变态了。。。

从小厂出来&#xff0c;没想到在另一家公司又寄了。 到这家公司开始上班&#xff0c;加班是每天必不可少的&#xff0c;看在钱给的比较多的份上&#xff0c;就不太计较了。没想到10月一纸通知&#xff0c;所有人不准加班&#xff0c;加班费不仅没有了&#xff0c;薪资还要降40…

Unity3D Shader 之透视效果XRay

1、 Shader "Unlit/XRay" {Properties{_MainTex("Texture", 2D) "white" {}// 漫反射_Diffuse("Diffuse", COLOR) (1,1,1,1)// XRay 效果_XRayColor("XRay Color", COLOR) (0,1,1,1)_XRayPower("XRay Power",…

Java多线程<二>多线程经典场景

leetcode 多线程刷题 上锁上一次&#xff0c;还是上多次&#xff1f; 同步的顺序。 1. 交替打印字符 使用sychronize同步锁使用lock锁使用concurrent的默认机制使用volitale关键字 Thread.sleep() / Thread.yield机制使用automic原子类 方式1 &#xff1a;使用互斥访问st…

运用AI翻译漫画(二)

构建代码 构建这个PC桌面应用&#xff0c;我们需要几个步骤&#xff1a; 在得到第一次的显示结果后&#xff0c;经过测试&#xff0c;有很大可能会根据结果再对界面进行调整&#xff0c;实际上也是一个局部的软件工程中的迭代开发。 界面设计 启动Visual Studio 2017, 创建…

JAVA版鸿鹄云商B2B2C:解析多商家入驻直播带货商城系统的实现与应用

一、技术选型 java开发语言&#xff1a;java是一种跨平台的编程语言&#xff0c;适用于大型企业级应用开发。使用java开发直播商城可以保证系统的稳定性和可扩展性。 spring boot框架&#xff1a;spring boot是一个快速构建spring应用的框架&#xff0c;简化了开发过程&#xf…

ArkTS - @Builder自定义构建函数

这个Builder作用就是可以把组件样式抽离出来&#xff0c;写成公共组件&#xff0c;下边记录下全局自定义构建函数用法及注意的地方。 官方文档&#xff1a;开发者可以将重复使用的UI元素抽象成一个方法&#xff0c;在build方法里调用。 一、用法 下边代码&#xff0c;我在Co…

PostgreSQL10数据库源码安装及plpython2u、uuid-ossp插件安装

PostgreSQL10数据库源码安装及plpython2u、uuid-ossp插件安装 1、环境2、安装包下载3、安装3.1 、解压3.2、配置3.3、编译安装3.4 、启动与关闭 4、安装 uuid-ossp 、plpython2u插件5、参考 1、环境 centos 7 、 postgresql 10.19 2、安装包下载 postgres 源码安装包 3、安…

(三)STM32F407 cubemx串口中断通讯

&#xff08;三&#xff09;STM32F407 cubemx串口中断通讯 这篇文章主要是个人的学习经验&#xff0c;想分享出来供大家提供思路&#xff0c;如果其中有不足之处请批评指正哈。废话不多说直接开始主题&#xff0c;本人是基于STM32F407VET6芯片&#xff0c;但是意在你看懂这篇文…

MyBatisPlus学习二:常用注解、条件构造器、自定义sql

常用注解 基本约定 MybatisPlus通过扫描实体类&#xff0c;并基于反射获取实体类信息作为数据库表信息。可以理解为在继承BaseMapper 要指定对应的泛型 public interface UserMapper extends BaseMapper<User> 实体类中&#xff0c;类名驼峰转下划线作为表名、名为id的…

python的课后练习总结4(while循环)

for循环用于针对序列中的每个元素的一个代码块。 while循环是不断的运行&#xff0c;直到指定的条件不满足为止。 while 条件&#xff1a; 条件成立重复执行的代码1 条件成立重复执行的代码2 …….. i 1while i < 5:print(i)i i 11、使用wh…

后端中的Dao层、Service层、Impl层、utils层、Controller层

Java Dao层 dao层叫数据访问层&#xff0c;全称为data access object&#xff0c;属于一种比较底层&#xff0c;比较基础的操作&#xff0c;具体到对于某个表、某个实体的增删改查&#xff0c;对外提供稳定访问数据库的方法 Mapper:&#xff08;DAO&#xff09; 访问数据库&am…

工作中人员离岗识别摄像机

工作中人员离岗识别摄像机是一种基于人工智能技术的智能监控设备&#xff0c;能够实时识别员工离岗状态并进行记录。这种摄像机通常配备了高清摄像头、深度学习算法和数据处理系统&#xff0c;可以精准地监测员工的行为&#xff0c;提高企业的管理效率和安全性。 工作中人员离岗…

TDD-LTE TAU流程

目录 1. TAU成功流程 1.1 空闲态TAU 1.2 连接态TAU 2. TAU失败流程 当UE进入一个小区&#xff0c;该小区所属TAI不在UE保存的TAI list内时&#xff0c;UE发起正常TAU流程&#xff0c;分为IDLE和CONNECTED&#xff08;即切换时&#xff09;下。如果TAU accept分配了一个新的…

Java程序设计——GUI设计

一、目的 通过用户图形界面设计&#xff0c;掌握JavaSwing开发的基本方法。 二、实验内容与设计思想 实验内容&#xff1a; 课本验证实验&#xff1a; Example10_6 图 1 Example10_7 图 2 图 3 Example10_15 图 4 设计思想&#xff1a; ①学生信息管理系统&#xff1a…

如何在2024年编写Android应用程序

如何在2024年编写Android应用程序 本文将介绍以下内容&#xff1a; 针对性能进行优化的单活动多屏幕应用程序 &#x1f92b;&#xff08;没有片段&#xff09;。应用程序架构和模块化 → 每个层面。Jetpack Compose 导航。Firestore。应用程序架构&#xff08;模块化特征驱动…

JS 手写 new 函数

工作中我们经常会用到 new 关键字&#xff0c;new 一个构造函数生成一个实例对象&#xff0c;那么new的过程中发生了什么呢&#xff0c;我们今天梳理下 创建一个对象对象原型继承绑定函数this返回对象 先创建一个构造函数&#xff0c;原型上添加一个方法 let Foo function (n…

Python元组与字典的基础介绍

元组(tuple) 在Python中,元组是不可变的有序元素的序列 即创建后不可以被修改 创建方式val_name ([val],[val].....) #----------声明------------ tuple_1 (1,2,3) print(tuple_1)元组的运算 虽然说元组的额元素是不可以更改的,但元组之间可以使用,,*号进行运算,运算后会…