VAE(变分自编码器)学习笔记

VAE学习笔记

  1. 普通的编码器可以将图像这类信息编码成为特征向量.

  2. 但通常这些特征向量不具有空间上的连续性.

  3. VAE(变分自编码器)可以将图像信息编码成为具有空间连续性的特征向量.

  4. 方法是向编码器和解码器中加入统计信息,即特征向量代表的的是一个高斯分布,强迫特征向量服从高斯分布.

  5. 编码器是将图片信息编码成为一个高斯分布.

  6. 解码器则是从特征空间中进行采样,再经过全连接层,反卷积层,卷积层等恢复成一张与输入图片大小相等的图片.

  7. 损失函数有两个目标:即(1)拟合原始图片以及(2)使得特征空间具有良好的结构及降低过拟合.因此,我们的损失函数由两部分构成.其中第二部分需要使得编码出的正态分布围绕在标准正态分布周围.


实现代码

import keras
from keras import layers
from keras import backend as K
from keras.models import Model
import numpy as npimg_shape = (28,28,1)
batch_size = 16
latent_dim = 2##### 图片编码器部分
input_img = keras.Input(shape = img_shape)x = layers.Conv2D(32,3,padding = 'same', activation = 'relu')(input_img)
x = layers.Conv2D(64,3,padding = 'same', activation = 'relu',strides = (2,2))(x)
x = layers.Conv2D(64,3,padding = 'same', activation = 'relu')(x)
x = layers.Conv2D(64,3,padding = 'same', activation = 'relu')(x)shape_before_flatting = K.int_shape(x)x = layers.Flatten()(x)
x = layers.Dense(32,activation='relu')(x)#输入图像最终被编码为如下两个参数
z_mean = layers.Dense(latent_dim)(x)
z_log_var = layers.Dense(latent_dim)(x)
# 需要注意的是 z_log_var = 2log(sigma)
##### 编码器部分结束##### 采样函数,用于在给定的正态分布中进行采样,这也就是编码器加入统计信息的地方.
def sampling(args):z_mean, z_log_var = argsepsilon = K.random_normal(shape = (K.shape(z_mean)[0],latent_dim),mean = 0.,stddev = 1.)return z_mean + K.exp(0.5*z_log_var) * epsilon##### VAE解码器部分
decoder_input = layers.Input(K.int_shape(z)[1:])
x = layers.Dense(np.prod(shape_before_flatting[1:]),activation='relu')(decoder_input)
x = layers.Reshape(shape_before_flatting[1:])(x)
x = layers.Conv2DTranspose(32,3,padding='same',activation = 'relu',strides = (2,2))(x)
x = layers.Conv2D(1,3,padding='same',activation='sigmoid')(x)
##### 到这里x被恢复成为一张图片##### 下面两句话将编码器和解码器通过上采样函数连接到了一起
decoder = Model(decoder_input,x)
z = layers.Lambda(sampling)([z_mean,z_log_var])
z_decoder = decoder(z)###### 自定义损失函数层
def vae_loss(y_true,y_pred,e = 0.1):x = K.flatten(y_true)z_decoded = K.flatten(y_pred)xent_loss = keras.metrics.binary_crossentropy(x,z_decoded)kl_loss = -5e-4 * K.mean(1 + z_log_var - K.square(z_mean) - K.exp(z_log_var),axis = -1)return K.mean(xent_loss + kl_loss)from keras.datasets import mnistvae = Model(input_img,z_decoder)
vae.compile(optimizer = 'rmsprop',loss = vae_loss)
vae.summary()##### 训练模型
from keras.datasets import mnist
(x_train,_),(x_test,y_test) = mnist.load_data()
x_train = x_train.astype('float32') / 255.
x_train = x_train.reshape(x_train.shape + (1,))
x_test = x_test.astype('float32') / 255.
x_test = x_test.reshape(x_test.shape + (1,))vae.fit(x = x_train,y = x_train,shuffle = True,epochs = 10,batch_size = batch_size,validation_data = (x_test,x_test))##### 在特征空间进行连续采样,观察输出图片
import matplotlib.pyplot as plt
from scipy.stats import norm
n = 24
digit_size = 28
figure = np.zeros((digit_size*n,digit_size*n))
grid_x = norm.ppf(np.linspace(0.02,0.98,n))
grid_y = norm.ppf(np.linspace(0.02,0.98,n))print(batch_size)for i,yi in enumerate(grid_x):for j,xi in enumerate(grid_y):z_sample = np.array([[xi,yi]])z_sample = np.tile(z_sample,1).reshape(1, 2)x_decoded = decoder.predict(z_sample, batch_size = 1)digit = x_decoded[0].reshape(digit_size,digit_size)figure[i*digit_size:(i+1)*digit_size,j*digit_size:(j+1)*digit_size] = digitplt.figure(figsize = (15,15))
plt.imshow(figure,cmap = 'Greys_r')
plt.show()

输出结果

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/320931.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

小 X 的 AK 计划

小 X 的 AK 计划 题目大意: 有n个点,到一个点(时间为距离)并花一些时间可以A掉此点,问最多可以A多少个点 原题: 解题思路: 先按位置从小到大排序,然后到每一个点并A掉的时间加在…

.NET Core 2.1的重大缺陷延长了.NET Core 2.0的寿命

微软近日宣布,.NET Core 2.0 即将 "寿终正寝",对它的支持将在2018年10月1日结束。.NET Core 2.0 是一个非长期支持(LTS)的版本,因此微软的承诺是在下一个版本发布的三个月之后结束对它的支持。由于 .NET Cor…

P4782-[模板]2-SAT问题【tarjan】

正题 题目链接:https://www.luogu.com.cn/problem/P4782 题目大意 给若干个条件限定为xi为a或xj为bx_i为a或x_j为bxi​为a或xj​为b。求构造一个序列xxx满足所有条件 解题思路 我们对于每个xix_ixi​构造两个点分别表示xix_ixi​为0/10/10/1。然后就开始对能够确定的条件关系…

区间dp专题

区间dp专题 基本思想 区间dp一类的问题往往子问题具有很明显的区间性质,也就是说我们可以通过将子问题定义为整个区间的一个子区间.因为一个大区间可以切分成两段相邻的子区间.从这点出发,我们便可以找到递推关系. 1.纸牌游戏 蜘蛛牌游戏规则是这样的:只能将牌拖…

.Net Core开发日志——Global Tools

.Net Core 2.1引入了一个新的功能,Global Tools,其本质是包含控制台应用程序的nuget包,目前而言,还没有特别有用的工具,不过相信随着时间的推移,各种有创意或者实用性强的Global Tools会出现在大家的视野里…

【DP】回文词 (ssl 1813)

回文词 ssl 1813 题目大意: 给出一个式子,最少要加多少个字符才能让这个式子是一个“回文词” 原题: 题目描述 回文词是一种对称的字符串,也就是说:一个回文词,从左向右读和从右向左读的结果都是一样的.任意给定一个字符串,通过插入若干…

POJ3678-Katu Puzzle【2-SAT】

正题 题目链接:http://poj.org/problem?id3678 题目大意 nnn个xix_ixi​为0/10/10/1。有mmm个条件表示xiandxjax_i\ and\ x_jaxi​ and xj​a或xiorxjax_i\ or\ x_jaxi​ or xj​a或xixorxjax_i\ xor\ x_jaxi​ xor xj​a。 求构造一组合法的xix_ixi​。 解题思路 讨论一下 …

Simple-Faster-RCNN源码学习笔记

Simple-Faster-RCNN 源码学习 项目github地址: https://github.com/chenyuntc/simple-faster-rcnn-pytorch 源码 源文件: model/utils/bbox_tools.py 方法: loc2bbox(src_bbox, loc) 参数含义: src_bbox描述的是bbox的坐标.loc表示的偏移(offsets)和缩放尺度(scales). 给…

API网关模式

什么是网关网关一词来源于计算机网络中的定义,网关(Gateway)又称网间连接器、协议转换器。网关的准确定义是: 两个计算机程序或系统之间的连接,网关作为两个程序之间的门户,允许它们通过不同计算机之间的协议通信来共享信息。顾名…

楼层

楼层 题目大意: 有两个数m和t,问1~m之间去掉有数字t的数之后还有多少个数 原题: 题目描述 mxy 感觉新世界的大门打开了。 ta 决定要在新世界的旅馆中找间房住。已知新世界每天都有一个高能的数字 t,这个数字在楼层中是不会出…

P3825-[NOI2017]游戏【2-SAT】

正题 题目链接:https://www.luogu.com.cn/problem/P3825 题目大意 nnn场比赛,对于场地aaa不能用赛车AAA(b,cb,cb,c以此类推),对于场地xxx可以用任何赛车。然后给定mmm条条件形如iIjJi\ I\ j\ Ji I j J表示在第iii场比赛使用赛车I…

CVPR19 基于图卷积网络的多标签图像识别模型 论文笔记

笔记 旷视研究院的研究员提出了如下模型,用于图像的多标签分类. 该模型与一般模型不一样的一点是,它的分类器是生成的,因此它有一个专门生成分类器的子网络. 网络主要由两部分构成 特征表示子网络,该网络由ResNet-101构成,即蓝色框圈出的部分.分类器生成子网络,该网络由3个…

日行千里,全凭“车”况,为什么我们要升级平台

历经一个半月的时间,不管是叫工业互联网平台还是叫工业大数据平台,从1.0版本升级到2.0版本,升级部分包括:客户端(网关)、服务端(数据接收、数据处理、计算服务)、底层数据库结构、WE…

朋友

朋友 题目大意: 有两堆数,只有第一堆数会和第二堆数中比自己小的数交“朋友”,问有多少对朋友 原题: 题目描述 mxy 即将前往新世界。 在前往新世界的过程中,ta 遇见了两种人。一种是只和 lowb 做朋友,…

好代码是管出来的——.Net Core中的单元测试与代码覆盖率

测试对于软件来说,是保证其质量的一个重要过程,而测试又分为很多种,单元测试、集成测试、系统测试、压力测试等等,不同的测试的测试粒度和测试目标也不同,如单元测试关注每一行代码,集成测试关注的是多个模…

P3694-邦邦的大合唱站队【状压dp】

正题 题目链接:https://www.luogu.com.cn/problem/P3694 题目大意 nnn个人,有mmm个队伍,每个人都属于一个队伍。要求叫出一些人来,然后任意插入出来的空隙中使得同一队的人在一起。求最少出列人数。 解题思路 如果知道最终的队列就可以十分…

数字图像处理作业

图像处理作业 1 取sT(r)11(mr)EsT(r)\frac{1}{1(\frac{m}{r})^E}sT(r)1(rm​)E1​ 其中rrr为原始亮度,mmm为输入区间的中点,EEE描述曲线的陡峭程度 2 一幅8灰度级图像具有如下所示的直方图,求直方图均衡后的灰度级和对应概率,…

【差分】侦察兵

侦察兵 题目大意: 给出一个图,再给一些点,求出这些点左上角和右下角的数之和 原题: 题目描述 mxy 沉迷于一个辣鸡游戏不可自拔。 游戏地图是一个 n*n 的矩形,在每个单位格子上有一个数字,代表当前位置…

深港澳大湾区(深圳).NET技术交流会圆满成功

2018年7月7日一场以.NET Core微服务和机器学习为主题的交流会成功在深圳职业技术学院落下帷幕。这次活动在短短的一周时间内,报名人数超过了170人,除了一些同学临时有事,基本都到现场了,特别感谢深职院的软创工作室对这次活动的支…

P5322-[BJOI2019]排兵布阵【背包】

正题 题目链接:https://www.luogu.com.cnp/problem/P1768 题目大意 nnn个城池,有sss个玩家对于每个城池有一定的兵。对于所有玩家的每个城池都有派兵一个人数,要求派兵人数之和为mmm。如果你的派兵数列每大于一个玩家派兵数量的两倍那么就可以获得该城池…