(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. sql server 查询ntext字段长度

    DATALENGTH 返回任何表达式所占用的字节数. 语法 DATALENGTH ( expression ) 参数 expression 任何类型的表达式. 返回类型 int 注释 DATALENG ...

  2. iOS设计模式 - 中介者

    iOS设计模式 - 中介者 原理图 说明 用一个中介对象来封装一系列的对象交互.中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互. 注:中介者对象本身没有复用价值 ...

  3. 解决点击cell执行动画导致的重用问题

    解决点击cell执行动画导致的重用问题 说明: 动画的细节都是裸露的,并没有封装,靠看官来优化了. 效果: 源码: https://github.com/YouXianMing/UITableView ...

  4. Redis学习---Redis操作之Python连接

    PyCharm下的Redis连接 连接方式: 1. 操作模式 redis-py提供两个类Redis和StrictRedis用于实现Redis的命令,StrictRedis用于实现大部分官方的命令,并使 ...

  5. Linux 系统的磁盘设备_【all】

    磁盘 ->RAID ->分区 ->格式化 ->挂载 基本的框架 a.硬盘的外部以及内部硬件结构,工作原理和读写原理b.RAID的划分(一块盘划分为一块或者多块的小虚拟磁盘,可以 ...

  6. Centos7 Nginx 443端口反向代理springboot项目

    开发微信小程序需要部署项目到服务器.要求必须是443端口.但是一个443端口只能监听一个服务器.所以就出现了一个问题就是每次开发一个小程序就需要买一个服务器.觉得特别多余.后来查到了有一种方式就是通过 ...

  7. * args 和 **kwargs

    def func(*args, **kwargs): print(args,kwargs) func("对", "哦",o=4, k=0) 结果---> ...

  8. 【问题记录】centos 开机启动命令未执行

    查看日志 /var/log/boot.log 看具体原因,有可能脚本执行有问题, 当你在系统已经启动的时候,脚本执行没问题不代表开机启动能运行

  9. FreeMaker常用方法

    FreeMaker常用方法 1.表达式转换类 ${expression}计算expression并输出 #{ expression }数字计算#{ expression ;format}安格式输出数字 ...

  10. 浅谈 JSONP

    说起跨域的解决方案,总是会说到 JSONP,但是很多时候都没有仔细去了解过 JSONP,可能是因为现在 JSONP 用的不是很多(多数时候都是配置响应头实现跨域),也可能是因为用 JSONP 的场景一 ...