(python 3)

 import numpy
from scipy import sparse as S
from matplotlib import pyplot as plt
from scipy.sparse.csr import csr_matrix
import pandas def normalize(x):
V = x.copy()
V -= x.min(axis=1).reshape(x.shape[0],1)
V /= V.max(axis=1).reshape(x.shape[0],1)
return V def sigmoid(x):
#return x*(x > 0)
#return numpy.tanh(x)
return 1.0/(1+numpy.exp(-x)) class RBM():
def __init__(self, n_visible=None, n_hidden=None, W=None, learning_rate = 0.1, weight_decay=1,cd_steps=1,momentum=0.5):
if W == None:
self.W = numpy.random.uniform(-.1,0.1,(n_visible, n_hidden)) / numpy.sqrt(n_visible + n_hidden)
self.W = numpy.insert(self.W, 0, 0, axis = 1)
self.W = numpy.insert(self.W, 0, 0, axis = 0)
else:
self.W=W
self.learning_rate = learning_rate
self.momentum = momentum
self.last_change = 0
self.last_update = 0
self.cd_steps = cd_steps
self.epoch = 0
self.weight_decay = weight_decay
self.Errors = [] def fit(self, Input, max_epochs = 1, batch_size=100):
if isinstance(Input, S.csr_matrix):
bias = S.csr_matrix(numpy.ones((Input.shape[0], 1)))
csr = S.hstack([bias, Input]).tocsr()
else:
csr = numpy.insert(Input, 0, 1, 1)
for epoch in range(max_epochs):
idx = numpy.arange(csr.shape[0])
numpy.random.shuffle(idx)
idx = idx[:batch_size] self.V_state = csr[idx]
self.H_state = self.activate(self.V_state)
pos_associations = self.V_state.T.dot(self.H_state) for i in range(self.cd_steps):
self.V_state = self.sample(self.H_state)
self.H_state = self.activate(self.V_state) neg_associations = self.V_state.T.dot(self.H_state)
self.V_state = self.sample(self.H_state) # Update weights.
w_update = self.learning_rate * ((pos_associations - neg_associations) / batch_size)
total_change = numpy.sum(numpy.abs(w_update))
self.W += self.momentum * self.last_change + w_update
self.W *= self.weight_decay self.last_change = w_update RMSE = numpy.mean((csr[idx] - self.V_state)**2)**0.5
self.Errors.append(RMSE)
self.epoch += 1
print("Epoch %s: RMSE = %s; ||W||: %6.1f; Sum Update: %f" % (self.epoch, RMSE, numpy.sum(numpy.abs(self.W)), total_change))
return self def learning_curve(self):
plt.ion()
#plt.figure()
plt.show()
E = numpy.array(self.Errors)
plt.plot(pandas.rolling_mean(E, 50)[50:]) def activate(self, X):
if X.shape[1] != self.W.shape[0]:
if isinstance(X, S.csr_matrix):
bias = S.csr_matrix(numpy.ones((X.shape[0], 1)))
csr = S.hstack([bias, X]).tocsr()
else:
csr = numpy.insert(X, 0, 1, 1)
else:
csr = X
p = sigmoid(csr.dot(self.W))
p[:,0] = 1.0
return p def sample(self, H, addBias=True):
if H.shape[1] == self.W.shape[0]:
if isinstance(H, S.csr_matrix):
bias = S.csr_matrix(numpy.ones((H.shape[0], 1)))
csr = S.hstack([bias, H]).tocsr()
else:
csr = numpy.insert(H, 0, 1, 1)
else:
csr = H
p = sigmoid(csr.dot(self.W.T))
p[:,0] = 1
return p if __name__=="__main__":
data = numpy.random.uniform(0,1,(100,10))
rbm = RBM(10,15)
rbm.fit(data,1000)
rbm.learning_curve()

Boltzmann机神经网络python实现的更多相关文章

  1. Boltzmann机

    博客园不能上传附件,所以这里贴两张流程图吧.一个是模拟退火算法的流程图(Boltzmann机本实上就是反复退火的过程), 个是Boltzmann调整权值的过程.

  2. 限制Boltzmann机(Restricted Boltzmann Machine)

    起源:Boltzmann神经网络 Boltzmann神经网络的结构是由Hopfield递归神经网络改良过来的,Hopfield中引入了统计物理学的能量函数的概念. 即,cost函数由统计物理学的能量函 ...

  3. 实现一个单隐层神经网络python

    看过首席科学家NG的深度学习公开课很久了,一直没有时间做课后编程题,做完想把思路总结下来,仅仅记录编程主线. 一 引用工具包 import numpy as np import matplotlib. ...

  4. UR机器人通信--上位机通信(python)

    一.通信socket socket()函数 Python 中,我们用 socket()函数来创建套接字,语法格式如下: socket.socket([family[, type[, proto]]]) ...

  5. 运维堡垒机(跳板机)系统 python

    相信各位对堡垒机(跳板机)不陌生,为了保证服务器安全,前面加个堡垒机,所有ssh连接都通过堡垒机来完成,堡垒机也需要有 身份认证,授权,访问控制,审计等功能,笔者用Python基本实现了上述功能. A ...

  6. 机器学习作业(三)多类别分类与神经网络——Python(numpy)实现

    题目太长了!下载地址[传送门] 第1题 简述:识别图片上的数字. import numpy as np import scipy.io as scio import matplotlib.pyplot ...

  7. 径向基(RBF)神经网络python实现

    from numpy import array, append, vstack, transpose, reshape, \ dot, true_divide, mean, exp, sqrt, lo ...

  8. 手写神经网络Python深度学习

    import numpy import scipy.special import matplotlib.pyplot as plt import scipy.misc import glob impo ...

  9. 六.随机神经网络Boltzmann(玻尔兹曼机)

    Hopfield网络具有最优计算功能,然而网络只能严格按照能量函数递减方式演化,很难避免伪状态的出现,且权值容易陷入局部极小值,无法收敛于全局最优解. 如果反馈神经网络的迭代过程不是那么死板,可以在一 ...

随机推荐

  1. 设置 ExpressRoute 和站点到站点并存连接

    配置站点到站点 VPN 和 ExpressRoute 共存连接具有多项优势. 可以将站点到站点 VPN 配置为 ExressRoute 的安全故障转移路径,或者使用站点到站点 VPN 连接到不是通过 ...

  2. SQL Server 登录名、用户、角色与权限

    1.在SQL Server中,用户和角色是分为服务器级别和数据库级别的 2.服务器级别 登录名:指有权限登录到某服务器的用户,例如超级管理员的登录名是sa: 登录名具体位置在  数据库——>安全 ...

  3. Mac .DS_Store 隐藏文件和清理.DS_Store的方法

    1.清理.DS_Store的方法 输入命令: sudo find / -name ".DS_Store" -depth -exec rm {} \; 2.设置不产生.DS_Stor ...

  4. python 使用exchange发送邮件(三)

    FYI: https://blog.csdn.net/LeoForBest/article/details/79429955

  5. 基于php-fpm的配置详解

    php5.3自带php-fpm/usr/local/php/etc/php-fpm.confpid = run/php-fpm.pidpid设置,默认在安装目录中的var/run/php-fpm.pi ...

  6. Nginx 泛解析配置请求映射到多端口实现二级域名访问

    由于想实现一个域名放置多个应用运行的目的,而不想通过域名后加端口号方式处理,这种方式处理记起来太麻烦,偷懒党简直不能忍,故而考虑了使用二级域名来处理多个应用同时运行.Google了一番资料并进行了尝试 ...

  7. jQuery插件实例二:年华时代插件ReturnTop回到首页

    这个插件功能在于当网页内容高度很高时,方便用户快速回到顶部.核心在于对屏幕高度的获取,定时器的使用,在引用代码后,只使用$.nhsd.returnTop();即可实现效果 效果图: 代码: ; fun ...

  8. int to string & string to int

    #include "stdafx.h" #include <string> #include <sstream> using namespace std; ...

  9. 021.15 IO流 其他流

    IO包中的其他类操作基本数据类型:DataInputStream与DataOutputStream操作字节数组:ByteArrayInputStream与ByteArrayOutputStream操作 ...

  10. Keepalived + haproxy双机高可用方案

    上一篇文章已经讲到了keepalived实现双机热备,且遗留了一个问题 master的网络不通的时候,可以立即切换到slave,但是如果只是master上的应用出现问题的时候,是不会 主动切换的. 上 ...