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网络具有最优计算功能,然而网络只能严格按照能量函数递减方式演化,很难避免伪状态的出现,且权值容易陷入局部极小值,无法收敛于全局最优解. 如果反馈神经网络的迭代过程不是那么死板,可以在一 ...
随机推荐
- 我的第一个springboot应用+maven依赖管理
第一步:使用Eclipse创建maven工程SpringBootFirst:工程目录如下 第二步:编写依赖文件pom.xml <project xmlns="http://maven. ...
- sql标量函数与表值函数
标量函数 ),)) returns int as begin return (select UserID from UserInfo where UserName=@UserName and User ...
- Element对象 常用属性与常用方法
常用属性 .children 子元素列表 .childElementCount 子元素数量 .firstElementChild 第一个子元素 .lastElementChild 最后一个子元素 .c ...
- centos安装不上的问题
Installing VMware Tools, please wait...mount: special device /dev/hda does not existmount: block dev ...
- vue 校验插件 veeValidate使用
1.内置的校验规则 after{target} - 比target要大的一个合法日期,格式(DD/MM/YYYY) alpha - 只包含英文字符 alpha_dash - 可以包含英文.数字.下 ...
- 代理错误[WinError 10061]
操作过程: import urllib.request from urllib.error import URLError,HTTPError proxy_handler = urllib.reque ...
- SharePoint 改动passwordWeb Part部署方案
版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/u012025054/article/details/31773231 SharePoint 改动pa ...
- Python全栈开发:list 、tuple以及dict的总结
总结: 列表:增:append(),inset(),extend() 删:pop(),remove(),clear(),del 改:a.通过指定元素和切片重新赋值.b.可以使用repelace替换列表 ...
- JS判断指定dom元素是否在屏幕内的方法实例
前言 刷网页的时候,有时会遇到这样一个情景,当某个dom元素滚到可见区域时,或者图片的懒加载效果,它就会展现显示动画,十分有趣.那么这是如何实现的呢? 实现原理 想要实现这个功能,就要知道具体的实现原 ...
- kubernetes dns 初步理解和使用 dnsmasq dns服务器跟host机器同步
1.安装DNS后,pod就可以通过dns来解析service,从而实现通信 2.创建一个dns测试工具pod apiVersion: extensions/v1beta1 kind: Deployme ...