当前位置:   article > 正文

受限玻尔兹曼机(RBM)与python在Tensorflow的实现_rbm受限玻尔兹曼机能否采用keras编写?

rbm受限玻尔兹曼机能否采用keras编写?

简介

受限玻尔兹曼机是一种无监督,重构原始数据的一个简单的神经网络
受限玻尔兹曼机先把输入转为可以表示它们的一系列输出;这些输出可以反向重构这些输入。通过前向和后向训练,训练好的网络能够提取出输入中最重要的特征。

为什么RBM很重要?

因为它能够自动地从输入中提取重要的特征。

RBM有什么用

用于协同过滤(Collaborative Filtering)
降维(dimensionality reduction)
分类(classification)
特征学习(feature leatning)
主题模型(topic modeling)
搭建深度置信网络(Deep belief network)

RBM是生成模型吗?

生成模型和判别模型的区别

判别模型: 考虑一个分类问题,如我们想根据车的一些特征分辨一辆轿车和一辆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).

使用MINST 数据集展示如何使用RBMs

初始化并加载数据

这里要通过网络获取远程的文件utils.py到本地,python2 和 python3通过网络获取文件是不一样的。
这里的代码用python3。

  1. import urllib.request
  2. response = urllib.request.urlopen('http://deeplearning.net/tutorial/code/utils.py')
  3. content = response.read().decode('utf-8')
  4. target = open('utils.py', 'w')
  5. target.write(content)
  6. target.close()
  1. import tensorflow as tf
  2. import numpy as np
  3. from tensorflow.examples.tutorials.mnist import input_data
  4. #!pip install pillow
  5. from PIL import Image
  6. # import Image
  7. from utils import tile_raster_images
  8. import matplotlib.pyplot as plt
  9. %matplotlib inline
  1. mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)
  2. trX, trY, teX, teY = mnist.train.images, mnist.train.labels, mnist.test.images, mnist.test.labels

RBM的层

一个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.
P1

第一层的每一个节点有一个偏差 (bias),使用vb表示;
第二层的每一个节点也有一个偏差,使用hb表示;

  1. vb = tf.placeholder("float", [784])
  2. hb = tf.placeholder("float", [500])

定义可视层和隐藏层之间的权重,行表示输入节点,列表示输出节点,这里权重W是一个784x500的矩阵。

W = tf.placeholder("float", [784, 500])
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/人工智能uu/article/detail/944269
推荐阅读
相关标签
  

闽ICP备14008679号