(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. Oracle EBS APP-FND-02938 多组织例程初始化产品报错

    Oralce EBS R12中引入了MOAC的控制,所有多OU的表对象都添加了数据库VPD的控制策略,需要访问这些对象中的数据,首先需要进行多组织环境的初始化,但是如果客户化的应用中也需要具备多OU的 ...

  2. 转:socket

    最近浏览了几篇有关Socket发送消息的文章,发现大家对Socket Send方法理解有所偏差,现将自己在开发过程中对Socket的领悟写出来,以供大家参考. (一)架构 基于TCP协议的Socket ...

  3. XtraEditors三、LookUpEdit、GridLookUpEdit、SearchLookUpEdit

    https://documentation.devexpress.com/WindowsForms/DevExpress.XtraEditors.LookUpEditBase.class 一.Look ...

  4. Call to undefined function mysqli_connect() in xx.连接数据库出现mysqli_connect()未定义的问题。

    这个是我在执行php代码的时候出现的一个错误,我在网上查了好久,也按照网上常用的方法去修改,都没有效果. 例如:1.新建一个php文件: <?php print phpinfo(); ?> ...

  5. Android进阶笔记18:Android 获取Button的高度、宽度、坐标值

    1. 问题 如何获取一个控件的长和高,相信很多朋友第一眼看见这个问题都会觉得很简单,直接在onCreate里面调用getWidth.getMeasuredWidth不就可以获得了吗,但是,事实上是并没 ...

  6. MySQL管理.md

    用户管理 创建 举例 mysql> create user test@localhost identified by 'password'; Query OK, 0 rows affected ...

  7. iOS 开源库系列 Aspects核心源码分析---面向切面编程之疯狂的 Aspects

    Aspects的源码学习,我学到的有几下几点 Objective-C Runtime 理解OC的消息分发机制 KVO中的指针交换技术 Block 在内存中的数据结构 const 的修饰区别 block ...

  8. Spring常用jar包的功能

    jar名称 描述 spring-framework.jar spring框架比较完整的功能,core+aop+ioc+transaction spring-core.jar 基本上的核心工具类,一些u ...

  9. jQuery事件处理

    浏览器的事件模型 DOM第0级事件模型 Event实例 他的属性提供了关于当前正被处理的已触发事件的大量信息.这包括一些细节,比如在哪个元素上触发的事件.鼠标事件的坐标以及键盘事件中单击了哪个键. 事 ...

  10. [SDOI2017]切树游戏

    题目 二轮毒瘤题啊 辣鸡洛谷竟然有卡树剖的数据 还是\(loj\)可爱 首先这道题没有带修,设\(dp_{i,j}\)表示以\(i\)为最高点的连通块有多少个异或和为\(j\),\(g_{i,j}=\ ...