[深度学习] 自编码器Autoencoder

news2024/11/19 1:40:34

自编码器(Autoencoder)是一种无监督学习算法,主要用于数据的降维、特征提取和数据重建。自编码器由两个主要部分组成:编码器(Encoder)和解码器(Decoder)。其基本思想是将输入数据映射到一个低维的潜在空间,然后再从该潜在空间重建出原始数据。

1. 自编码器的结构

一个典型的自编码器包括以下部分:

  • 编码器(Encoder):将输入数据压缩到一个低维的潜在空间表示。通常由若干层神经网络组成。
  • 潜在空间(Latent Space):编码器输出的低维表示,也称为编码(Code)或瓶颈(Bottleneck)。
  • 解码器(Decoder):将低维的潜在空间表示解码回原始数据的维度。通常也由若干层神经网络组成。

2. 自编码器的工作原理

自编码器通过两个阶段来训练和使用:

  1. 训练阶段

    • 输入数据 x 通过编码器映射到潜在空间 z,表示为 z=f(x)。
    • 潜在空间表示 z 通过解码器重建出原始数据 x^ ,表示为 x^=g(z)=g(f(x))。
    • 训练目标是最小化重建误差,即 x 和 x^ 之间的差异,常用的损失函数为均方误差(MSE)。
  2. 使用阶段

    • 训练完成后,编码器可以用于将新数据映射到低维潜在空间进行特征提取或降维。
    • 解码器可以用于从潜在空间表示生成数据,应用于生成模型等任务。

3. 自编码器的类型

根据不同的应用和需求,自编码器有多种变体:

  1. 稀疏自编码器(Sparse Autoencoder)

    • 通过添加稀疏性约束,使得潜在空间表示中只有少数几个单元被激活,常用于特征提取。
  2. 去噪自编码器(Denoising Autoencoder)

    • 输入数据加入噪声,目标是从噪声数据中重建出原始的无噪声数据,常用于去噪和鲁棒性增强。
  3. 变分自编码器(Variational Autoencoder, VAE)

    • 在潜在空间中引入概率分布,学习数据的生成分布,可以用于生成新数据和数据增强。
  4. 卷积自编码器(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()
说明:
  1. 数据预处理: 加载MNIST数据集,并将其像素值归一化到[0,1]区间。
  2. 模型构建:
    • 编码器: 输入层连接到一个隐藏层(编码层),将数据压缩到32维。
    • 解码器: 将编码后的数据重构回原始维度。
    • 自编码器: 编码器和解码器组合在一起形成完整的自编码器模型。
  3. 训练模型: 使用binary_crossentropy损失函数和adam优化器进行训练。
  4. 结果可视化: 显示原始图像和重构图像,以比较它们的相似性。
输出:

在这里插入图片描述

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)。

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

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

相关文章

软考《信息系统运行管理员》-1.2信息系统运维

1.2信息系统运维 传统运维模式(软件) 泛化:软件交付后围绕其所做的任何工作纠错:软件运行中错误的发现和改正适应:为适应环境做出的改变用户支持:为软件用户提供的支持 新的不同视角下的运维 “管理”的…

【八股系列】Vue中的<keep-alive>组件:深入解析与实践指南

🎉 博客主页:【剑九 六千里-CSDN博客】 🎨 上一篇文章:【探索响应式布局的奥秘:关键技术与实战代码示例】 🎠 系列专栏:【面试题-八股系列】 💖 感谢大家点赞👍收藏⭐评论…

三、用户中心项目笔记----后端多环境实战+原始部署

后端多环境主要是修改: 依赖的环境地址 数据库地址 缓存地址 消息队列地址 项目端口号 服务器配置 后端怎么去区分不同的环境? 我们后端的SpringBoot项目,通过application.yml添加不同后缀来区分配置文件 application.yml就是公共的配置&a…

NeRF从入门到放弃6:两种OpenCV去畸变模型

针孔相机和鱼眼相机的去畸变模型是不一样的。 针孔相机的畸变参数有12个,k1~k6是径向畸变参数,p1 p2是切向畸变,s1s4;而鱼眼相机是等距模型,畸变参数只有4个k1k4。 针孔相机 畸变分为径向畸变和切向畸变。 把相机平…

链式结构二叉树练习

一.二叉树的前序遍历 想要输出所给值,就要先用数组将数据存储起来,所以这里我们单独创建一个前序遍历函数,将所要数据前序遍历并放入数组,代码如下: void preOrder(struct TreeNode* root, int* a, int* pi)//前序遍历…

新鲜出炉的信息化一机两用方案

在信息化日益发展的今天,网络安全问题愈发凸显其重要性。尤其是在政府和企事业单位中,如何在保证业务流畅和工作效率的同时,确保信息高安全性,成为了一个亟待解决的问题。而“一机两用”政策,正是针对这一需求而提出的…

如何理解:业务架构、应用架构、数据架构、技术架构与系统和复杂度

关于系统的理解 1.1 系统的概述 随着人类社会的发展,人们面对越来越多的规模巨大、关系复杂、参数众多地复杂问题,这些问题的复杂度已经远远超出人类的理解能力,系统论就是为了分析和解决这些问题而生。我们平时接触的计算机系统包括软件系统…

C语言 | 文件操作(下)【必收藏】

文件操作(下) 5、文件的顺序读写5.1 顺序读写函数介绍5.1.1 fputc与fgetc5.1.2 fputs与fgets5.1.3 fprintf与fscanf5.1.4 fread与fwrite 5.2 对比一组函数 6. 文件的随机读写6.1 fseek6.2 ftell6.3 rewind 7. 文件读取结束的判定7.1 被错误使用的feof 8.…

Python爬虫实战:利用代理IP批量下载哔哩哔哩美女视频

文章 目录 1.前言2.爬取目标3.准备工作3.1 环境安装3.2 代理免费获取 四、爬虫实战分析4.1 翻页分析4.2 获取视频跳转链接4.3 下载视频4.4 视频音频合并4.5 完整源码 五、总结 1.前言 粉丝们(lsp)期待已久的Python批量下载哔哩哔哩美女视频教程它终于来…

Java中File文件和IO流

File文件和IO流 概述 FIle是java.io.下面的包,用于代表当前操作系统的文件 可以获文件信息,判断文件类型,创建删除文件夹 注意:File只能对文件本身进行操作,不能读写文件里面存储的数据 …

Docker三分钟部署ElasticSearch平替MeiliSearch轻量级搜索引擎

👩🏽‍💻个人主页:阿木木AEcru (更多精彩内容可进入主页观看) 🔥 系列专栏:《Docker容器化部署系列》 《Java每日面筋》 💹每一次技术突破,都是对自我能力的挑战和超越。 目录 一、 …

基于web的摩托车销售系统的设计与实现-计算机毕业设计源码031706

摘 要 信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为难以攻克的课题。针对摩托车销售系统等问题,对摩托车…

手把手教你使用kimi创建流程图【实践篇】

学境思源,一键生成论文初稿: AcademicIdeas - 学境思源AI论文写作 引言 在昨日的文章中,我们介绍了如何使用Kimi生成论文中的流程图。今天,我们将更进一步,通过实践案例来展示Kimi在生成流程图方面的应用。这不仅将加…

火绒被骂惨,良心居然也翻车?剩下3款软件还被误认为外国人开发

万万没想到,公认的国产良心软件“火绒”,居然也翻车,很多网友对其大失所望,甚至忍不住吐槽让他不要砸了自己的招牌。 事情的起因是这样的,火绒推出应用商店,并于正式公测,这是要逐渐走向全家桶的…

淘宝店铺商家订单API-接入ERP,多平台订单同步的利器

淘宝开放平台给商家们提供了丰富的API,以方便大家扩展业务流程。但是需要调用这些API,商家们要提交资质审核,审核条件也是很严格的。第三方数据公司的存在可以为大家解决这个问题。 custom-自定义API操作 请求参数 请求参数:ap…

联发科MT6775(Helio P70)_MTK6775处理器规格参数_处理器资料

联发科MT6775(Helio P70)采用了台积电12nm工艺制程八核处理器,由4颗 Arm Cortex-A73 2.1GHz 4颗Arm Cortex-A53 2.0GHz组成。其GPU为ARM Mali-G72 MP3,运行时高达900MHz,比上一代Helio P60效能提升了13%。 值得注意的是,联发科MT…

java打印金字塔paremid和空心金字塔

java打印金字塔 首先确定每行打印几个空格,在确定每行打印几个* 设总层数为layers,当前层数为i。 则每行打印空格数layers-i,每行打印星号数2*i-1 import java.util.Scanner;public class Paremid{public static void main(String[] args) …

搜索引擎的“道”

目录 1. 网页下载(解决有没有的问题) 1.1 遍历算法 1.1.1 广度优先搜索 1.1.2 深度优先搜索 1.2 网络爬虫 1.2.1 用BFS 还是DFS? 1.2.2 URL提取 1.2.3 哈希表存储URL下载记录 2. 索引构建(解决快不快的问题) 2.1 布尔…

AI作画Prompt不会写?Amazon Bedrock Claude3.5来帮忙

最新上线的Claude3.5 Sonnet按照官方介绍的数据来看,在多方面超越了CPT-4o,是迄今为止最智能的模型。 而跟上一个版本相比,速度是Claude 3 Opus的两倍,成本只有其五分之一。 Claude3.5 Sonnet不仅擅长解释图表、图形或者从不完…

AI赋能影视解说:Rap说唱玩法拆解!

在影视解说的领域,竞争一直非常激烈,众多创作者纷纷涌入这个热门的赛道。为了在众多声音中脱颖而出,创新成为了关键。最近,一种结合AI技术的解说方式——Rap说唱解说,以其新颖的形式和高效的创作过程,赢得了…