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()
复制代码

 

本文转自罗兵博客园博客,原文链接:http://www.cnblogs.com/hhh5460/p/4319652.html ,如需转载请自行联系原作者
相关文章
|
14天前
|
机器学习/深度学习 人工智能 算法
植物病害识别系统Python+卷积神经网络算法+图像识别+人工智能项目+深度学习项目+计算机课设项目+Django网页界面
植物病害识别系统。本系统使用Python作为主要编程语言,通过收集水稻常见的四种叶片病害图片('细菌性叶枯病', '稻瘟病', '褐斑病', '稻瘟条纹病毒病')作为后面模型训练用到的数据集。然后使用TensorFlow搭建卷积神经网络算法模型,并进行多轮迭代训练,最后得到一个识别精度较高的算法模型,然后将其保存为h5格式的本地模型文件。再使用Django搭建Web网页平台操作界面,实现用户上传一张测试图片识别其名称。
65 21
植物病害识别系统Python+卷积神经网络算法+图像识别+人工智能项目+深度学习项目+计算机课设项目+Django网页界面
|
14天前
|
机器学习/深度学习 人工智能 算法
鸟类识别系统Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+ResNet50算法模型+图像识别
鸟类识别系统。本系统采用Python作为主要开发语言,通过使用加利福利亚大学开源的200种鸟类图像作为数据集。使用TensorFlow搭建ResNet50卷积神经网络算法模型,然后进行模型的迭代训练,得到一个识别精度较高的模型,然后在保存为本地的H5格式文件。在使用Django开发Web网页端操作界面,实现用户上传一张鸟类图像,识别其名称。
60 12
鸟类识别系统Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+ResNet50算法模型+图像识别
|
14天前
|
机器学习/深度学习 算法 TensorFlow
交通标志识别系统Python+卷积神经网络算法+深度学习人工智能+TensorFlow模型训练+计算机课设项目+Django网页界面
交通标志识别系统。本系统使用Python作为主要编程语言,在交通标志图像识别功能实现中,基于TensorFlow搭建卷积神经网络算法模型,通过对收集到的58种常见的交通标志图像作为数据集,进行迭代训练最后得到一个识别精度较高的模型文件,然后保存为本地的h5格式文件。再使用Django开发Web网页端操作界面,实现用户上传一张交通标志图片,识别其名称。
43 6
交通标志识别系统Python+卷积神经网络算法+深度学习人工智能+TensorFlow模型训练+计算机课设项目+Django网页界面
|
10天前
|
机器学习/深度学习 人工智能 算法
【新闻文本分类识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台
文本分类识别系统。本系统使用Python作为主要开发语言,首先收集了10种中文文本数据集("体育类", "财经类", "房产类", "家居类", "教育类", "科技类", "时尚类", "时政类", "游戏类", "娱乐类"),然后基于TensorFlow搭建CNN卷积神经网络算法模型。通过对数据集进行多轮迭代训练,最后得到一个识别精度较高的模型,并保存为本地的h5格式。然后使用Django开发Web网页端操作界面,实现用户上传一段文本识别其所属的类别。
22 1
【新闻文本分类识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台
|
6天前
|
机器学习/深度学习 数据采集 网络安全
使用Python实现深度学习模型:智能网络安全威胁检测
使用Python实现深度学习模型:智能网络安全威胁检测
28 5
|
9天前
|
数据采集 存储 JavaScript
构建您的第一个Python网络爬虫:抓取、解析与存储数据
【9月更文挑战第24天】在数字时代,数据是新的金矿。本文将引导您使用Python编写一个简单的网络爬虫,从互联网上自动抓取信息。我们将介绍如何使用requests库获取网页内容,BeautifulSoup进行HTML解析,以及如何将数据存储到文件或数据库中。无论您是数据分析师、研究人员还是对编程感兴趣的新手,这篇文章都将为您提供一个实用的入门指南。拿起键盘,让我们开始挖掘互联网的宝藏吧!
|
10天前
|
机器学习/深度学习 人工智能 算法
【果蔬识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台
【果蔬识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台。果蔬识别系统,本系统使用Python作为主要开发语言,通过收集了12种常见的水果和蔬菜('土豆', '圣女果', '大白菜', '大葱', '梨', '胡萝卜', '芒果', '苹果', '西红柿', '韭菜', '香蕉', '黄瓜'),然后基于TensorFlow库搭建CNN卷积神经网络算法模型,然后对数据集进行训练,最后得到一个识别精度较高的算法模型,然后将其保存为h5格式的本地文件方便后期调用。再使用Django框架搭建Web网页平台操作界面,实现用户上传一张果蔬图片识别其名称。
29 0
【果蔬识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台
|
12天前
|
网络协议 Python
网络世界的建筑师:Python Socket编程基础与进阶,构建你的网络帝国!
在数字宇宙中,网络如同复杂脉络连接每个角落,Python Socket编程则是开启这一世界的钥匙。本文将引导你从基础概念入手,逐步掌握Socket编程,并通过实战示例构建TCP/UDP服务器与客户端。你将学会使用Python的socket模块进行网络通信,了解TCP与UDP的区别,并运用多线程与异步IO提升服务器性能。跟随本文指引,成为网络世界的建筑师,构建自己的网络帝国。
25 2
|
13天前
|
网络协议 Python
告别网络编程迷雾!Python Socket编程基础与实战,让你秒变网络达人!
在网络编程的世界里,Socket编程是连接数据与服务的关键桥梁。对于初学者,这往往是最棘手的部分。本文将用Python带你轻松入门Socket编程,从创建TCP服务器与客户端的基础搭建,到处理并发连接的实战技巧,逐步揭开网络编程的神秘面纱。通过具体的代码示例,我们将掌握Socket的基本概念与操作,让你成为网络编程的高手。无论是简单的数据传输还是复杂的并发处理,Python都能助你一臂之力。希望这篇文章成为你网络编程旅程的良好开端。
36 3
|
13天前
|
数据采集 JSON API
🎓Python网络请求新手指南:requests库带你轻松玩转HTTP协议
本文介绍Python网络编程中不可或缺的HTTP协议基础,并以requests库为例,详细讲解如何执行GET与POST请求、处理响应及自定义请求头等操作。通过简洁易懂的代码示例,帮助初学者快速掌握网络爬虫与API开发所需的关键技能。无论是安装配置还是会话管理,requests库均提供了强大而直观的接口,助力读者轻松应对各类网络编程任务。
53 3
下一篇
无影云桌面