赞
踩
受限玻尔兹曼机是一种无监督,重构原始数据的一个简单的神经网络。
受限玻尔兹曼机先把输入转为可以表示它们的一系列输出;这些输出可以反向重构这些输入。通过前向和后向训练,训练好的网络能够提取出输入中最重要的特征。
因为它能够自动地从输入中提取重要的特征。
用于协同过滤(Collaborative Filtering)
降维(dimensionality reduction)
分类(classification)
特征学习(feature leatning)
主题模型(topic modeling)
搭建深度置信网络(Deep belief network)
判别模型: 考虑一个分类问题,如我们想根据车的一些特征分辨一辆轿车和一辆SUV。给定一个训练集,一个算法如逻辑回归,它尝试找到一条可以直线,以这条直线作为决策边界把轿车和SUV区分开。
生成模型: 根据汽车,我们可以建立一个模型,比如轿车是什么样子的;然后再根据SUV, 我们建立另外一个SUV的模型;最后根据这个两个模型,判断一辆车是轿车还是SUV.
生成模型在输入特征下有特定的概率分布。 生成模型中既可以使用监督学习和无监督:
在无监督学习中, 我们想要得到一个P(x)的模型, x是输入向量;
在监督学习中,我们首先得到的是P(x|y), y是x的标记。举个例子,如果y标记一辆车是轿车(0)或者SUV(1), 那么p(x|y=0)就描述了轿车的特征是怎么分布的,p(x|y=1)就描述了轿车的特征是怎么分布的。 如果我们能够找到P(x|y)和P(y), 我们就能够使用贝叶斯公式去估算P(y|x),因为P(y|x) = P(x|y)P(y)/P(x).
这里要通过网络获取远程的文件utils.py到本地,python2 和 python3通过网络获取文件是不一样的。
这里的代码用python3。
- import urllib.request
- response = urllib.request.urlopen('http://deeplearning.net/tutorial/code/utils.py')
- content = response.read().decode('utf-8')
- target = open('utils.py', 'w')
- target.write(content)
- target.close()
- import tensorflow as tf
- import numpy as np
- from tensorflow.examples.tutorials.mnist import input_data
- #!pip install pillow
- from PIL import Image
- # import Image
- from utils import tile_raster_images
- import matplotlib.pyplot as plt
- %matplotlib inline
- mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)
- trX, trY, teX, teY = mnist.train.images, mnist.train.labels, mnist.test.images, mnist.test.labels
一个RBM有两个层,第一层叫可视层(visible)或者输入层,第二层是隐藏层( hidden layer)。MNIST数据库的每一张图片有784个像素,所以可视层必须有784个输入节点。第二个隐藏层在这里设为i ii个神经元。每一个神经元是2态的(binary state), 称为si。根据j jj个输入单元,并由逻辑函数(logistic function) 产生一个概率输出,决定每一个隐藏层的单元是开(si = 1)是还关(si =0)。 这里我们取 i = 500 i=500i=500.
第一层的每一个节点有一个偏差 (bias),使用vb表示;
第二层的每一个节点也有一个偏差,使用hb表示;
- vb = tf.placeholder("float", [784])
- hb = tf.placeholder("float", [500])
定义可视层和隐藏层之间的权重,行表示输入节点,列表示输出节点,这里权重W是一个784x500的矩阵。
W = tf.placeholder("float", [784, 500])
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。