AI学习笔记——Autoencoders(自编码器)

简介: Autoencoder 的基本概念之前的文章介绍过机器学习中的监督学习和非监督学习,其中非监督学习简单来说就是学习人类没有标记过的数据。对于没有标记的数据最常见的应用就是通过聚类(Clustering)的方式将数据进行分类。
Autoencoder 的基本概念

之前的文章介绍过机器学习中的监督学习和非监督学习,其中非监督学习简单来说就是学习人类没有标记过的数据。对于没有标记的数据最常见的应用就是通过聚类(Clustering)的方式将数据进行分类。对于这些数据来说通常有非常多的维度或者说Features。如何降低这些数据的维度或者说“压缩”数据,从而减轻模型学习的负担,我们就要用到Autoencoder了。

用Autoencoder 给数据“压缩”和降维不仅能够给机器“减压”,同时也有利于数据的可视化(人类只能看懂三维的数据)。

Autoencoder 实际上跟普通的神经网络没有什么本质的区别,分为输入层,隐藏层和输出层。唯一比较特殊的是,输入层的输入feature的数量(也就是神经元的数量)要等于输出层。同时要保证输入和输出相等。

结构大概就是如图所示


img_c7862ee970a7a97f63f77f2a30cfc5f6.png

因为输出要等于输入,所以中间的每一层都最大程度地保留了原有的数据信息,但是由于神经元个数发生了变化,数据的维度也就发生了变化。比如上图的中间层(第三层)只有两个神经元,那么这一层输出的结果实际上就是二维的数据结构。我们就可以用这一层的输出结果进行无监督学习分类,或者做视觉化的展示。

简化的Autoencoder

对于Autoencoder从输入层到最中间层的数据处理过程叫做数据编码(Encode)过程,从中间层到输出层则为解码(Decode)过程,最后保证输出等于输入。

Autoencoder的隐藏层可以是多层也可以是单层,这里我用一个只有一层隐藏层的Autoencoder的实例来介绍Autoencoder.

img_94a3504f9e85f86b43e4a0412d74780a.png

Autoencoder实例代码

1、导入需要用到的库
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
2、创建一个三维的数据

这里用sklearn 的一个make_blobs的工具创造有两个聚集点的三维数据

from sklearn.datasets import make_blobs
data = make_blobs(n_samples=100, n_features=3,centers=2,random_state=101)

数据长这个样子


img_f6a6b1b0133847430134af8b3e9e9188.png

注意data[0]是100x3的数据(100个点,3个features(维度))

3. 搭建神经网络

下面用Tensorflow Layers来搭一个三层的全连接的神经网路,输入层,隐藏层和输出层的神经元个数分别是3,2,1。

import tensorflow as tf
from tensorflow.contrib.layers import fully_connected

num_inputs = 3  # 3 dimensional input
num_hidden = 2  # 2 dimensional representation 
num_outputs = num_inputs # Must be true for an autoencoder!

learning_rate = 0.01

Placeholder,Layers,Loss Function 和 Optimizer

#Placeholder
X = tf.placeholder(tf.float32, shape=[None, num_inputs])
#Layers
hidden = fully_connected(X, num_hidden, activation_fn=None)
outputs = fully_connected(hidden, num_outputs, activation_fn=None)
#Loss Function
loss = tf.reduce_mean(tf.square(outputs - X))  # MSE
#Optimizer
optimizer = tf.train.AdamOptimizer(learning_rate)
train  = optimizer.minimize( loss)
#Init
init = tf.global_variables_initializer()

4. 训练神经网络

num_steps = 1000

with tf.Session() as sess:
    sess.run(init)
    
    for iteration in range(num_steps):
        sess.run(train,feed_dict={X: scaled_data})

        
    # Now ask for the hidden layer output (the 2 dimensional output)
    output_2d = hidden.eval(feed_dict={X: scaled_data})

注意:output_2d就是中间层输出的结果,这是一个二维(100x2)的数据。

这个数据长这个样子


img_bb536bbcd8ed0e0beb2a3b0fde55a856.png

4.总结

从上面的例子可以看到,Autoencoder 不是简单地去掉一个维度,而是通过编码的过程将数据“压缩”到二维。这些数据通过解码过程可以再次在输出层输出三维的数据,并且保留了元数据的两个积聚点。

上面只是一个非常简单的将三维数据通过Autoencoder降到二维空间,当数据的feature 太多的时候,通过Autoencoder 就可以在最大限度保留原数据的信息并降低源数据的维度。

————
相关文章
AI学习笔记——循环神经网络(RNN)的基本概念
AI学习笔记——神经网络和深度学习
AI学习笔记——卷积神经网络1(CNN)
————
文章首发steemit.com 为了方便墙内阅读,搬运至此,欢迎留言或者访问我的Steemit主页

目录
相关文章
|
13天前
|
人工智能 自然语言处理 Java
【100%好礼】诚邀体验SoFlu-JavaAl开发助手,重塑AI编码价值
在这个数字化时代,软件开发任务繁重,飞算科技推出SoFlu-JavaAl开发助手,诚邀您体验AI编码新境界。它不仅生成代码,还通过自然语言理解需求,精准生成完整工程源码,大幅缩短设计工期,提升效率。SoFlu-JavaAl支持一键构建Java Maven工程,轻松合并老项目,快速响应需求变更。参与体验还有机会获多重好礼!
|
4月前
|
人工智能 测试技术 API
AI计算机视觉笔记二十 九:yolov10竹签模型,自动数竹签
本文介绍了如何在AutoDL平台上搭建YOLOv10环境并进行竹签检测与计数。首先从官网下载YOLOv10源码并创建虚拟环境,安装依赖库。接着通过官方模型测试环境是否正常工作。然后下载自定义数据集并配置`mycoco128.yaml`文件,使用`yolo detect train`命令或Python代码进行训练。最后,通过命令行或API调用测试训练结果,并展示竹签计数功能。如需转载,请注明原文出处。
|
4月前
|
JSON 人工智能 数据格式
AI计算机视觉笔记二十六:YOLOV8自训练关键点检测
本文档详细记录了使用YOLOv8训练关键点检测模型的过程。首先通过清华源安装YOLOv8,并验证安装。接着通过示例权重文件与测试图片`bus.jpg`演示预测流程。为准备训练数据,文档介绍了如何使用`labelme`标注工具进行关键点标注,并提供了一个Python脚本`labelme2yolo.py`将标注结果从JSON格式转换为YOLO所需的TXT格式。随后,通过Jupyter Notebook可视化标注结果确保准确性。最后,文档展示了如何组织数据集目录结构,并提供了训练与测试代码示例,包括配置文件`smoke.yaml`及训练脚本`train.py`,帮助读者完成自定义模型的训练与评估。
|
12天前
|
人工智能 自然语言处理 搜索推荐
Open Notebook:开源 AI 笔记工具,支持多种文件格式,自动转播客和生成总结,集成搜索引擎等功能
Open Notebook 是一款开源的 AI 笔记工具,支持多格式笔记管理,并能自动将笔记转换为博客或播客,适用于学术研究、教育、企业知识管理等多个场景。
73 0
Open Notebook:开源 AI 笔记工具,支持多种文件格式,自动转播客和生成总结,集成搜索引擎等功能
|
2月前
|
人工智能 测试技术 Serverless
AI编码,十倍提速,通义灵码引领研发新范式
欢迎参加通义灵码智能开发流程活动,通过在线部署和上传截图,即可获得新年好运日历,限量30个,先到先得!活动时间从即日起至2024年12月13日24:00。快来报名吧!
|
3月前
|
人工智能 算法 前端开发
首个 AI 编程认证课程上线!阿里云 AI Clouder 认证:基于通义灵码实现高效 AI 编码
为了帮助企业和开发者更好使用通义灵码,阿里云上线了“AI Clouder 认证课程--基于通义灵码实现高效 AI 编码”。本课程汇聚了后端、前端、算法领域 5 名实战派专家,带你体验 4 大研发场景实践,上手 3 大实操演练,深度掌握智能编码助手通义灵码,实现全栈 AI 编码技能跃升。
|
3月前
|
人工智能 算法 前端开发
首个 AI 编程认证课程上线!阿里云 AI Clouder 认证:基于通义灵码实现高效 AI 编码
为了帮助企业和开发者更好使用通义灵码,阿里云上线了“AI Clouder 认证课程--基于通义灵码实现高效 AI 编码”。本课程汇聚了后端、前端、算法领域 5 名实战派专家,带你体验 4 大研发场景实践,上手 3 大实操演练,深度掌握智能编码助手通义灵码,实现全栈 AI 编码技能跃升。
|
4月前
|
消息中间件 人工智能 运维
|
3月前
|
机器学习/深度学习 人工智能
【AI大模型】深入Transformer架构:编码器部分的实现与解析(下)
【AI大模型】深入Transformer架构:编码器部分的实现与解析(下)
|
4月前
|
机器学习/深度学习 人工智能 PyTorch
AI计算机视觉笔记三十二:LPRNet车牌识别
LPRNet是一种基于Pytorch的高性能、轻量级车牌识别框架,适用于中国及其他国家的车牌识别。该网络无需对字符进行预分割,采用端到端的轻量化设计,结合了squeezenet和inception的思想。其创新点在于去除了RNN,仅使用CNN与CTC Loss,并通过特定的卷积模块提取上下文信息。环境配置包括使用CPU开发板和Autodl训练环境。训练和测试过程需搭建虚拟环境并安装相关依赖,执行训练和测试脚本时可能遇到若干错误,需相应调整代码以确保正确运行。使用官方模型可获得较高的识别准确率,自行训练时建议增加训练轮数以提升效果。