使用python制作神经网络——搭建框架
一.神经网络的大体结构可分为三个函数,分别如下:
1.初始化函数
设定输入层节点,隐藏层节点和输出层节点的数量。
2.训练
学习给定训练集样本后,优化权重。
3.查询
给定输入,从输出节点给出答案
所编写的代码框架可如下所示:
#神经网络类定义
class NeuralNetwork():
#初始化神经网络
def _init_():
pass #训练神经网络
def train():
pass #查询神经网络
def query():
pass
二.初始化网络
需要设置输入层节点,隐藏层节点和输出层节点的数量,同时不要忘记设置学习率。
def _init_(self,inputnodes,hiddennodes,outputnodes,learningrate):
#设置输入层节点,隐藏层节点和输出层节点的数量
self.inodes = inputnodes
self.hnodes = hiddennodes
self.onodes = outputnodes
#学习率设置
self.lr = learningrate
pass
如果每层创建三个节点,学习率为0.5的小型神经网络对象则如下所示:
#设置每层节点个数为3个
input_nodes = 3
hidden_nodes = 3
output_nodes = 3
#设置学习率为0.5
learning_rate =0.5
#创建神经网络
n = NeuralNetwork(input_nodes,hidden_nodes,output_nodes,learning_rate)
三. 权重-网络的核心
简单而又比较流行的优化初始权重的方式是:使用正态概率分布采样权重,其中平均值为0,标准方差为节点传入链接数目的开方。
python中可用numpy.random.normal()函数来以正态分布的方式采样,其中初始化权重的代码如下所示:
self.wih = numpy.random.normal(0.0,pow(self.hnodes,-0.5),(self.hnodes,self.inodes))
self.who = numpy.random.normal(0.0,pow(self.onodes,-0.5),(self.onodes,self.hnodes))
我将正态分布的中心设置为0.0,与下一层中节点相关的标准方差为节点数目的-0.5次方,最后一个参数,是numpy数组的形状大小。
因为权重是神经网络的固有部分,与神经网络共存亡,它不是一个临时的数据集,不会随着函数调用结束而消失,因此,权重必须也是初始化的一部分,并且可以使用其他函数(如训练函数和查询函数)来访问。
四.查询网络
query()函数接受神经网络的输入,返回网络的输出,它需要来自输入层节点的输入信号,通过隐藏层,最后从输出层输出。
(1)第一步需要做的是输入的数据和输入层与隐藏层之间的权重矩阵相乘,得到传输到隐藏层的输入信号,可表示如下:
Xhidden = Winput_hidden * I
用python可表示为:
hidden_inputs= numpy.dot(self.wih,inputs)
(2)为了获得从隐藏层节点处出现的信号,需要增加激活函数sigmod()
Ohidden = sigmod(Xhidden)
python中的Scripy库中有此函数,可表示为:
import scripy.special
self.activation_function = lambda x:scripy.special.expit(x)
(3)隐藏层的输入输出呢?和上面的思路一样,可定义如下:
#计算到输出层的信号
final_inputs= numpy.dot(self.who,hidden_outputs)
final_outputs = self.activation_function(final_inputs)
至此,训练函数还没有完成,以上部分的完整代码如下:
import numpy
import scripy.special
#神经网络类定义
class NeuralNetwork():
#初始化神经网络
def _init_(self,inputnodes,hiddennodes,outputnodes,learningrate):
#设置输入层节点,隐藏层节点和输出层节点的数量
self.inodes = inputnodes
self.hnodes = hiddennodes
self.onodes = outputnodes
#学习率设置
self.lr = learningrate
#权重矩阵设置 正态分布
self.wih = numpy.random.normal(0.0,pow(self.hnodes,-0.5),(self.hnodes,self.inodes))
self.who = numpy.random.normal(0.0,pow(self.onodes,-0.5),(self.onodes,self.hnodes))
#激活函数设置,sigmod()函数
self.activation_function = lambda x:scripy.special.expit(x)
pass #训练神经网络
def train():
pass #查询神经网络
def query(self,input_list):
#转换输入列表到二维数组
inputs = numpy.array(input_list,ndmin = 2).T
#计算到隐藏层的信号
hidden_inputs= numpy.dot(self.wih,inputs)
#计算隐藏层输出的信号
hidden_outputs = self.activation_function(hidden_inputs)
#计算到输出层的信号
final_inputs= numpy.dot(self.who,hidden_outputs)
final_outputs = self.activation_function(final_inputs) return final_outputs #设置每层节点个数为3个
input_nodes = 3
hidden_nodes = 3
output_nodes = 3
#设置学习率为0.5
learning_rate =0.5
#创建神经网络
n = NeuralNetwork(input_nodes,hidden_nodes,output_nodes,learning_rate)
下面定义一个输入为:
print(n.query([1.0,0.5,-1.5]))
可看到程序的实际运行效果为:
[[0.65948789]
[0.4672955 ]
[0.66051158]]
输入是列表,输出也是一个列表。正确,但是这个输出没有实际意义,因为我们还没有训练网络。
使用python制作神经网络——搭建框架的更多相关文章
- python三大主流web框架之Django安装、项目搭建
这一篇我们将迎来python强大的web框架Django,相信大家都已经不陌生,本篇将介绍Django的安装及基础项目搭建,大神略过~ Django是需要我们手动pip安装的,首先我们来安装Djang ...
- python三大web框架Django,Flask,Flask,Python几种主流框架,13个Python web框架比较,2018年Python web五大主流框架
Python几种主流框架 从GitHub中整理出的15个最受欢迎的Python开源框架.这些框架包括事件I/O,OLAP,Web开发,高性能网络通信,测试,爬虫等. Django: Python We ...
- Django,Flask,Tornado三大框架对比,Python几种主流框架,13个Python web框架比较,2018年Python web五大主流框架
Django 与 Tornado 各自的优缺点Django优点: 大和全(重量级框架)自带orm,template,view 需要的功能也可以去找第三方的app注重高效开发全自动化的管理后台(只需要使 ...
- selenium + python 自动化测试环境搭建
selenium + python 自动化测试 —— 环境搭建 关于 selenium Selenium 是一个用于Web应用程序测试的工具.Selenium测试直接运行在浏览器中,就像真正的用户在操 ...
- 制作类似ThinkPHP框架中的PATHINFO模式功能(二)
距离上一次发布的<制作类似ThinkPHP框架中的PATHINFO模式功能>(文章地址:http://www.cnblogs.com/phpstudy2015-6/p/6242700.ht ...
- 使用python制作ArcGIS插件(2)代码编写
使用python制作ArcGIS插件(2)代码编写 by 李远祥 上一章节已经介绍了如何去搭建AddIn的界面,接下来要实现具体的功能,则到了具体的编程环节.由于使用的是python语言进行编程,则开 ...
- 使用python制作ArcGIS插件(1)工具介绍
使用python制作ArcGIS插件(1)工具介绍 by 李远祥 ArcGIS从10.0开始支持addin(ArcGIS软件中又叫作加载项)的方式进行插件制作.相对于以往9.x系列,addin的无论是 ...
- python+request接口自动化框架
python+request接口自动化框架搭建 1.数据准备2.用python获取Excel文件中测试用例数据3.通过requests测试接口4.根据接口返回的code值和Excel对比 但本章只讲整 ...
- python服务器环境搭建(2)——安装相关软件
在上一篇我们在本地的虚拟服务器上安装好CentOS7后,我们的python web服务.自定义的python service或python脚本需要在服务器上运行,还需要在服务器安装各种相关的软件才行, ...
随机推荐
- npm下载某个版本
如果我想要引入的是Jquery的1.7.2版本,则输入npm intall jquery@1.7.2,那么npm包管理器就会帮助你下载jquery1.7.2的版本到你当前操作目录下的node_modu ...
- 【起航计划 005】2015 起航计划 Android APIDemo的魔鬼步伐 04 App->Activity->Custom Dialog Dialog形式的Activity,Theme的使用,Shape的使用
App->Activity->Custom Dialog 例子使用Activity 来实现自定义对话框 类CustomDialogActivity本身无任何特别之处.关键的一点是其在And ...
- 关于 Android Studio 如何连接手机调试
第一步:设置-> 打开开发者选项,以及USB调试模式 第二步:关于手机->版本号,点击版本号会弹出提示:已经处于开发者模式,无需操作 第三步:设置->在搜索框中输入HDB,此时会弹出 ...
- [MedicalEndoscope]PFC介绍
PFC的英文全称为“Power Factor Correction”,意思是“功率因数校正”,功率因数指的是有效功率与总耗电量(视在功率)之间的关系,也就是有效功率除以总耗电量(视在功率)的比值. 基 ...
- vos设置禁止被叫特定号码段特定区域
问题: 为了防止卡线遭投诉被运营商停,给公司带来损失,对一些特定号段特定区域要进行限制,不让客户呼出 打开VOS3000 落地网关——补充设置——落地被叫前缀——禁止 添加禁止号段 具体案例: 如填写 ...
- 洛谷 P1849 [USACO12MAR]拖拉机Tractor
题目描述 After a long day of work, Farmer John completely forgot that he left his tractor in the middle ...
- 859. Buddy Strings (wrong 4 times so many cases to test and consider) if else**
Given two strings A and B of lowercase letters, return true if and only if we can swap two letters i ...
- 利用API设置桌面背景
实现效果: 知识运用: API函数SystemParametersInfo 实现代码: [DllImport("user32.dll", EntryPoint = "Sy ...
- 遍历ResultSet,行列要从1开始
为什么遍历ResultSet,行列要从1开始. 因为Resultset的第一行的第一列都是空的,要用rs.next()到第一行才能进行读取. Statement stmt=null; ResultS ...
- javaweb基础(39)_数据库连接池
一.应用程序直接获取数据库连接的缺点 用户每次请求都需要向数据库获得链接,而数据库创建连接通常需要消耗相对较大的资源,创建时间也较长.假设网站一天10万访问量,数据库服务器就需要创建10万次连接,极大 ...