[深度学习] 自编码器Autoencoder
自编码器(Autoencoder)是一种无监督学习算法,主要用于数据的降维、特征提取和数据重建。自编码器由两个主要部分组成:编码器(Encoder)和解码器(Decoder)。其基本思想是将输入数据映射到一个低维的潜在空间,然后再从该潜在空间重建出原始数据。
1. 自编码器的结构
一个典型的自编码器包括以下部分:
- 编码器(Encoder):将输入数据压缩到一个低维的潜在空间表示。通常由若干层神经网络组成。
- 潜在空间(Latent Space):编码器输出的低维表示,也称为编码(Code)或瓶颈(Bottleneck)。
- 解码器(Decoder):将低维的潜在空间表示解码回原始数据的维度。通常也由若干层神经网络组成。

2. 自编码器的工作原理
自编码器通过两个阶段来训练和使用:
-
训练阶段:
- 输入数据 x 通过编码器映射到潜在空间 z,表示为 z=f(x)。
- 潜在空间表示 z 通过解码器重建出原始数据 x^ ,表示为 x^=g(z)=g(f(x))。
- 训练目标是最小化重建误差,即 x 和 x^ 之间的差异,常用的损失函数为均方误差(MSE)。
-
使用阶段:
- 训练完成后,编码器可以用于将新数据映射到低维潜在空间进行特征提取或降维。
- 解码器可以用于从潜在空间表示生成数据,应用于生成模型等任务。
3. 自编码器的类型
根据不同的应用和需求,自编码器有多种变体:
-
稀疏自编码器(Sparse Autoencoder):
- 通过添加稀疏性约束,使得潜在空间表示中只有少数几个单元被激活,常用于特征提取。
-
去噪自编码器(Denoising Autoencoder):
- 输入数据加入噪声,目标是从噪声数据中重建出原始的无噪声数据,常用于去噪和鲁棒性增强。
-
变分自编码器(Variational Autoencoder, VAE):
- 在潜在空间中引入概率分布,学习数据的生成分布,可以用于生成新数据和数据增强。
-
卷积自编码器(Convolutional Autoencoder, CAE):
- 使用卷积层替代全连接层,常用于图像数据的降维和特征提取。
4. 自编码器的实现示例(使用TensorFlow和Keras)
下面是一个使用TensorFlow实现自编码器的简单示例。这个示例展示了如何构建一个基本的自编码器,用于图像数据的压缩和重构。我们将使用经典的MNIST手写数字数据集。
import tensorflow as tf
from tensorflow.keras import layers, models
import numpy as np
import matplotlib.pyplot as plt# 加载MNIST数据集
(x_train, _), (x_test, _) = tf.keras.datasets.mnist.load_data()
x_train = x_train.astype('float32') / 255.0
x_test = x_test.astype('float32') / 255.0# 将数据展开为一维向量
x_train = x_train.reshape((len(x_train), np.prod(x_train.shape[1:])))
x_test = x_test.reshape((len(x_test), np.prod(x_test.shape[1:])))# 定义编码器
input_dim = x_train.shape[1]
encoding_dim = 32 # 压缩后的维度input_img = layers.Input(shape=(input_dim,))
encoded = layers.Dense(encoding_dim, activation='relu')(input_img)# 定义解码器
decoded = layers.Dense(input_dim, activation='sigmoid')(encoded)# 构建自编码器模型
autoencoder = models.Model(input_img, decoded)# 构建单独的编码器模型
encoder = models.Model(input_img, encoded)# 构建单独的解码器模型
encoded_input = layers.Input(shape=(encoding_dim,))
decoder_layer = autoencoder.layers[-1]
decoder = models.Model(encoded_input, decoder_layer(encoded_input))# 编译自编码器模型
autoencoder.compile(optimizer='adam', loss='binary_crossentropy')# 训练自编码器
autoencoder.fit(x_train, x_train,epochs=50,batch_size=256,shuffle=True,validation_data=(x_test, x_test))# 使用编码器和解码器进行编码和解码
encoded_imgs = encoder.predict(x_test)
decoded_imgs = decoder.predict(encoded_imgs)# 可视化结果
n = 10 # 显示10个数字
plt.figure(figsize=(20, 4))
for i in range(n):# 原始图像ax = plt.subplot(2, n, i + 1)plt.imshow(x_test[i].reshape(28, 28))plt.gray()ax.get_xaxis().set_visible(False)ax.get_yaxis().set_visible(False)# 重构图像ax = plt.subplot(2, n, i + 1 + n)plt.imshow(decoded_imgs[i].reshape(28, 28))plt.gray()ax.get_xaxis().set_visible(False)ax.get_yaxis().set_visible(False)
plt.show()
说明:
- 数据预处理: 加载MNIST数据集,并将其像素值归一化到[0,1]区间。
- 模型构建:
- 编码器: 输入层连接到一个隐藏层(编码层),将数据压缩到32维。
- 解码器: 将编码后的数据重构回原始维度。
- 自编码器: 编码器和解码器组合在一起形成完整的自编码器模型。
- 训练模型: 使用
binary_crossentropy损失函数和adam优化器进行训练。 - 结果可视化: 显示原始图像和重构图像,以比较它们的相似性。
输出:

5. 自编码器的应用
自编码器(Autoencoders)具有广泛的应用场景,以下是一些主要的应用领域:
1. 数据降维
自编码器可以用于高维数据的降维,将数据压缩到低维空间,从而减少存储和计算的复杂性。这种方法在很多方面可以替代主成分分析(PCA),特别是在处理非线性数据时(Springer)(MDPI)。
2. 特征提取
在无监督学习中,自编码器能够自动学习数据的潜在特征表示。通过训练自编码器模型,可以提取输入数据的有用特征,这些特征可以用于其他机器学习任务,例如分类和聚类(ar5iv)。
3. 图像去噪
去噪自编码器(Denoising Autoencoders, DAE)被用来去除图像中的噪声。通过向输入图像添加噪声,并训练自编码器去重构原始的无噪声图像,可以有效地消除噪声(Springer)。
4. 数据生成
变分自编码器(Variational Autoencoders, VAE)是一种生成模型,可以用来生成与训练数据分布相似的新数据。VAE在潜在空间中引入了随机性,使得生成的样本具有多样性(ar5iv) (ar5iv)。
5. 异常检测
自编码器可以用来检测数据中的异常点。通过训练自编码器重构正常数据,任何重构误差较大的数据点可能就是异常点。这个方法广泛应用于工业设备故障检测、网络入侵检测等领域(Springer)。
6. 图像和视频压缩
自编码器可以用于图像和视频压缩,通过将图像和视频数据压缩到潜在空间,再从潜在空间重构,从而实现高效压缩(MDPI)。
7. 自监督学习
自编码器作为自监督学习的一个重要工具,可以在没有标签的数据上进行预训练,帮助提升有监督学习任务的效果。它在自然语言处理、图像识别等领域有重要应用(ar5iv)。
8. 数据填补
自编码器可以用于数据缺失值的填补。通过训练自编码器重构完整数据,可以用潜在空间的表示来推断并填补缺失的数据(MDPI)。
相关文章:
[深度学习] 自编码器Autoencoder
自编码器(Autoencoder)是一种无监督学习算法,主要用于数据的降维、特征提取和数据重建。自编码器由两个主要部分组成:编码器(Encoder)和解码器(Decoder)。其基本思想是将输入数据映射…...
模型微调、智能体、知识库之间的区别
使用开源模型微调和使用知识库与智能体(agent)的区别主要体现在工作原理、应用场景和实现目标上。以下是对这三者的详细对比: 开源模型微调 定义: 微调是对预训练模型(例如BERT、GPT等)进行额外训练&…...
七日世界Once Human跳ping、延迟高、丢包怎么办?
七日世界是一款开放世界为轴点的生存射击游戏,玩家将进入一个荒诞、荒芜的末日世界,在这里与好友一起对抗可怖的怪物和神秘物质星尘的入侵,给这个星球留下最后的希望,共筑一片安全的领地。不过有部分玩家在游玩七日世界的时候&…...
机器人控制系列教程之关节空间运动控制器搭建(1)
机器人位置控制类型 机器人位置控制分为两种类型: 关节空间运动控制—在这种情况下,机器人的位置输入被指定为一组关节角度或位置的向量,这被称为机器人的关节配置,记作q。控制器跟踪一个参考配置,记作 q r e f q_{re…...
[linux]sed命令基础入门详解
sed是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”,接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这…...
Charles抓包工具系列文章(一)-- Compose 拼接http请求
一、背景 众所周知,Charles是一款抓包工具,当然是http协议,不支持tcp。(如果你想要抓tcp包,请转而使用wireshark,在讲述websocket的相关技术有梳理过wireshark抓包) 话说回来,char…...
OLMo:真正完全开源的大模型
最近,又有一家机构AI2(Allen Institute for AI)开源了一个LLM:OLMo,它的英文全称就叫Open Language Model。相比之前开源的大模型,OLMo的独特之处是完全开源,除了训练的模型,OLMo还开…...
51单片机STC89C52RC——12.1 数据存储芯片AT24C02
目的/效果 利用存储芯片AT24C02存储数据,LCD1602显示存储的数据。 一,STC单片机模块 二,AT24C02存储芯片 2.1 介绍 AT24C02是一个2K位串行CMOS E2PROM,内部含有256个8位字节,采用先进CMOS技术实质上减少了器件的功…...
融入云端的心跳:在Spring Cloud应用中集成Eureka Client
融入云端的心跳:在Spring Cloud应用中集成Eureka Client 引言 在微服务架构中,服务发现是一个关键组件,它允许服务实例之间相互发现并通信。Netflix Eureka是Spring Cloud体系中广泛使用的服务发现框架。Eureka提供了一个服务注册中心&…...
CocosCreator构建IOS的wwise教程
CocosCreator构建IOS教程 添加wwise教程: 1.添加include 2.添加SoundEngine 3.添加Profile-iphoneos下面lib下面的.a 4.导入js调用C++的文件 5.导入这些文件 6.初始化ios绝对路径和TTS语音合成对象 6.获得根目录绝对路径,加载pck需要找到绝对路径。怎么找绝对路径? #impor…...
掌握 SQL Server 中的 FLOOR 函数:数据舍入的艺术
掌握 SQL Server 中的 FLOOR 函数:数据舍入的艺术 引言 在数据分析和处理中,我们经常需要对数值进行精确控制,比如将数值舍入到特定的精度。SQL Server 提供了多种数学函数,其中 FLOOR 函数就是用来执行向上舍入操作的强大工具。…...
【折腾笔记】兰空图床使用Redis做缓存
前言 最近发现我部署在群晖NAS上的兰空图床程序在高并发的情况下会导致图片加载缓慢或出现图片加载失败的情况,于是我查阅了官方文档资料并进行了一系列的测试,发现兰空图床如果开启了原图保护功能,会非常的吃CPU的性能,尤其是在…...
【Ubuntu】如何用指令设置静态IP
这里介绍的是利用netplan 的配置文件一般在 /etc/netplan/ 目录下,文件名类似 01-network-manager-all.yaml。 用 nano/ vim 编辑器打开配置文件: sudo nano /etc/netplan/01-network-manager-all.yaml # 替换成你的文件名修改配置文件 network:versi…...
mechanize - 自动化与HTTP web服务器的交互操作
1、前言 随着自动化测试的普及与落地推广,出现了众多知名的自动化测试工具,如Selenium 、Robot Framework、Playwright等。本文将介绍一款在Python环境下的mechanize库,这个库能够模拟浏览器行为,支持发送HTTP请求、解析HTML页面和…...
【Android】保留elevation层级效果,舍弃阴影效果
关于elevation属性 elevation是高度,海拔的意思 该属性可以设置View在父容器中的层级,即z属性 当view的elevation高于其它view时,它将显示在最上方,并产生阴影效果 关闭阴影效果 view的高度阴影,通过outlineProvi…...
Java新手启航:Windows下JDK安装,开启编程之旅
你是不是对编程充满好奇,想要迈入Java的世界,却不知道从何开始?别担心,每一个Java大师都是从安装JDK开始的,而今天,我将手把手教你如何轻松完成JDK的安装,让你迈出编程之旅的第一步! 接下来&am…...
c++指针和引用之高难度(二)习题讲解
1.【单选题】 int a[4] { 1001,1002,1003,1004 }; int* p{ &a[1] }; p[1] ? A 1001 B 1002 C 1003 解析:这道题考察了指针和数组可以混用。p 指向了 数组 a[0] 的地址,也就是 1002 的地址,此时 *p p[0]…...
UNIAPP编译到微信小程序时,会多一层以组件命名的标签
UNIAPP编译到微信小程序时,会多一层以组件命名的标签 解决方案 可以配置virtualHost来配置 export default {options: {virtualHost: true} }...
工业自动化控制中心
目录 一 设计原型 二 后台源码 一 设计原型 二 后台源码 using System; using System.Threading; using System.Threading.Tasks; using System.Windows.Forms;namespace 工业自动化控制中心 {public partial class Form1 : Form{public Form1(){InitializeComponent();}pri…...
【Git】GitIgnore不生效
这里可能有两种原因,一个没有刷新Git缓存,二是Git忽略规则有问题 更新Git缓存 git rm -r --cached . git add . git commit -m "modify git ignore rule"Ignore规则 检查下忽略文件的目录表示是否正确 XXX忽略任意目录下名为XXX的文件 …...
《Playwright:微软的自动化测试工具详解》
Playwright 简介:声明内容来自网络,将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具,支持 Chrome、Firefox、Safari 等主流浏览器,提供多语言 API(Python、JavaScript、Java、.NET)。它的特点包括&a…...
【JVM】- 内存结构
引言 JVM:Java Virtual Machine 定义:Java虚拟机,Java二进制字节码的运行环境好处: 一次编写,到处运行自动内存管理,垃圾回收的功能数组下标越界检查(会抛异常,不会覆盖到其他代码…...
Go 语言接口详解
Go 语言接口详解 核心概念 接口定义 在 Go 语言中,接口是一种抽象类型,它定义了一组方法的集合: // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的: // 矩形结构体…...
大语言模型如何处理长文本?常用文本分割技术详解
为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...
多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验
一、多模态商品数据接口的技术架构 (一)多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如,当用户上传一张“蓝色连衣裙”的图片时,接口可自动提取图像中的颜色(RGB值&…...
让AI看见世界:MCP协议与服务器的工作原理
让AI看见世界:MCP协议与服务器的工作原理 MCP(Model Context Protocol)是一种创新的通信协议,旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天,MCP正成为连接AI与现实世界的重要桥梁。…...
处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的
修改bug思路: 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑:async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...
Golang——9、反射和文件操作
反射和文件操作 1、反射1.1、reflect.TypeOf()获取任意值的类型对象1.2、reflect.ValueOf()1.3、结构体反射 2、文件操作2.1、os.Open()打开文件2.2、方式一:使用Read()读取文件2.3、方式二:bufio读取文件2.4、方式三:os.ReadFile读取2.5、写…...
解析奥地利 XARION激光超声检测系统:无膜光学麦克风 + 无耦合剂的技术协同优势及多元应用
在工业制造领域,无损检测(NDT)的精度与效率直接影响产品质量与生产安全。奥地利 XARION开发的激光超声精密检测系统,以非接触式光学麦克风技术为核心,打破传统检测瓶颈,为半导体、航空航天、汽车制造等行业提供了高灵敏…...
区块链技术概述
区块链技术是一种去中心化、分布式账本技术,通过密码学、共识机制和智能合约等核心组件,实现数据不可篡改、透明可追溯的系统。 一、核心技术 1. 去中心化 特点:数据存储在网络中的多个节点(计算机),而非…...
