在 TensorFlow 中实现简单的自动编码器

深度学习中的自动编码器:TensorFlow示例 什么是自动编码器?   自动编码器是重建输入的绝佳工具。简单来说,机器就是一个图像,可以生成一个密切相关的图片。这种神经网络中的输入是未标记的,这意味着网络能够在没有监督的情况下进行学习。更准确地说,输入由网络编码,仅关注最关键的特征。这是自动编码器因降维而流行的原因之一。此外,自动编码器可用于生成生成学习模型。例如,神经网络可以用一组面部训练,然后可以产生新的面部。 Autoencoder如何工... 阅读详情

作者:chen_h
微信号 & QQ:862251340
微信公众号:coderpai


生成对抗网络(GAN)最近已经成为了一个非常受欢迎的网络架构,最初这个网络架构的流行是因为通过模仿著名画家的艺术风格,但最近通过 DeepFake ,它可以无缝的替换视频中的面部表情,同时保持高质量的输出。

GAN 中最重要的一个组成部分是自动编码器。自动编码器是具有两个部分的神经网络架构:输入编码器和输出解码器,并且数据相同。起初,这可能听起来令人困惑和无用,但是通过训练神经网络来复制输入数据。我们真正做的是让网络学习数据的"压缩版本”,就是把数据进行压缩,然后我们再通过解压来还原输入的数据。用行话来说,这种转换是找到我们数据的 “潜在空间“ 表示。

在这篇文章中,我们将解释如何在 Python 中实现自动编码器,以及如何在时间中使用它来编码和解码数据。你可以先安装一下 Python 3 的环境,以及 TensorFlow 的环境,因为后续我们会采用代码的形式来进行学习。

对于一个自动编码器来说,如果是好的编码器,它必须满足以下四个要求:

  • 压缩数据,即潜在数据维度 < 输入数据;
  • 需要很好的复制输入数据,保留原始大部分数据特征;
  • 允许我们很容易的获得编码层数据;
  • 允许我们很容易的进行解码操作,还原输入数据;

在这里插入图片描述

我将向你展示两种表示方法,利用底层接口和高层接口来实现这个功能。底层接口就是直接采用 TensorFlow API 来进行编写,高层接口我们会利用 keras API 来实现我们的功能。如果你想要更多的了解底层模型逻辑,我还是建议你使用 TensorFlow API 来进行实现。

这篇文章中,我们将直接使用 TensorFlow core API 来进行操作,这需要一些必备知识。我们先来简单解释三个基本概念:tf.placeholder,tf.Variable 和 tf.Tensor 。

tf.placeholder 只是一个变量,它将是模型的输入,但不会模型本身的一部分。它基本上允许我们告诉模型它应该预期某个类型和某个维度的变量。这与强类型语言中的变量声明非常类似。

tf.Variable 与其他编程语言中的变量几乎相同,其声明类似于大多数强类型语言的声明。例如,网络的权重是tf.Variables。

tf.Tensor 稍微复杂一点。在我们的例子中,我们可以将它视为包含操作的符号表示的对象。例如,给定占位符 X 和权重变量 W ,矩阵乘法W*X的一般表示是张量,但是给定特定值 X 和 W 的结果不是张量。

既然已经进行了介绍,那么构建网络的过程就会相当简单了,但可能会有点迂回。我们将使用 MNIST数据集,该数据集是存储为 28*28 图片的手写数字的数据集。我们将 D 定义为输入数据,在这种情况下,将图像尺寸拉长为 784 维度,并且把压缩后的编码长度设置为 128 ,用 d 来表示,然后忘了具有以下尺寸的3层网络:D -> d -> D 。

我们现在将实现一个简单的自动编码器类,并且进行逐层解释。

首先,我们需要一个占位符来输入数据:

self.X = tf.placeholder(tf.float32, shape=(None, D))

然后,我们通过定义第一层权重(带有额外偏差)作为变量来开始编码阶段:

self.W1 = tf.Variable(tf.random_normal(shape=(D,d)))
self.b1 = tf.Variable(np.zeros(d).astype(np.float32))

请注意,权重的维度是 D*d,从较高维度到最低维度。接下来,我们为编码层创建张量,作为输入和权重之间的乘法,并且加上偏差,所有这些都由 relu 激活函数激活。

self.Z = tf.nn.relu( tf.matmul(self.X, self.W1) + self.b1 )

然后我们进入解码阶段,这与编码相同,但是从较低维度到较高维度扩展。

self.W2 = tf.Variable(tf.random_normal(shape=(d,D)))
self.b2 = tf.Variable(np.zeros(D).astype(np.float32))

最后,我们定义输出张量,自己预测变量。选择 sigmoid 激活函数是为了简单,因为它总是在区间 [0,1] 中,这与输入的归一化图像素的范围相同。

logits = tf.matmul(self.Z, self.W2) + self.b2 
self.X_hat = tf.nn.sigmoid(logits)

这就是一整个网络!我们只需要一个损失函数和一个优化器,我们就可以很开心的开始训练。选择的损失函数是 sigmoid交叉熵,这意味着我们将问题视为像素级的二元分类,这对于黑白图像的数据集是有意义的。

关于优化,这是非常常见的一种方式,也许我们应该创建一个模型,在出现问题时输出哪个优化器是最好的??

self.cost = tf.reduce_sum(
    tf.nn.sigmoid_cross_entropy_with_logits(
        # Expected result (a.k.a. itself for autoencoder)
        labels=self.X,
        logits=logits
    )
)
        
self.optimizer = tf.train.RMSPropOptimizer(learning_rate=0.005).minimize(self.cost)

最后一个稍微技术性的术语:session(会话),这是一个作为上下文管理器和后端连接器的对象,需要初始化:

self.init_op = tf.global_variables_initializer()        
if(self.sess == None):
            self.sess = tf.Session()
self.sess = tf.get_default_session()
self.sess.run(self.init_op)

现在我们需要训练模型,但是不用担心,这在 TensorFlow 中非常简单:

# Prepare the batches 
epochs = 10 
batch_size = 64       
n_batches = len(X) // bs
        
for i in range(epochs):
    # Permute the input data
    X_perm = np.random.permutation(X)
    for j in range(n_batches):
        # Load data for current batch
        batch = X_perm[j*batch_size:(j+1)*batch_size]
        # Run the batch training!
        _, costs = self.sess.run((self.optimizer, self.cost),
                                    feed_dict={self.X: batch})

最后一行真的是唯一有趣的一行。它告诉 TensorFlow 使用批处理作为占位符输入 X 运行训练步骤,并使用给定的优化器和损失函数来执行权重更新。

让我们看看这个网络输出的一些例子:

在这里插入图片描述

现在这一切看起来都非常完美,但目前我们只编写了一个可以重建自己的网络。那么,我们怎样才能真正使用自动编码器? 我们需要定义另外两个操作,编码和解码。这实际上非常简单:

def encode(self, X):
    return self.sess.run(self.Z, feed_dict={self.X: X})

在这里我们告诉 TensorFlow 来计算 Z,如果你回头看,你会发现是代表编码的张量。解码过程也非常简单:

def decode(self, Z):
    return self.sess.run(self.X_hat, feed_dict={self.Z: Z})

这一次,我们明确的给出了通过 Z 进行编码的张量流,我们之前使用编码函数计算过,我们告诉它计算预测输出 X_hat 。

现在你可以看到,即使是一个简单的网络,但是代码也非常长。当然我们可以对每个权重进行参数化并使用列表,而不是单个变量。但是当我们需要快速或者自动的测试多个结构时会发生什么?这会变得非常复杂。但是不用担心,我们采用高层 API 可以轻松的完成所有这些工作!这个接口就是 keras。

所有网络定义,损失,优化和训练拟合都可以用几行代码搞定:

t_model = Sequential()
t_model.add(Dense(256, input_shape=(784,)))
t_model.add(Dense(128, name='bottleneck'))
t_model.add(Dense(784, activation=tf.nn.sigmoid))
t_model.compile(optimizer=tf.train.AdamOptimizer(0.001),
              loss=tf.losses.sigmoid_cross_entropy)
t_model.fit(x, x, batch_size=32, epochs=10)

就是这样,我们有一个训练好的网络。生活多美好啊

但是整个编码和解码怎么样呢?是的,看起来有点棘手,但是不要担心,人家帮我们解决了。我们需要一些东西:

  • 一个会话变量;
  • 输入张量,用于制定 feed_dict 参数中的输入;
  • 编码的张量,用于检索编码,并用作解码 feed_dict 参数的输入;
  • 解码的张量,用来检索解码值;

胡言乱语一下

我们通过从感兴趣的层获得所需的张量来实现这一目标!请注意,通过命名编码层,我们可以很容易的进行检索。

session = tf.get_default_session()
if(self.sess == None):
    self.sess = tf.Session()
# Get input tensor
def get_input_tensor(model):
    return model.layers[0].input
# get bottleneck tensor
def get_encode_tensor(model):
    return model.get_layer(name='encode').output
# Get output tensor
def get_output_tensor(model):
    return model.layers[-1].output

现在给出一个训练好的模型,你可以通过以下获取所需的所有变量:

t_input = get_input_tensor(t_model)
t_enc = get_bottleneck_tensor(t_model)
t_dec = get_output_tensor(t_model)
session = tf.get_default_session()
# enc will store the actual encoded values of x
enc = session.run(t_enc, feed_dict={t_input:x})
# dec will store the actual decoded values of enc
dec = session.run(t_dec, feed_dict={t_enc:enc})

完整版代码,请点击这里

原文链接,请点击这里

自动编码器:揭开数据压缩和重建的奥秘 你有没有想过数据是如何压缩、传输和重建的?自动编码器是人工智能世界中一个引人入胜的概念,它正是实现这一目标的。想象一下,一个神奇的盒子,它接受复杂的信息,压缩成简化的形式,然后把它恢复到原来的形状——就像科幻电影中的神奇运输车一样。在本文中,我们将揭开自动编码器的奥秘,并提供一个简单的分步指南来从头开始编写自动编码器。 阅读详情

相关推荐

VAE在图像合成中的应用:实现虚拟现实和增强现实

作者:禅与计算机程序设计艺术 1.简介 自动编码器(AutoEncoder)是一种无监督的机器学习模型,它能够对输入数据进行压缩和解压,以达到降维、重建数据的目的。最近很热门的一个研究领域是生成对抗网络(Generative Adversarial Networks),其基于两个相互博弈的神经网络,一个

AI天才研究院 2005

TensorFlow实战之实现自编码器过程

      本文根据最近学习TensorFlow书籍网络文章的情况,特将一些学习心得做了总结,详情如下.如有不当之处,请各位大拿多多指点,在此谢过。 一、相关概念 1、稀疏性(Sparsity)及稀疏编码(Sparse Coding)          Sparsity 是当今机器学习领域中的一个重要话题。           Sparsity 的最重要的“客户”大概要属 high dim...

蓝色之旅的博客 5707

使用 Tensorflow了解自动编码器 – 去噪自动编码器含实现源码

本文将了解深度学习中的自动编码器。我们将以MNIST手写数字数据集为例展示使用去噪自动编码器的实际实现。此外,我们正在分享这个想法在 Tensorflow 中的实现。

DT程序员的博客 407

1TensorFlow实现自编码器-1.5 TensorFlow实现单隐层自编码器--计算图设计

#1.5 TensorFlow实现单隐层自编码器--计算图设计import numpy as np import sklearn.preprocessing as prep import tensorflow as tf import matplotlib.pyplot as plt from tensorflow.examples.tutorials.mnist import input_data

hongxue8888的博客 540

【深度学习】在 MNIST实现自动编码器实践教程

自动编码器是一种无监督学习的神经网络模型,主要用于降维或特征提取。常见的自动编码器包括基本的单层自动编码器、深度自动编码器、卷积自动编码器和变分自动编码器等。

gongdiwudu的专栏 7816

报错:subprocess.CalledProcessError: Command ‘[‘where‘, ‘cl‘]‘ returned non-zero exit status 1.

右键此电脑--属性--高级系统设置--环境变量--系统变量--找到Path。Enterprise是企业版,如果你是社区版就找Community。2.安装的时候,c++桌面那个需要勾选。

2301_77554343的博客 1507

使用Tensorflow搭建自编码器(Autoencoder)

自编码器是一种数据压缩算法,其中数据的压缩和解压缩函数是数据相关的、从样本中训练而来的。大部分自编码器中,压缩和解压缩的函数是通过神经网络实现的。 1. 使用卷积神经网络搭建自编码器 导入MNIST数据集(灰度图,像素范围0~1) import numpy as np import tensorflow as tf import matplotlib....

weixin_34353714的博客 734

OpenBCI脑电数据处理实战:用MNE库从Raw对象到可视化分析全流程

本文提供了使用MNE-Python库处理OpenBCI脑电数据的完整实战指南。从通过BrainFlow库获取原始数据流、创建核心的Raw对象,到进行工频滤波、带通滤波等关键预处理步骤,最后实现时域信号、功率谱密度及地形图等多种专业可视化分析,手把手教你完成脑机接口数据处理的全流程。

gin88的博客 371

TensorFlow教程:TensorFlow实现自编码器

TensorFlow教程:TensorFlow实现自编码器         TensorFlow是一个非常强大的用来做大规模数值计算的库。其所擅长的任务之一就是实现以及训练深度神经网络。 实现自编码器和实现一个单隐含层的神经网络差不多,只不过在数据输入时做了标准化,并加上一个高斯噪声。         在本教程中,我将结合自己的亲身体会,介绍并构建一个TensorFlow自编码器(Au

Zhenguo_Yan的博客 1003

【gateway nc adapter虚拟网卡 win11 联想】问题的解决

由于需要登录公司内网,于是启用奇安信VPN。但启动后报出网关未连接的问题,于是我检查了我的网络适配器,并尝试解决,以下给出几种我实践过程中的行动,并附带最后成功的解决方法。

m0_73602417的博客 6559

unity打包流程整理-Windows/Mac/Linux平台

1.Platform(平台)功能: 选择目标构建的目标平台选项PC, Mac & Linux Standalone: 适用于 Windows、Mac 和 Linux 平台2.Target Platform(目标平台)功能: 选择具体的操作系统版本选项Windows: 针对 Windows 操作系统Mac: 针对 macOS 操作系统Linux: 针对 Linux 操作系统3.Architecture(架构)功能: 选择应用程序的目标处理器架构选项x86: 针对 32 位系统。

weixin_42333247的博客 5141

seq2seq通俗理解----编码器和解码器(TensorFlow实现)

1. 什么是seq2seq 在⾃然语⾔处理的很多应⽤中,输⼊和输出都可以是不定⻓序列。以机器翻译为例,输⼊可以是⼀段不定⻓的英语⽂本序列...

1332

YOLO26涨点改进| CVPR 2026 | 独家创新首发、特征融合改进篇 | 引入 LFSB 差分双维注意融合模块,通过交替特征融合与分离策略,能够精准区分目标特征,顶会助力YOLO26有效涨点

本文提出LSFB差分双维注意融合模块,用于改进YOLO26目标检测模型。该模块通过融合-分离交替策略和差分注意力机制,有效提升模型在复杂场景下的特征分离能力,特别是在处理重叠物体或反射干扰时表现优异。LSFB采用双向投影、双维注意力计算和跨流减法算子,实现特征共享与独立提取的平衡。实验表明,该模块能显著减少特征混淆,提高检测精度和鲁棒性。文章还详细介绍了模块实现的核心代码、YAML配置文件修改方法以及三种改进方案,为YOLO26模型性能提升提供了创新解决方案。

Ai缝合怪、助力小伙伴高效发论文 326

自动编码器(AE)生成Mnist手写数字集,基于tensorflow和keras实现

基于tensorflow和keras实现自动编码器(AE)生成Mnist手写数字集

qq_43799400的博客 1625

“华为杯”研究生数学建模竞赛2017年-【华为杯】B题:面向下一代光通信的 VCSEL 激光器仿真模型

得出以下主要结论:在相同的偏置电流条件下,随着温度的升高,带宽的峰值向。在相同的温度下,随着电流的增大,带宽的峰值越小且曲线由波峰形状。方案,包括可能的数学公式,不同温度和偏置电流下的带宽响应曲线,并与问题。线,得出以下主要结论:在相同的偏置电流条件下,随着温度的升高,带宽的峰。在相同的温度下,随着电流的增大,带宽的峰值越小且曲线由波峰形状逐渐变得。得的激光器特性曲线和模型中仿真得到的特性曲线,之后,可以将两组曲线的差。说明的是,由于数值优化算法的成功与否很大程度上依赖于初始参数的猜测,参。

getusushu的博客 99

【华为OD机试】创建二叉树(python, java, c++, js)

请按下列描达构建一颗二叉树,并返回该树的根节点: 1、先创建值为-1的根结点,根节点在第0层; 2、然后根据operations依次添加节点: operations[i] = [height, index] 表示对第 height 层的第index 个节点node, 添加值为i 的子节点: 若node 无「左子节点」。则添加左子节点; 若node 有「左子节点」但无「右子节点」,则添加右子节点: 否则不作任何处理。 height、index 均从0开始计数;index 指所在层的创建顺序。

A_D_I_D_A_S的博客 188

自动编码器与深度学习的未来趋势:预测与展望

1.背景介绍 自动编码器(Autoencoders)是一种深度学习算法,它可以用于降维、数据压缩、生成新的数据等多种应用。自动编码器的核心思想是通过一个神经网络模型,将输入的数据编码成一个更小的表示,然后再通过另一个神经网络模型解码成原始的数据或者一个类似的数据。自动编码器的研究和应用在过去几年中得到了广泛的关注和发展,尤其是在图像和文本数据处理领域。 在本文中,我们将讨论自动编码器的核心概念...

AI天才研究院 667

YOLOv11改进策略【Neck】| arXiv 2025 分层多头注意力HMHA 子空间拆分提多样 + 通道重排降冗余,强化目标检测精度

HMHA(Hierarchical Multi-Head Attention,分层多头注意力)旨在解决传统多头注意力(MHA)在图像恢复任务中的核心缺陷——特征冗余。传统MHA将通道均匀拆分给各个头,导致不同头学习的子空间信息相似,进而出现多头关注同一区域、忽略退化区域修复的问题,限制了模型的特征表达能力。HMHA通过“分层子空间拆分+通道重排序”策略,让每个头学习差异化、互补的上下文特征,从根源上缓解冗余,提升图像恢复任务中对复杂退化场景的特征捕捉能力。

Limiiiing的博客 779

实现高效的VAE模型推理:优化与加速技巧

1.背景介绍 变分自动编码器(VAE)是一种深度学习模型,它结合了自动编码器(Autoencoder)和生成对抗网络(GAN)的优点,可以用于无监督学习和生成模型。VAE可以用于图像、文本和其他类型的数据的表示学习、生成和压缩。然而,VAE模型的推理效率通常较低,这限制了其在实际应用中的性能。因此,优化和加速VAE模型推理变得至关重要。 在这篇文章中,我们将讨论如何实现高效的VAE模型推理,包...

AI天才研究院 1244

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

简单易懂的自动编码器

作者:叶虎 编辑:田旭 引言 自动编码器是一种无监督的神经网络模型,它可以学习到输入数据的隐含特征,这称为编码(coding),同时用学习到的新特征可以重构出原始输入数据,称之为解码(decoding)。从直观上来看,自动编码器可以用于特征降维,类似主成分分析PCA,但是其相比PCA其性能更强,这是由于神经网络模型可以提取更有效的新特征。除了进行特征降维,

燕哥带你学算法 2万+

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

深度学习 —— Auto Encoder(一)

Auto Encoder 自编码器

magic_cxher的博客 443

Tensorflow实现自动编码器

最近在帮助师兄完成毕设,涉及到了tensorflow和机器学习的知识,下面的代码描述了自动编码器编码解码的过程;同时,实现了模型的保存和数据替换的过程。首先,利用true.txt中的数据进行模型的训练,然后在利用false的数据进行测试,比较两次cost的差值。具体代码如下: &quot;&quot;&quot; Created on Wed Jan 23 12:29:56 2019 @author: 肖俊怡 &quot;&quot;&quot; ..

xiaoxiao的博客 287

(四)tensorflow2.0 - 实战稀疏自动编码器SAE

前文已经介绍完了tensorflow2.0自定义layer、model、loss function,本文将结合前述知识,搭建一个稀疏自动编码器SAE。 先简单介绍稀疏自动编码器SAE,其架构如下图所示(图源网络,侵删),三层结构,输出层应尽量和输入层接近,其重点在于中间的隐藏层,隐藏层将数据进行了重新编码,这样做的目的是获得输入数据更好的数据表示。在普通自动编码器中,往往要求隐藏层元素个数要比输...

吟游诗人——吟唱生命的不朽 6375

使用TensorFlow镜像构建自动编码器用于异常检测

通过官方TensorFlow Docker镜像构建自动编码器,实现工业场景下的无监督异常检测。该方案解决了环境不一致问题,支持GPU加速与容器化部署,适用于振动信号、网络流量等高维时序数据的实时监控,显著降低AI落地门槛。

weixin_34640289的博客 608

tensorflow自编码_去噪自动编码器— Tensorflow

tensorflow自编码 什么是自动编码器? (What are Autoencoders?) Autoencoders are an unsupervised learning technique in which we leverage neural networks for the task of representation learning. Specifically, we’ll d...

weixin_26726011的博客 391
上一篇: (二)bagging 方法
下一篇: (三)使用Python进行交易的随机森林算法
coderpai
博客等级 码龄10年 1082粉丝 469原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值