关键词:
目录
1. 引言
今天我们来学习一种在压缩数据方面有较好效果的神经网络:自编码(autoencoder)。
2.结构
自编码的主要思想就是将数据先不断encode进行降维提取其中的关键信息,再decode解码成新的信息,我们的目标是要使我们生成的信息和原信息尽可能相似,有点像我们做题一样,先刷大量的题,提取其中的关键解题思路,遇到同类型的题目就会写了,基本结构如下
这个网络先将信息不断压缩,再解压,对比原始数据和新数据的差别,再反向传播修正参数,最后输出的新数据就会越来越接近原始数据,最后最中间的一层就是这组信息的关键特征。
3.搭建网络
我们以输出手写数字为例,我们还是只看网络的搭建过程:
#搭建网络
class AutoEncoder(nn.Module):
def __init__(self):
super(AutoEncoder, self).__init__()
self.encoder = nn.Sequential(
nn.Linear(28*28, 128),
nn.Tanh(),
nn.Linear(128, 64),
nn.Tanh(),
nn.Linear(64, 12),
nn.Tanh(),
nn.Linear(12, 3),
)
self.decoder = nn.Sequential(
nn.Linear(3, 12),
nn.Tanh(),
nn.Linear(12, 64),
nn.Tanh(),
nn.Linear(64, 128),
nn.Tanh(),
nn.Linear(128, 28*28),
nn.Sigmoid(),
)
def forward(self, x):
encoded = self.encoder(x)
decoded = self.decoder(encoded)
return encoded, decoded
我们需要构建编码和解码两个网络,编码部分就是将数据一层一层压缩,解码部分就是对应着一层层解压,中间加入非线性函数,最后再加一个激活函数,但是要确保数据的范围与原来一样,因为我们的目标是生成与原数据一样的数据,最后前向传播先编码再解码即可。
下面是效果
开始:
中间:
最后:
可以看出输出图片与原始图片越来越接近了。
最后的损失:
loss:0.33
4.代码
#调库
import torch
import torch.nn as nn
import torch.utils.data as Data
import torchvision
import matplotlib.pyplot as plt
import numpy as np
#超参数
EPOCH = 10
BATCH_SIZE = 64
LR = 0.005 # learning rate
DOWNLOAD_MNIST = False
N_TEST_IMG = 5
#下载数据
train_data = torchvision.datasets.MNIST(
root='./mnist/',
train=True,
transform=torchvision.transforms.ToTensor(),
download=DOWNLOAD_MNIST,
)
#小批数据
train_loader = Data.DataLoader(dataset=train_data, batch_size=BATCH_SIZE, shuffle=True)
#搭建网络
class AutoEncoder(nn.Module):
def __init__(self):
super(AutoEncoder, self).__init__()
self.encoder = nn.Sequential(
nn.Linear(28*28, 128),
nn.Tanh(),
nn.Linear(128, 64),
nn.Tanh(),
nn.Linear(64, 12),
nn.Tanh(),
nn.Linear(12, 3),
)
self.decoder = nn.Sequential(
nn.Linear(3, 12),
nn.Tanh(),
nn.Linear(12, 64),
nn.Tanh(),
nn.Linear(64, 128),
nn.Tanh(),
nn.Linear(128, 28*28),
nn.Sigmoid(),
)
def forward(self, x):
encoded = self.encoder(x)
decoded = self.decoder(encoded)
return encoded, decoded
autoencoder = AutoEncoder()
optimizer = torch.optim.Adam(autoencoder.parameters(), lr=LR)
loss_func = nn.MSELoss()
f, a = plt.subplots(2, N_TEST_IMG, figsize=(5, 2))
plt.ion()
view_data = train_data.train_data[:N_TEST_IMG].view(-1, 28*28).type(torch.FloatTensor)/255.
for i in range(N_TEST_IMG):
a[0][i].imshow(np.reshape(view_data.data.numpy()[i], (28, 28)), cmap='gray'); a[0][i].set_xticks(()); a[0][i].set_yticks(())
#训练并绘图
for epoch in range(EPOCH):
for step, (x, b_label) in enumerate(train_loader):
b_x = x.view(-1, 28*28)
b_y = x.view(-1, 28*28)
encoded, decoded = autoencoder(b_x)
loss = loss_func(decoded, b_y)
optimizer.zero_grad()
loss.backward()
optimizer.step()
if step % 100 == 0:
print('Epoch: ', epoch, '| train loss: %.4f' % loss.data.numpy())
_, decoded_data = autoencoder(view_data)
for i in range(N_TEST_IMG):
a[1][i].clear()
a[1][i].imshow(np.reshape(decoded_data.data.numpy()[i], (28, 28)), cmap='gray')
a[1][i].set_xticks(()); a[1][i].set_yticks(())
plt.draw(); plt.pause(0.05)
plt.ioff()
plt.show()
pytorch之基于经典网络架构训练图像分类模型(代码片段)
...型,并且直接用训练的好权重当做初始化参数2.参考pytorch官网例子3.设置哪些层需要训练4.优化器设置5.训练模块6.测试模型效果本文参加新星计划人工智能(Pytorch)赛道:https://bbs.csdn.net/topics/613989052一、模块简单介绍我们... 查看详情
基于pytorch的神经网络之regression(代码片段)
目录1.引言2.神经网络搭建2.1准备工作2.2搭建网络2.3训练网络3.效果4.完整代码1.引言我们之前已经介绍了神经网络的基本知识,神经网络的主要作用就是预测与分类,现在让我们来搭建第一个用于拟合回归的神经网络吧。2... 查看详情
6.3pytorch实现autoencoder模型(代码片段)
欢迎订阅本专栏:《PyTorch深度学习实践》订阅地址:https://blog.csdn.net/sinat_33761963/category_9720080.html第二章:认识Tensor的类型、创建、存储、api等,打好Tensor的基础,是进行PyTorch深度学习实践的重中之重的基础... 查看详情
autoencoder用于异常检测(代码片段)
对基于深度神经网络的AutoEncoder用于异常检测的一些思考from:https://my.oschina.net/u/1778239/blog/1861724一、前言 现实中,大部分数据都是无标签的,人和动物多数情况下都是通过无监督学习获取概念,故而无监督学习拥有广阔... 查看详情
基于pytorch,如何构建一个简单的神经网络
本文为PyTorch官方教程中:如何构建神经网络。基于PyTorch专门构建神经网络的子模块torch.nn构建一个简单的神经网络。完整教程运行codelab→https://openbayes.com/console/open-tutorials/containers/OgcYkLjKw89torch.nn文档→https://pytorch.org/docs/stab... 查看详情
pytorch实现autoencoder无监督学习(代码片段)
自动编码器讲述的是对于一副输入的图像,或者是其他的信号,经过一系列操作,比如卷积,或者linear变换,变换得到一个向量,这个向量就叫做对这个图像的编码,这个过程就叫做encoder,对于一... 查看详情
pytorch实战用pytorch实现基于神经网络的图像风格迁移(代码片段)
用PyTorch实现基于神经网络的图像风格迁移1.风格迁移原理介绍2.FastNeuralStyle网络结构3.用PyTorch实现风格迁移3.1首先看看如何使用预训练的VGG。3.2接下来要实现风格迁移网络参考资料风格迁移,又称为风格转换。只需要给定原... 查看详情
基于pytorch使用实现cnn如何使用pytorch构建cnn卷积神经网络(代码片段)
基于pytorch使用实现CNN如何使用pytorch构建CNN卷积神经网络本文是一个基于pytorch使用CNN在生物信息学上进行位点预测的例子基于pytorch实现CNN,基于CNN进行位点预测,将CNN代码进行封装,可以非常简单的使用代码,基... 查看详情
pt之transformer:基于pytorch框架利用transformer算法针对imdb数据集实现情感分类的应用案例代码解析(代码片段)
...表达的情感倾向。Transformer模型是一种基于注意力机制的神经网络模型,可以有效地处理自然语言处理任务。这个代码可以对电影评论进行情感分类,输出评论的情感极性(正面 查看详情
pytorch入门之siamese网络
首次体验Pytorch,本文参考于:githuband PyTorch中文网人脸相似度对比 本文主要熟悉Pytorch大致流程,修改了读取数据部分。没有采用原作者的ImageFolder方法: ImageFolder(root,transform=None,target_transfo... 查看详情
autoencoder降维可视化
...化。案例3:fashion_mnist图像 此案例基于Autoencoder神经网络完成异常检测(样本重构),前期的操作就不再展示了。下面是在编码器预测数据之后再次使用t-SNE,能够将高维空间中的数据映射到低维空间中,并保留数据集的局... 查看详情
基于pytorch完整的训练一个神经网络并进行验证(代码片段)
...thub地址之前学的也不少了,现在要去训练一个完整的神经网络,利用Pytorch和CIFAR10数据集准备数据集importtorchvision#导入torchvision##准备数据集train_data=torchvision.dataset 查看详情
基于pytorch平台实现对mnist数据集的分类分析(前馈神经网络softmax)基础版(代码片段)
基于pytorch平台实现对MNIST数据集的分类分析(前馈神经网络、softmax)基础版文章目录基于pytorch平台实现对MNIST数据集的分类分析(前馈神经网络、softmax)基础版前言一、基于“前馈神经网络”模型,分类分析... 查看详情
基于pytorch使用实现cnn如何使用pytorch构建cnn卷积神经网络(代码片段)
基于pytorch使用实现CNN如何使用pytorch构建CNN卷积神经网络本文是一个基于pytorch使用CNN在生物信息学上进行位点预测的例子基于pytorch实现CNN,基于CNN进行位点预测,将CNN代码进行封装,可以非常简单的使用代码,基... 查看详情
[机器学习]ufldl笔记-autoencodersandsparsity
...本概念 自编码器是一种无监督学习算法,它采用神经网络的形式,令目标值等于输入值,利用反向传播算法学习数据内在的结构。因此自编码器也可以称作是自编码神经网络(autoencoderneu 查看详情
pytorch深度学习实践入门01(代码片段)
文章目录基于PyTorch的两层神经网络一、基于numpy的两层神经网络实现:二、基于PyTorch的两层神经网络实现:三、使用nn库实现两层神经网络四、自定义nnModules实现两层神经网络总结基于PyTorch的两层神经网络提示:在... 查看详情
pytorch是啥?
...GPU加速的张量计算(如NumPy)。包含自动求导系统的深度神经网络。PyTorch的发展:PyTorch的前身是Torch,其底层和Torch框架一样,但是使用Python重新写了很多内容,不仅更加灵活,支持动态图,而且提供了Python接口。它是由Torch7团... 查看详情
“你什么意思”之基于rnn的语义槽填充(pytorch实现)(代码片段)
1.概况1.1任务口语理解(SpokenLanguageUnderstanding,SLU)作为语音识别与自然语言处理之间的一个新兴领域,其目的是为了让计算机从用户的讲话中理解他们的意图。SLU是口语对话系统(SpokenDialogSystems)的一个非常关键的环节。下图... 查看详情