Boltzmann机神经网络python实现

(python 3)

  1 import numpy
  2 from scipy import sparse as S
  3 from matplotlib import pyplot as plt
  4 from scipy.sparse.csr import csr_matrix
  5 import pandas
  6
  7 def normalize(x):
  8     V = x.copy()
  9     V -= x.min(axis=1).reshape(x.shape[0],1)
 10     V /= V.max(axis=1).reshape(x.shape[0],1)
 11     return V
 12
 13 def sigmoid(x):
 14     #return x*(x > 0)
 15     #return numpy.tanh(x)
 16     return 1.0/(1+numpy.exp(-x))
 17
 18 class RBM():
 19     def __init__(self, n_visible=None, n_hidden=None, W=None, learning_rate = 0.1, weight_decay=1,cd_steps=1,momentum=0.5):
 20         if W == None:
 21             self.W =  numpy.random.uniform(-.1,0.1,(n_visible,  n_hidden)) / numpy.sqrt(n_visible + n_hidden)
 22             self.W = numpy.insert(self.W, 0, 0, axis = 1)
 23             self.W = numpy.insert(self.W, 0, 0, axis = 0)
 24         else:
 25             self.W=W
 26         self.learning_rate = learning_rate
 27         self.momentum = momentum
 28         self.last_change = 0
 29         self.last_update = 0
 30         self.cd_steps = cd_steps
 31         self.epoch = 0
 32         self.weight_decay = weight_decay
 33         self.Errors = []
 34
 35
 36     def fit(self, Input, max_epochs = 1, batch_size=100):
 37         if isinstance(Input, S.csr_matrix):
 38             bias = S.csr_matrix(numpy.ones((Input.shape[0], 1)))
 39             csr = S.hstack([bias, Input]).tocsr()
 40         else:
 41             csr = numpy.insert(Input, 0, 1, 1)
 42         for epoch in range(max_epochs):
 43             idx = numpy.arange(csr.shape[0])
 44             numpy.random.shuffle(idx)
 45             idx = idx[:batch_size]
 46
 47             self.V_state = csr[idx]
 48             self.H_state = self.activate(self.V_state)
 49             pos_associations = self.V_state.T.dot(self.H_state)
 50
 51             for i in range(self.cd_steps):
 52               self.V_state = self.sample(self.H_state)
 53               self.H_state = self.activate(self.V_state)
 54
 55             neg_associations = self.V_state.T.dot(self.H_state)
 56             self.V_state = self.sample(self.H_state)
 57
 58             # Update weights.
 59             w_update = self.learning_rate * ((pos_associations - neg_associations) / batch_size)
 60             total_change = numpy.sum(numpy.abs(w_update))
 61             self.W += self.momentum * self.last_change  + w_update
 62             self.W *= self.weight_decay
 63
 64             self.last_change = w_update
 65
 66             RMSE = numpy.mean((csr[idx] - self.V_state)**2)**0.5
 67             self.Errors.append(RMSE)
 68             self.epoch += 1
 69             print("Epoch %s: RMSE = %s; ||W||: %6.1f; Sum Update: %f" % (self.epoch, RMSE, numpy.sum(numpy.abs(self.W)), total_change))
 70         return self
 71
 72     def learning_curve(self):
 73         plt.ion()
 74         #plt.figure()
 75         plt.show()
 76         E = numpy.array(self.Errors)
 77         plt.plot(pandas.rolling_mean(E, 50)[50:])
 78
 79     def activate(self, X):
 80         if X.shape[1] != self.W.shape[0]:
 81             if isinstance(X, S.csr_matrix):
 82                 bias = S.csr_matrix(numpy.ones((X.shape[0], 1)))
 83                 csr = S.hstack([bias, X]).tocsr()
 84             else:
 85                 csr = numpy.insert(X, 0, 1, 1)
 86         else:
 87             csr = X
 88         p = sigmoid(csr.dot(self.W))
 89         p[:,0]  = 1.0
 90         return p
 91
 92     def sample(self, H, addBias=True):
 93         if H.shape[1] == self.W.shape[0]:
 94             if isinstance(H, S.csr_matrix):
 95                 bias = S.csr_matrix(numpy.ones((H.shape[0], 1)))
 96                 csr = S.hstack([bias, H]).tocsr()
 97             else:
 98                 csr = numpy.insert(H, 0, 1, 1)
 99         else:
100             csr = H
101         p = sigmoid(csr.dot(self.W.T))
102         p[:,0] = 1
103         return p
104
105 if __name__=="__main__":
106     data = numpy.random.uniform(0,1,(100,10))
107     rbm = RBM(10,15)
108     rbm.fit(data,1000)
109     rbm.learning_curve()
时间: 2024-10-09 21:56:48

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

限制Boltzmann机(Restricted Boltzmann Machine)

限制Boltzmann机(Restricted Boltzmann Machine) 起源:Boltzmann神经网络 Boltzmann神经网络的结构是由Hopfield递归神经网络改良过来的,Hopfield中引入了统计物理学的能量函数的概念. 即,cost函数由统计物理学的能量函数给出,随着网络的训练,能量函数会逐渐变小. 可视为一动力系统,其能量函数的极小值对应系统的稳定平衡点. Hinton发明的Boltzmann中乘热打铁,对神经元输出引入了随机概率重构的概念.其想法来自于模拟退火算

神经网络python 实现

感知器学习算法步骤如下: 1.对权系数w置初值 对权系数w=(W1 .W2 ,-,Wn ,Wn+1 )的各个分量置一个较小的零随机值,但Wn+1 = -g.并记为Wl (0),W2 (0),-,Wn (0),同时有Wn+1(0)=-θ .这里Wi (t)为t时刻从第i个 输入上的权系数,i=1,2,-,n.Wn+1 (t)为t时刻时的阀值. 图1-10 感知器的分类例子 2.输入一样本X=(X1 ,X2 ,-,Xn+1 )以及它的期望输出d. 期望输出值d在样本的类属不同时取值不同.如果x是A类

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

相信各位对堡垒机(跳板机)不陌生,为了保证服务器安全,前面加个堡垒机,所有ssh连接都通过堡垒机来完成,堡垒机也需要有 身份认证,授权,访问控制,审计等功能,笔者用Python基本实现了上述功能. AD:2014WOT全球软件技术峰会北京站 课程视频发布 11月21日-22日 与WOT技术大会相约深圳 现在抢票 相信各位对堡垒机(跳板机)不陌生,为了保证服务器安全,前面加个堡垒机,所有ssh连接都通过堡垒机来完成,堡垒机也需要有 身份认证,授权,访问控制,审计等功能,笔者用Python基本实现了

入门神经网络-Python 实现(下)

回顾 紧接着上篇, 整到了, MES的公式和代码的实现. \(MSE = \frac {1}{n} \sum\limits_{i=1}^n (y_i - \hat y_i)^2\) n 表示样本数, 这里为 4 y 表示要预测的变量, 这里是 性别 训练的约束, 就是使得 MSE 的值尽可能小. -> 求解参数 MSE 的工作机制, 举个栗子, 假设网络的纵输出是 0, 也就是预测所有的 小伙伴都是 妹子. 姓名 \(y_i\) (真实值) \(\hat y_i\) (预测值) \((y_i -

补充(代码)-入门神经网络-Python 实现(下)

回顾 紧接着上篇, 整到了, MES的公式和代码的实现. \(MSE = \frac {1}{n} \sum\limits_{i=1}^n (y_i - \hat y_i)^2\) n 表示样本数, 这里为 4 y 表示要预测的变量, 这里是 性别 训练的约束, 就是使得 MSE 的值尽可能小. -> 求解参数 MSE 的工作机制, 举个栗子, 假设网络的纵输出是 0, 也就是预测所有的 小伙伴都是 妹子. 姓名 \(y_i\) (真实值) \(\hat y_i\) (预测值) \((y_i -

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

1 from numpy import array, append, vstack, transpose, reshape, 2 dot, true_divide, mean, exp, sqrt, log, 3 loadtxt, savetxt, zeros, frombuffer 4 from numpy.linalg import norm, lstsq 5 from multiprocessing import Process, Array 6 from random import sa

手写神经网络Python深度学习

import numpy import scipy.special import matplotlib.pyplot as plt import scipy.misc import glob import imageio import scipy.ndimage class neuralNetWork: def __init__(self,inputnodes,hiddennodes,outputnodes,learningrate): self.inodes = inputnodes self

Python 优雅获取本机 IP 方法

见过很多获取服务器本地IP的代码,个人觉得都不是很好,例如以下这些 不推荐:靠猜测去获取本地IP方法 #!/usr/bin/env python # -*- coding: utf-8 -*- import socket import fcntl import struct def get_ip_address(ifname): s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) return socket.inet_ntoa(fcntl.i

详细解读神经网络十大误解,再也不会弄错它的工作原理

来源:http://www.cstor.cn/textdetail_10544.html_biz=MjM5OTA1MDUyMA==&mid=407358558&idx=2&sn=b21877f23bf4063fa311185009c1f0b7&scene=0#wechat_redirect1462674382044 神经网络是机器学习算法中最流行和最强大的一类.但在作者看来,因为人们对神经网络工作原理存在误解,导致网络设计也很糟糕.所以这篇文章就对其中一些误解进行了讨论.