Boltzmann机神经网络python实现
(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实现的更多相关文章
- Boltzmann机
博客园不能上传附件,所以这里贴两张流程图吧.一个是模拟退火算法的流程图(Boltzmann机本实上就是反复退火的过程), 个是Boltzmann调整权值的过程.
- 限制Boltzmann机(Restricted Boltzmann Machine)
起源:Boltzmann神经网络 Boltzmann神经网络的结构是由Hopfield递归神经网络改良过来的,Hopfield中引入了统计物理学的能量函数的概念. 即,cost函数由统计物理学的能量函 ...
- 实现一个单隐层神经网络python
看过首席科学家NG的深度学习公开课很久了,一直没有时间做课后编程题,做完想把思路总结下来,仅仅记录编程主线. 一 引用工具包 import numpy as np import matplotlib. ...
- UR机器人通信--上位机通信(python)
一.通信socket socket()函数 Python 中,我们用 socket()函数来创建套接字,语法格式如下: socket.socket([family[, type[, proto]]]) ...
- 运维堡垒机(跳板机)系统 python
相信各位对堡垒机(跳板机)不陌生,为了保证服务器安全,前面加个堡垒机,所有ssh连接都通过堡垒机来完成,堡垒机也需要有 身份认证,授权,访问控制,审计等功能,笔者用Python基本实现了上述功能. A ...
- 机器学习作业(三)多类别分类与神经网络——Python(numpy)实现
题目太长了!下载地址[传送门] 第1题 简述:识别图片上的数字. import numpy as np import scipy.io as scio import matplotlib.pyplot ...
- 径向基(RBF)神经网络python实现
from numpy import array, append, vstack, transpose, reshape, \ dot, true_divide, mean, exp, sqrt, lo ...
- 手写神经网络Python深度学习
import numpy import scipy.special import matplotlib.pyplot as plt import scipy.misc import glob impo ...
- 六.随机神经网络Boltzmann(玻尔兹曼机)
Hopfield网络具有最优计算功能,然而网络只能严格按照能量函数递减方式演化,很难避免伪状态的出现,且权值容易陷入局部极小值,无法收敛于全局最优解. 如果反馈神经网络的迭代过程不是那么死板,可以在一 ...
随机推荐
- 优化 ExpressRoute 路由
当你有多个 ExpressRoute 线路时,可以通过多个路径连接到 Azure.结果就是,你所采用的路由可能不是最理想的 - 也就是说,你的流量可能会经历较长的路径才能到达 Azure,而 Azur ...
- 执行相应操作后,将表单及table中数据清空
使用 ccms.util.clearForm('要清空的表单的id'); $("#table中显示数据部分的id").empty();
- Linux 下 python如何配置virtualenv
.安装virtualenv pip3 install virtualenv pip install -i https://pypi.tuna.tsinghua.edu.cn/simple virtua ...
- javascript版format函数,方便实现复杂字串连接
javascript版format函数,方便实现复杂字串连接 String.prototype.format = function () { var args = arguments; console ...
- 使用CAReplicatorLayer [1]
使用CAReplicatorLayer [1] 说明 https://developer.apple.com/library/ios/documentation/GraphicsImaging/Ref ...
- windows下搭建vue开发环境
Vue.js是一套构建用户界面的 “渐进式框架”.与其他重量级框架不同的是,Vue 采用自底向上增量开发的设计.Vue 的核心库只关注视图层,并且非常容易学习,非常容易与其它库或已有项目整合.2016 ...
- (1)抽象类 (2)接口 (3)内部类 (4)Object类
1.抽象类(重点)1.1 抽象方法的概念 抽象方法就是指不能具体实现的方法,也就是该方法没有方法体,使用abstract关键字修饰如: public abstract void cry(); 1.2 ...
- 多线程操作C++ STL vector出现概率coredump问题及尽量避免锁的双缓冲队列
多线程操作全局变量,必须考虑同步问题,否则可能出现数据不一致, 甚至触发coredump. 前段时间, 遇到一个多线程操作了全局的vector的问题, 程序崩了.场景是这样的:某全局配置参数保存在一 ...
- Django 自定义模板标签和过滤器
1.创建一个模板库 使用模板过滤器的时候,直接把过滤器写在app里,例如:在app里新建一个templatetags的文件夹,这个目录应当和 models.py . views.py 等处于同一层次. ...
- python第十四课--排序及自定义函数之案例二:冒泡排序
案例二:冒泡排序 lt1=[45,12,56,-32,-3,44,75,-22,100] print('排序前:'+str(lt1)) 自定义函数:实现冒泡排序(升序)原则:1).有没有形参?有,接受 ...