深度学习 autoencoder_【PyTorch】2阶张量数据的自编码器 (Autoencoder) 实现
前言自编码器常被应用于数据降维、降噪、异常值检测以及数据生成等领域。目前基于PyTorch的自编码器示例基本都是使用手写数字图片 (Mnist) 这种3阶张量数据,而关于2阶张量数据的自编码器实现介绍较少。下面介绍如何利用PyTorch实现2阶张量数据的自编码器。 基本概念1. PyTorchPyTorch [1]是一个开源的 Python 机器学习库,基于 Torch,底层由 C++ 实现,应用
前言
自编码器常被应用于数据降维、降噪、异常值检测以及数据生成等领域。目前基于PyTorch的自编码器示例基本都是使用手写数字图片 (Mnist) 这种3阶张量数据,而关于2阶张量数据的自编码器实现介绍较少。下面介绍如何利用PyTorch实现2阶张量数据的自编码器。
基本概念
1. PyTorch
PyTorch [1]是一个开源的 Python 机器学习库,基于 Torch,底层由 C++ 实现,应用于人工智能领域,主要有两大特征:
- 类似于 NumPy 的 张量计算,可使用 GPU 加速
- 基于带自动微分系统的深度神经网络
2. 自编码器
自编码器 (autoencoder, AE) 是一类在半监督学习和非监督学习中使用的人工神经网络,其功能是通过将输入信息作为学习目标,对输入信息进行表征学习 (representation learning)。[2]
图中可以看出,AE主要由编码器 (encoder) 和 解码器 (decoder) 组成,输入数据通过编码器后得到的数据为隐含层 (图中的code部分),隐含层再通过解码器恢复为原始输入数据维度一直的重构数据。隐含层节点个数小于输入节点个数的,一般称之为欠完备自编码器;隐含层节点个数大于或等于输入节点个数的,则称之为过完备自编码器。
3. 张量
张量是PyTorch中的数据处理单元,如图所示:
- 0阶张量:标量
- 1阶张量:行/列向量
- 2阶张量:m*n 的矩阵A,一般 m 是样本/特征个数,n 是特征/样本个数,如果用索引表示就是A(i, j)。
- 3阶张量:m*n*h的矩阵数组B,如果用索引表示就是B(i, j, k)。
- 4阶张量
- ...
实现过程
1. 实验对象
本实验中采用的数据来源于某工业过程,训练集为一个6000*3的2阶张量,即6000个数据样本,每个样本有3个属性。测试集为一个200*3的2阶张量,即200个数据样本,每个样本有3个属性。
2. 网络搭建
2.1 导入模块
import
2.2 优化器 (Adam)
optimizer
2.2 损失函数 (MSE)
loss_func
2.3 编码器和解码器的网络结构
class
编码器的输入节点为3个,与输入数据的特征个数一致;输出节点为隐含层节点个数 (48);
解码器的输入节点和隐含层节点个数一致,输出节点为3个,与输入数据的特征个数一致。总的网络结构如下,两个编码器 (3→12, 12→48),两个解码器 (48→12, 12→3)
3. 数据准备
数据以.mat格式存储为项目的子文件夹/data。
# 读取数据
4. 初始化
# 初始化
5. 网络训练
# 训练
6. 训练结果
Epoch
7. 测试结果
# 利用训练好的自编码器重构测试数据
测试数据的3种特征的重构结果
测试数据的3种特征的迭代重构效果动态图
第1个特征:
第2个特征:
第3个特征:
源代码
# -*- coding: utf-8 -*-
小尾巴
如果这篇文章对您有所帮助,欢迎点赞、关注、收藏,同时也欢迎专注我的个人专栏,分享与交流机器学习算法和编程实践心得。
机器学习与编程实践zhuanlan.zhihu.com参考
- ^https://www.wikiwand.com/zh/PyTorch
- ^https://baike.baidu.com/item/%E8%87%AA%E7%BC%96%E7%A0%81%E5%99%A8/23686966?fr=aladdin
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)