【神经网络】AutoEncoder自编码器

2024-04-29 06:38

本文主要是介绍【神经网络】AutoEncoder自编码器,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.基本功能

自编码器最大的特点是输入与输出的节点数是一致的,其功能并不是进行分类或者是回归预测,而是将原始数据转换为一种特殊的特征表示方式,在训练的过程中,依然采用反向传播算法进行参数优化,目标函数为使输出与输入之间的误差最小化。
基本功能如图,如图所示,普通神经网络是训练类别(或者离散值)与输入之间的映射关系,而AutoEncoder是将input通过encoder进行编码得到code,然后再使用decoder进行解码,得到原始数据相同维度的表示方式reconstruction,进而通过反向传播优化inputrexonstruction之间的误差。
这里写图片描述
到目前为止,只是获取到了一个新的特征向量,因此需要连接其他网络结构实现预测分类等功能。通过训练,这个特征可以在最大程度上表示原始数据。最终我们的模型是AutoEncoder+分类器。如图分别为两种监督训练方式:
这里写图片描述
这里写图片描述
第一张图片表示在训练predictionlabel过程中对整个网络进行参数调节;第二张图片表示在训练过程中仅调节分类器,不修改编码器内部参数。第一种属于End-To-End算法,效果较好。

2.算法实现

(1)导入包

import tflearn.datasets.mnist as mnist
import tflearn
import numpy as np
import matplotlib.pyplot as plt
from tflearn.layers.core import fully_connected, input_data

(2)构建Encoder和Decoder

X, Y, testX, testY = mnist.load_data(one_hot=True)
encoder = input_data(shape=[None, 784])
encoder = fully_connected(encoder, 256)
encoder = fully_connected(encoder, 64)decoder = fully_connected(encoder, 256)
decoder = fully_connected(encoder, 784)net = tflearn.regression(decoder, optimizer='adam', loss='mean_square',learning_rate=0.001, metric=None)model = tflearn.DNN(net)
model.fit(X, X,n_epoch=3, validation_set=(testX, testX),show_metric=True,batch_size=256)

(3)测试Encoder结果

print('\nTest encoding of X[0]: ')
encoding_model = tflearn.DNN(encoder, session=model.session)
print(encoding_model.predict([X[0]]))

通过调用model.fit()的会话实现权重共享。
(4)可视化结果

print('\nVisualizing results after being encoder and decoder')
testX = tflearn.data_utils.shuffle(testX)[0]
encoder_decoder = model.predict(testX)# plt
f, a = plt.subplots(2, 10, figsize=(10, 2))
for i in range(10):temp = [[ii, ii, ii] for ii in list(testX[i])]a[0][i].imshow(np.reshape(temp, (28, 28, 3)))temp = [[ii, ii, ii] for ii in list(encoder_decoder[i])]a[1][i].imshow(np.reshape(temp, (28, 28, 3)))
f.show()
plt.draw()
plt.waitforbuttonpress()

(5)连接分类器
此处以Alexnet为例进行测试,效果一般,主要是理解过程

from tflearn.layers.estimator import regression
from tflearn.layers.conv import conv_2d, max_pool_2d
from tflearn.layers.normalization import local_response_normalization
from tflearn.layers.core import dropout
import tensorflow as tf
tf.reset_default_graph()
codeX = model.predict(X)
codeX = codeX.reshape([-1, 28, 28, 1])network = input_data(shape=[None, 28, 28, 1])
network = conv_2d(network, nb_filter=96, filter_size=8, strides=2, activation='relu')
network = max_pool_2d(network, kernel_size=3, strides=1)
network = local_response_normalization(network)
network = conv_2d(network, nb_filter=256, filter_size=5, strides=1, activation='relu')
network = max_pool_2d(network, kernel_size=3, strides=1)
network = local_response_normalization(network)
network = conv_2d(network, nb_filter=384, filter_size=3, activation='relu')
network = conv_2d(network, nb_filter=384, filter_size=3, activation='relu')
network = conv_2d(network, nb_filter=256, filter_size=3, activation='relu')
network = max_pool_2d(network, kernel_size=3, strides=1)
network = fully_connected(network, 2048, activation='tanh')
network = dropout(network, 0.5)
network = fully_connected(network, 2048, activation='tanh')
network = dropout(network, 0.5)
network = fully_connected(network, 10, activation='softmax')
network = regression(network, optimizer='momentum', loss='categorical_crossentropy', learning_rate=0.001)model_alexnet = tflearn.DNN(network)
model_alexnet.fit(codeX, Y, n_epoch=100, validation_set=0.2, show_metric=True)

参考链接:http://blog.csdn.net/u010555688/article/details/24438311

这篇关于【神经网络】AutoEncoder自编码器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/945354

相关文章

人工智能机器学习算法总结神经网络算法(前向及反向传播)

1.定义,意义和优缺点 定义: 神经网络算法是一种模仿人类大脑神经元之间连接方式的机器学习算法。通过多层神经元的组合和激活函数的非线性转换,神经网络能够学习数据的特征和模式,实现对复杂数据的建模和预测。(我们可以借助人类的神经元模型来更好的帮助我们理解该算法的本质,不过这里需要说明的是,虽然名字是神经网络,并且结构等等也是借鉴了神经网络,但其原型以及算法本质上还和生物层面的神经网络运行原理存在

python实现最简单循环神经网络(RNNs)

Recurrent Neural Networks(RNNs) 的模型: 上图中红色部分是输入向量。文本、单词、数据都是输入,在网络里都以向量的形式进行表示。 绿色部分是隐藏向量。是加工处理过程。 蓝色部分是输出向量。 python代码表示如下: rnn = RNN()y = rnn.step(x) # x为输入向量,y为输出向量 RNNs神经网络由神经元组成, python

神经网络第四篇:推理处理之手写数字识别

到目前为止,我们已经介绍完了神经网络的基本结构,现在用一个图像识别示例对前面的知识作整体的总结。本专题知识点如下: MNIST数据集图像数据转图像神经网络的推理处理批处理  MNIST数据集          mnist数据图像 MNIST数据集由0到9的数字图像构成。像素取值在0到255之间。每个图像数据都相应地标有“7”、“2”、“1”等数字标签。MNIST数据集中,

神经网络第三篇:输出层及softmax函数

在上一篇专题中,我们以三层神经网络的实现为例,介绍了如何利用Python和Numpy编程实现神经网络的计算。其中,中间(隐藏)层和输出层的激活函数分别选择了 sigmoid函数和恒等函数。此刻,我们心中不难发问:为什么要花一个专题来介绍输出层及其激活函数?它和中间层又有什么区别?softmax函数何来何去?下面我们带着这些疑问进入本专题的知识点: 1 输出层概述 2 回归问题及恒等函数 3

神经网络第一篇:激活函数是连接感知机和神经网络的桥梁

前面发布的文章介绍了感知机,了解了感知机可以通过叠加层表示复杂的函数。遗憾的是,设定合适的、能符合预期的输入与输出的权重,是由人工进行的。从本章开始,将进入神经网络的学习,首先介绍激活函数,因为它是连接感知机和神经网络的桥梁。如果读者认知阅读了本专题知识,相信你必有收获。 感知机数学表达式的简化 前面我们介绍了用感知机接收两个输入信号的数学表示如下:

多层感知机不等于神经网络?

在前一章节(https://blog.csdn.net/u012132349/article/details/86166324),我们介绍了感知机可以实现与门、或门、非门。只需给定合适的参数(w1, w2, b)并利用Python就可以简单实现对输入的任意(x1,x2),输出0或1。     今天我们将介绍感知机的局限性(严格说是单层感知机的局限性)。这里我们想用感知机实现异或门,所谓异

【图像识别系统】昆虫识别Python+卷积神经网络算法+人工智能+深度学习+机器学习+TensorFlow+ResNet50

一、介绍 昆虫识别系统,使用Python作为主要开发语言。通过TensorFlow搭建ResNet50卷积神经网络算法(CNN)模型。通过对10种常见的昆虫图片数据集(‘蜜蜂’, ‘甲虫’, ‘蝴蝶’, ‘蝉’, ‘蜻蜓’, ‘蚱蜢’, ‘蛾’, ‘蝎子’, ‘蜗牛’, ‘蜘蛛’)进行训练,得到一个识别精度较高的H5格式模型文件,然后使用Django搭建Web网页端可视化操作界面,实现用户上传一

【剖析】为什么说RBF神经网络的误差为0

本文来自《老饼讲解-BP神经网络》https://www.bbbdata.com/ 机器学习中的模型非常的多,但如果要问有没有这样的一个模型,它的训练误差为0,那么就非RBF神经网络莫属了!下面我们来聊聊,为什么RBF神经网络的训练误差为0。 一、RBF神经网络是什么 知道RBF神经网络的人都知道,但不知道RBF神经网络的人还是不知道。所以简单提一下,RBF神经网络是一个什么东西。

深度神经网络:解锁智能的密钥

深度神经网络:解锁智能的密钥 在人工智能的浩瀚星空中,深度神经网络(Deep Neural Networks, DNNs)无疑是最耀眼的那颗星。它以其强大的学习能力、高度的适应性和广泛的应用场景,成为了我们解锁智能世界的一把密钥。本文将带你走进深度神经网络的神秘世界,探讨其原理、应用以及实用操作技巧。 一、深度神经网络概述 深度神经网络,顾名思义,是一种具有多个隐藏层的神经网络。与传统的神经

nlp基础-文本预处理及循环神经网络

1 认识文本预处理 1 文本预处理及其作用 定义:文本送给模型之前,提前要做的工作 作用:指导模型超参数的选择 、提升模型的评估指标 举个例子: 思路常识,打造成 X Y关于Y:10分类标签是否均衡关于X:数据有没有脏数据 数据长度(512)样本不够! 文本预处理 工作 结束 的标志:准备出来X和Y 能送给模型 2 文本预处理的主要环节 1 文本处理的基本方法 分词:按照一定规