theano学习指南--玻尔兹曼机(RBM)(源码)

本文提供了一个使用Theano实现的受限玻尔兹曼机(RBM)的代码示例,详细解释了RBM的初始化和训练过程。通过测试函数展示了如何用Theano训练RBM并在MNIST数据集上进行采样。文章还分享了作者在学习Theano过程中遇到的挑战和对RBM采样过程的理解。
摘要由CSDN通过智能技术生成

欢迎fork我的github:https://github.com/zhaoyu611/DeepLearningTutorialForChinese

最近在学习Git,所以正好趁这个机会,把学习到的知识实践一下~ 看完DeepLearning的原理,有了大体的了解,但是对于theano的代码,还是自己撸一遍印象更深 所以照着deeplearning.net上的代码,重新写了一遍,注释部分是原文翻译和自己的理解。 感兴趣的小伙伴可以一起完成这个工作哦~ 有问题欢迎联系我 Email: zhaoyuafeu@gmail.com QQ: 3062984605


--coding: utf-8 --

author = ‘Administrator’

“””
本代码使用Theano实现受限玻尔兹曼机(RBM)
玻尔兹曼机(BMs)是一种带隐藏变量的特殊形式的自由能模型。
受限玻尔兹曼机是不含可见层-可见层和隐层-隐层连接的形式。
“””
import cPickle
import gzip
import PIL.Image
import time

import numpy

import theano
import theano.tensor as T
import os

from theano.tensor.shared_randomstreams import RandomStreams
from utils import tile_raster_images
from logistic_sgd import load_data

class RBM(object):
def init(self,input=None,n_visible=784,n_hidden=500,\
W=None,hbias=None,vbias=None,numpy_rng=None,
theano_rng=None):
“””
RBM类定义了从隐层到可见层(反之亦然)的模型参数和基本操作,
同时定义了CD的更新
:param input:对于标准RBM,输入为None,对于大模型的RBM模块,输入为符号变量,取值区间[0,1]
:param n_visible:可见单元的数量
:param n_hidden:隐藏单元的数量
:param W:对于标准RBM,输入为None;对于DBN网络的RBM模块,输入为共享权重矩阵的符号变量;
在DBN中,RBMs和MLP的层共享权重。
:param hbias:对于标准RBM,输入为None;对于大型网络的RBM模块,输入为符号变量共享
隐层单元的偏置
:param vbias:对于标准RBMs。输入为None;对于大型网络的RBM模块,
输入为符号变量共享卡肩蹭单元的偏置
:param numpy_rng: 生成的随机数
:param theano_rng: 生成的符号变量的随机数
:return:
“””
#######################
#####初始化模型参数#####
#######################
self.n_visible=n_visible
self.n_hidden=n_hidden

    #生成随机数
    if numpy_rng is None:
        numpy_rng=numpy.random.RandomState(1234)

    if theano_rng is None:
        theano_rng=RandomStreams(numpy_rng.randint(2**30))

    #W服从均匀分布,采样区间为-4*sqrt(n_hidden+n_visible)
    # 到-4*sqrt(n_hidden+n_visible)。如果将数据类型从
    #asarray转换到theano.config.floatX,那么程序可以在GPU运行
    if W is None:
        initial_W=numpy.asarray(numpy_rng.uniform(
                low=-4*numpy.sqrt(6./(n_hidden+n_visible)),
                high=4*numpy.sqrt(6./(n_hidden+n_visible)),
                size=(n_visible,n_hidden)),
                dtype=theano.config.floatX)
        #theano共享权重和偏置
        W=theano.shared(value=initial_W,name='W',borrow=True)

    #创建隐藏单元偏置的共享变量
    if hbias is None:
        hbias=theano.shared(value=numpy.zeros(n_hidden,
                                              dtype=theano.config.floatX),
                            name='hbias',borrow=True)
    #创建可见单元偏置的共享变量
    if vbias is None:
        vbias=theano.shared(value=numpy.zeros(n_visible,
                                              dtype=theano.config.floatX),
                            name='vbias',borrow=
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值