完整代码请见 models/DenoisingAutoencoder.py at master · tensorflow/models · GitHub

1. Denoising Autoencoder 类设计与构造函数

  • 简单起见,这里仅考虑一种单隐层的去噪自编码器结构;

    • 即整个网络拓扑结构为:输入层,单隐层,输出层;

      • 输入层 ⇒ 单隐层,可视为编码的过程,需要非线性的激励函数
      • 单隐层 ⇒ 输出层,可视为解码的过程,也可称之为某种意义上的重构(reconstruction),无需激励函数
class DenoisingAutoencoder():
def __init__(self, n_input, transfer_fn, ):
... # model
self.x = tf.placeholder(dtype=tf.float32, shape=[None, self.n_input])
self.x_corrupted =
self.hidden = self.transfer(tf.add(tf.matmul(self.x_corrupted , self.weights['w1']), self.weights['b1']))
self.reconstruction = tf.add(tf.matmul(self.hidden, self.weights['w2']), self.weights['b2']) # cost
self.cost = .5*tf.reduce_mean(tf.pow(tf.subtract(self.reconstruction, self.x), 2))

2. 实现细节

  • 对于 autoencoder,自编码器属于无监督学习范畴,通过限定或者约束目标输出值等于输入数据,实现对原始输入信号的自动编码,从特征学习的观点来看,学到的编码也可视为一种对原始输入信号的层次化特征表示。

    在代码中,表现为,损失函数的定义上,self.cost = .5*tf.reduce_mean(tf.pow(tf.subtract(self.reconstruction, self.x), 2))

3. 两种加噪的方式

去噪自编码器模型的输入是原始输入经某种形式的加噪过程后的退化形式,加噪过程一般分为:

  • 加性高斯噪声(additive gaussian noise)

    self.scale = tf.placeholder(dtype=tf.float32)
    self.x_corrupted = tf.add(self.x, self.scale * tf.random_normal(shape=(self.n_input, )))
  • 掩模噪声(mask)

    self.keep_prob = tf.placeholder(dtype=tf.float32)
    self.x_corrupted = tf.nn.dropout(self.x, self.keep_prob)

4. 椒盐噪声(salt & pepper)

def salt_and_pepper_noise(X, v):
X_noise = X.copy()
n_features = X.shape[1]
mn = X.min()
mx = X.max() for i, sample in enumerate(X):
mask = np.random.randint(0, n_features, v)
for m in mask:
if np.random.rand() < .5:
X_noise[i][m] = mn
else:
X_noise[i][m] = mx
return X_noise

utilities.py

TensorFlow 实现深度神经网络 —— Denoising Autoencoder的更多相关文章

  1. TensorFlow 深度学习笔记 TensorFlow实现与优化深度神经网络

    转载请注明作者:梦里风林 Github工程地址:https://github.com/ahangchen/GDLnotes 欢迎star,有问题可以到Issue区讨论 官方教程地址 视频/字幕下载 全 ...

  2. TensorFlow实现与优化深度神经网络

    TensorFlow实现与优化深度神经网络 转载请注明作者:梦里风林Github工程地址:https://github.com/ahangchen/GDLnotes欢迎star,有问题可以到Issue ...

  3. 代码详解:TensorFlow Core带你探索深度神经网络“黑匣子”

    来源商业新知网,原标题:代码详解:TensorFlow Core带你探索深度神经网络“黑匣子” 想学TensorFlow?先从低阶API开始吧~某种程度而言,它能够帮助我们更好地理解Tensorflo ...

  4. Batch Normalization原理及其TensorFlow实现——为了减少深度神经网络中的internal covariate shift,论文中提出了Batch Normalization算法,首先是对”每一层“的输入做一个Batch Normalization 变换

    批标准化(Bactch Normalization,BN)是为了克服神经网络加深导致难以训练而诞生的,随着神经网络深度加深,训练起来就会越来越困难,收敛速度回很慢,常常会导致梯度弥散问题(Vanish ...

  5. 降噪自动编码器(Denoising Autoencoder)

    起源:PCA.特征提取.... 随着一些奇怪的高维数据出现,比如图像.语音,传统的统计学-机器学习方法遇到了前所未有的挑战. 数据维度过高,数据单调,噪声分布广,传统方法的“数值游戏”很难奏效.数据挖 ...

  6. denoising autoencoder

    神经网络的挑战和关键技术: 1.神经网络结构决定(层,神经元,连接)    加入特定领域的知识(CNN 图片处理) 2.模型复杂度高    大的数据量:    regularization:  dro ...

  7. 深度学习实践系列(2)- 搭建notMNIST的深度神经网络

    如果你希望系统性的了解神经网络,请参考零基础入门深度学习系列,下面我会粗略的介绍一下本文中实现神经网络需要了解的知识. 什么是深度神经网络? 神经网络包含三层:输入层(X).隐藏层和输出层:f(x) ...

  8. TensorFlow构建卷积神经网络/模型保存与加载/正则化

    TensorFlow 官方文档:https://www.tensorflow.org/api_guides/python/math_ops # Arithmetic Operators import ...

  9. 最大似然估计 (Maximum Likelihood Estimation), 交叉熵 (Cross Entropy) 与深度神经网络

    最近在看深度学习的"花书" (也就是Ian Goodfellow那本了),第五章机器学习基础部分的解释很精华,对比PRML少了很多复杂的推理,比较适合闲暇的时候翻开看看.今天准备写 ...

随机推荐

  1. python3输出range序列

    b=range(3)         #输出的是[0, 1, 2] ,其实这里如果用在循环上,代表着循环多少次,这里是循环3次.从零开始.print(list(b))

  2. 关于Promise的详细总结

    1. 异步回调 1.1 回调地狱 在需要多个操作的时候,会导致多个回调函数嵌套,导致代码不够直观,就是常说的回调地狱 1.2 并行结果 如果几个异步操作之间并没有前后顺序之分,但需要等多个异步操作都完 ...

  3. (错误记录)Vue: Unknown custom element

    错误: vue.js:634 [Vue warn]: Unknown custom element: <ve-pie> - did you register the component c ...

  4. php网站修改为https后curl报错301

    今日测试项目时需调用post模拟传参测试接口是否可用,但返回报错信息(301永久迁移),在网上搜寻解决办法无果,最后发现只要将跳转地址修改为https://+url的形式就可以了

  5. Varnish 实战

    Varnish 实战项目   目录 实现基于Keepalived+Haproxy+Varnish+LNMP企业级架构 一.环境准备 1.1 相关配置 1.2 安装服务 1.3 关闭防火墙及selinu ...

  6. winform中comboBox控件加默认选项的问题

    winform程序设计中,label,TextBox,ComboBox等几个控件几乎是用得最多的,在设计中经常会遇到一些小问题,如:comboBox控件绑定了数据源之后,如何设置默认值? combob ...

  7. express,中间件(body-parser),req.body获取不到参数(含postman发请求的方法)

    问题描述: 最近在做毕设,express 里边的中间件(body-parser)失效,req.body获取不到任何值,req.query能获取到值.一开始加body-parser中间件是有用的,直到昨 ...

  8. JS学习笔记 - 微博发布效果

    <script> window.onload = function() { var oTxt = document.getElementById('txt1'); var oBtn = d ...

  9. 【Codeforces Round #434 (Div. 2) B】Which floor?

    [链接]h在这里写链接 [题意] 在这里写题意 [题解] 枚举每层有多少个公寓就好. 要注意,每次都要从1到100判断,一下那个公寓该不该出现在那一层. 多个答案,如果答案是一样的.也算是唯一的.  ...

  10. 切换根控制器UIApplication 主屏幕UIScreen 读取文件资源NSBundle

    //主屏幕设为webView CGRect frame = [UIScreen mainScreen].applicationFrame; UIWebView *webView = [[[UIWebV ...