入门学习编码器与自编码器1----包括详细的理论讲解与详细的python程序代码,小白直接看懂!!!纯干货

news2024/10/5 18:32:54

在这里插入图片描述

文章目录

  • 前言--为什么要学习`编码器`和`自编码器`?
  • 一、编码器与自编码器究竟是什么?
  • 二、下面是一个简单的Python实现自编码器的示例
  • 三、程序`运行结果`
  • 四、查看模型结构
  • 总结


前言–为什么要学习编码器自编码器

  1. 学习编码器和自编码器可以帮助我们理解深度学习中表示学习这一主题。编码器是一种神经网络,可以将原始输入数据压缩到较低维度的表示中。这个过程类似于在高维输入空间中找到一个低维嵌入空间,其中每个点对应着输入空间中的一个数据样本。通过使用编码器,我们可以发现数据中的潜在特征,这些特征可以用于后续的分类、聚类、生成等任务。
  2. 自编码器是一种无监督学习算法,它可以在不需要标记数据的情况下,学习数据的特征表示。自编码器使用编码器和解码器将数据从原始输入空间映射到一个低维嵌入空间,然后将其解码为重构数据。自编码器可以被用于许多应用领域,如图像压缩、去噪自编码器、图像生成等。
  3. 自编码器和编码器都是深度学习中的基础模型,可以帮助我们更好地理解深度神经网络中的表示学习和特征提取。可以通过自学习实现无监督特征提取,其结果相比其它无监督和监督学习方法具有更好可解释性,在模型已完成训练后,特征值也更为稳定和一般化。

一、编码器与自编码器究竟是什么?

编码器(encoder)是一种模型或算法,用于将输入数据(如图像、文本或音频)转换为一组表示(编码)的过程。编码器可以是线性的,也可以是非线性的,并且可以使用不同的技术进行训练和优化,例如深度学习、卷积神经网络和循环神经网络等。

自编码器(autoencoder)是一种特殊类型的编码器,可以自动学习数据的表示并能够进行重构。自编码器由两部分组成:编码器和解码器。编码器将输入数据压缩为低维表示,而解码器将低维表示转换回原始数据。通过使用自编码器,可以获得原始数据的压缩版本,这对于数据降维或特征提取非常有用。

二、下面是一个简单的Python实现自编码器的示例

# 导入库
import tensorflow as tf
from tensorflow.keras.layers import Input, Dense
from tensorflow.keras.models import Model
# 导入MNIST数据集
from tensorflow.keras.datasets import mnist
import numpy as np

# 加载MNIST数据集
(x_train, _), (x_test, _) = mnist.load_data()

# 将数据转换为浮点数并归一化
x_train = x_train.astype('float32') / 255.
x_test = x_test.astype('float32') / 255.

# 将数据从二维数组转换为一维向量
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:])))

# 定义编码器和解码器
encoding_dim = 32
input_img = Input(shape=(784,))
encoded = Dense(encoding_dim, activation='relu')(input_img)
decoded = Dense(784, activation='sigmoid')(encoded)

# 定义自编码器模型
autoencoder = Model(input_img, decoded)

# 进行编译和训练
autoencoder.compile(optimizer='adam', loss='binary_crossentropy')
autoencoder.fit(x_train, x_train, epochs=1, batch_size=256, shuffle=True)

# 进行推断
# 定义编码器模型
encoder = Model(input_img, encoded)
encoded_imgs = encoder.predict(x_test)

三、程序运行结果

Train on 60000 samples

  256/60000 [..............................] - ETA: 1:32 - loss: 0.6957
 3840/60000 [>.............................] - ETA: 6s - loss: 0.6516  
 7680/60000 [==>...........................] - ETA: 3s - loss: 0.5460
11264/60000 [====>.........................] - ETA: 2s - loss: 0.4705
14848/60000 [======>.......................] - ETA: 1s - loss: 0.4247
18432/60000 [========>.....................] - ETA: 1s - loss: 0.3952
22272/60000 [==========>...................] - ETA: 1s - loss: 0.3721
26112/60000 [============>.................] - ETA: 0s - loss: 0.3546
29696/60000 [=============>................] - ETA: 0s - loss: 0.3414
33280/60000 [===============>..............] - ETA: 0s - loss: 0.3299
36864/60000 [=================>............] - ETA: 0s - loss: 0.3199
40448/60000 [===================>..........] - ETA: 0s - loss: 0.3111
44032/60000 [=====================>........] - ETA: 0s - loss: 0.3032
47616/60000 [======================>.......] - ETA: 0s - loss: 0.2961
51456/60000 [========================>.....] - ETA: 0s - loss: 0.2892
55040/60000 [==========================>...] - ETA: 0s - loss: 0.2833
58880/60000 [============================>.] - ETA: 0s - loss: 0.2776
60000/60000 [==============================] - 1s 21us/sample - loss: 0.2759

Process finished with exit code 0

四、查看模型结构

autoencoder.summary()
Model: "model"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
input_1 (InputLayer)         [(None, 784)]             0         
_________________________________________________________________
dense (Dense)                (None, 32)                25120     
_________________________________________________________________
dense_1 (Dense)              (None, 784)               25872     
=================================================================
Total params: 50,992
Trainable params: 50,992
Non-trainable params: 0
_________________________________________________________________

总结

  1. 在上面的示例中,我们使用了TensorFlow库,定义了一个输入图像形状为28x28的autoencoder模型。编码器和解码器都是基本的Dense,编码器有一个激活函数relu,解码器有一个sigmoid激活函数。在编译和训练模型后,我们将测试数据输入到编码器中进行推理,然后使用解码器进行重构并获得原始图像的形状。
  2. 在上面的示例中,我们加载了MNIST数据集,将数据转换为浮点数并归一化。然后,我们将每个28x28像素的图像转换为大小为784的一维向量,并将其保存在x_train和x_test变量中。这些变量现在可以在训练自编码器模型时使用。
  3. 在上面的示例中,我们定义了一个新的Model对象,它使用了与原始自编码器模型相同的输入图像。但是,我们仅限在编码器(即输入层和编码层之间的所有层)中定义了模型,并使用激活函数relu来获得低维特征表示。我们可以使用这个编码器模型来对新数据进行编码,并获得低维特征表示。
  4. 在自编码器的示例中,我们使用训练好的自编码器模型(autoencoder)和前面定义的编码器模型(encoder)和解码器模型(decoder)对测试数据进行推断。这个过程的目的是通过已训练好的模型来重构和预测测试集中的数据,并检查模型是否已经有效地学习数据的表示和特征。具体来说,在推断步骤中,我们将测试数据输入编码器模型中,以获取测试数据的低维特征表示。然后,我们使用解码器模型将这些低维特征表示转换为原始图像。这样,我们就可以获得自编码器模型重构的测试图像。通过计算自编码器模型生成的图像与原始测试图像之间的误差,我们可以评估模型的性能。

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

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

相关文章

【数据分享】1929-2022年全球站点的逐月平均风速数据(Shp\Excel\12000个站点)

气象数据是在各项研究中都经常使用的数据,气象指标包括气温、风速、降水、能见度等指标,说到气象数据,最详细的气象数据是具体到气象监测站点的数据! 对于具体到监测站点的气象数据,之前我们分享过1929-2022年全球气象…

「你将购买的是虚拟内容服务,购买后不支持退订」,真的合理么?

编辑导语:你是否也有见过相似提示,即虚拟内容服务购买之后不予退款?那么你有想过,在这一规定背后,其制约因素都有什么吗?这一规定是合理的吗?用户若真的有退款需求,产品上是否能实现…

卷积计算加速方法--分块卷积1

文章目录 1、大尺寸卷积存在的问题2、分块卷积overlap产生的来源3、分块卷积overlap的计算4、结论及加速效果 1、大尺寸卷积存在的问题 当卷积的输入太大导致内存不够用时,考虑将一大块卷积分成多个小块分别进行卷积,相当于将原始输入分成几个小的输入经…

【C++】C++11:线程库和包装器

C11最后一篇文章 文章目录 前言一、线程库二、包装器和绑定总结 前言 上一篇文章中我们详细讲解了lambda表达式的使用,我们今天所用的线程相关的知识会大量的用到lambda表达式,所以对lambda表达式还模糊不清的可以先将上一篇文章看明白。 一、线程库 在…

域名解析详解

域名解析 记录类型: 提示: 将域名指向云服务器,选择 A; 将域名指向另一个域名,选择 CNAME; 建立邮箱选择 MX,根据邮箱服务商提供的 MX 记录填写。 记录类型解释A用来指定域名的 IPv4 地址&…

燃气管网监测设备:燃气管网压力在线监测

燃气作为一种重要的能源,广泛用于家庭、工业和商业领域。然而,燃气管网系统在运输和分配过程中可能面临压力波动、管道老化、外部破坏等问题,可能导致燃气泄漏和事故发生。燃气管网压力在线监测是保障燃气管网安全运营的重要手段之一。通过燃…

Linux系统之部署Homepage个人导航页

Linux系统之部署Homepage个人导航页 一、Homepage介绍1.1 Homepage简介1.2 Homepage主要特点 二、本地环境介绍2.1 本地环境规划2.2 本次实践介绍 三、检查本地环境3.1 检查本地操作系统版本3.2 检查系统内核版本3.3 检查系统是否安装Node.js 四、部署Node.js 环境4.1 下载Node…

感谢ChatGPT,救了我狗的命!

前一段时间,国外一位小哥哥在推特上发布了一条消息,声称GPT-4拯救了自家狗狗的性命。 这是怎么一回事呢? 这个小哥哥养了一只两岁的边境牧羊犬,这只牧羊犬被诊断出患有蜱传疾病,这属于一种细菌性传染病。 虽然小哥哥一…

30分钟吃掉DQN算法

表格型方法存储的状态数量有限,当面对围棋或机器人控制这类有数不清的状态的环境时,表格型方法在存储和查找效率上都受局限,DQN的提出解决了这一局限,使用神经网络来近似替代Q表格。 本质上DQN还是一个Q-learning算法,…

金九银十预备秋招: 大厂面试必考点及 Java 面试框架知识点整理

Java 面试 “金九银十”这个字眼对于程序员应该是再熟悉不过的了,每年的金九银十都会有很多程序员找工作、跳槽等一系列的安排。说实话,面试中 7 分靠能力,3 分靠技能;在刚开始的时候介绍项目都是技能中的重中之重,它…

龙膜公益“聚光行动”再起航 为云南山区小学援建绿色电脑教室

中国,上海——近日,全球汽车膜品牌龙膜的公益活动“为山区学校援建绿色电脑教室”在云南泸西县再度起航。为当地的“阿盈里小学”和“歹鲁小学”添置了2间电脑教室,配备了82台再生电脑,为600多名学生提供了数字化设备的使用机会&a…

Android Hilt:强大的依赖注入框架,高级传参解个耦?

作者:J船长 一、Hilt 干依赖注入的 Hilt是干嘛的 Hilt,一个依赖注入框架,谷歌搞出来的,基于Dagger,但是更加简洁易用。 什么是依赖注入 (Dependency Injection) 依赖注入是一种设计模式。主…

高校劳动积分小程序/基于微信小程序的高校劳动积分系统

摘 要 随着信息技术互联网和小程序的飞速发展,人类已进入全新信息化时代,传统管理技术已无法高效,便捷地管理信息。为了迎合时代需求,优化管理效率,各种各样的微信小程序应运而生,各行各业相继进入信息管理…

系统架构设计师-系统工程与信息系统基础(1)

一、系统工程概念 【系统工程】是一种组织管理技术。 【系统工程】是为了更好的实现系统的目的,对系统的组成要素、组成结构、信息流、控制机构进行分析研究的科学方法。 【系统工程】从整体出发、从系统观念出发、以求【整体最优】 【系统工程】利用计算机作为…

开放式耳机会不会吵到别人?2023年开放式耳机科普!

在了解开放式耳机会不会吵到别人之前,我们先了解下开放式耳机的基本知识! 开放式耳机是一种不入耳,没有封闭耳朵的蓝牙耳机,可以听歌的同时接收来自外界声音,安全性高,也减少长期佩戴耳机带来的负担&#…

2023火爆的11门编程语言

2023火爆的11门编程语言 对于我个人来说没有语言偏好,根据不同的应用领域和需求,不同的编程语言都有其独特的优势和适用性。无论使用何种语言只要能更好的实现需求,解决痛点问题,就是好语言。 那么各种语言应用的场景解决了哪些…

项目管理专业人员能力评价CSPM与项目管理PMP对应关系

2021年10月,中共中央、国务院发布的《国家标准化发展纲要》明确提出构建多层次从业人员培养培训体系,开展专业人才培养培训和国家质量基础设施综合教育。建立健全人才的职业能力评价和激励机制。由中国标准化协会(CAS)组织开展的项…

Solon 成为信通院可信开源社区、可信开源项目

自2021年9月17日成立以来,可信开源社区共同体共有五批新成员加入。在4月21日“OSCAR开源生态建设论坛”上,可信开源社区共同体又迎来2位正式成员和6位预备成员,Solon 为其一(图之右下角): 图片引用自CAICT可…

开放式耳机和封闭式耳机的区别?开放式耳机到底有哪些优缺点?

开放式耳机从字面意思可以理解为:开放耳朵,不需要入耳就可以听见声音的耳机,所以它和封闭式耳机的最大区别就是不入耳。这种耳机最大的优点就是不压迫不封闭耳道,而且在听耳机音的同时能够及时注意到周围环境的声音,从…

轻量级日志系统Loki——安装配置

关注“云计算就该这么学”微信公众号,搜索“001”,即可获取氪肝整理的154页Linux学习笔记。 Loki对标EFK/ELK,由于其轻量的设计,备受欢迎,Loki相比EFK/ELK,它不对原始日志进行索引,只对日志的标…