一.神经网络的大体结构可分为三个函数,分别如下:

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制作神经网络——搭建框架的更多相关文章

  1. python三大主流web框架之Django安装、项目搭建

    这一篇我们将迎来python强大的web框架Django,相信大家都已经不陌生,本篇将介绍Django的安装及基础项目搭建,大神略过~ Django是需要我们手动pip安装的,首先我们来安装Djang ...

  2. python三大web框架Django,Flask,Flask,Python几种主流框架,13个Python web框架比较,2018年Python web五大主流框架

    Python几种主流框架 从GitHub中整理出的15个最受欢迎的Python开源框架.这些框架包括事件I/O,OLAP,Web开发,高性能网络通信,测试,爬虫等. Django: Python We ...

  3. Django,Flask,Tornado三大框架对比,Python几种主流框架,13个Python web框架比较,2018年Python web五大主流框架

    Django 与 Tornado 各自的优缺点Django优点: 大和全(重量级框架)自带orm,template,view 需要的功能也可以去找第三方的app注重高效开发全自动化的管理后台(只需要使 ...

  4. selenium + python 自动化测试环境搭建

    selenium + python 自动化测试 —— 环境搭建 关于 selenium Selenium 是一个用于Web应用程序测试的工具.Selenium测试直接运行在浏览器中,就像真正的用户在操 ...

  5. 制作类似ThinkPHP框架中的PATHINFO模式功能(二)

    距离上一次发布的<制作类似ThinkPHP框架中的PATHINFO模式功能>(文章地址:http://www.cnblogs.com/phpstudy2015-6/p/6242700.ht ...

  6. 使用python制作ArcGIS插件(2)代码编写

    使用python制作ArcGIS插件(2)代码编写 by 李远祥 上一章节已经介绍了如何去搭建AddIn的界面,接下来要实现具体的功能,则到了具体的编程环节.由于使用的是python语言进行编程,则开 ...

  7. 使用python制作ArcGIS插件(1)工具介绍

    使用python制作ArcGIS插件(1)工具介绍 by 李远祥 ArcGIS从10.0开始支持addin(ArcGIS软件中又叫作加载项)的方式进行插件制作.相对于以往9.x系列,addin的无论是 ...

  8. python+request接口自动化框架

    python+request接口自动化框架搭建 1.数据准备2.用python获取Excel文件中测试用例数据3.通过requests测试接口4.根据接口返回的code值和Excel对比 但本章只讲整 ...

  9. python服务器环境搭建(2)——安装相关软件

    在上一篇我们在本地的虚拟服务器上安装好CentOS7后,我们的python web服务.自定义的python service或python脚本需要在服务器上运行,还需要在服务器安装各种相关的软件才行, ...

随机推荐

  1. js的垃圾收集机制以及写代码如何处理

    程序都自己的内存,一旦内存过多就会清楚以前的缓存.所以,在写代码的时候,不要仅仅只会推变量到栈中,还要会将变量从栈中释放. 那么问题来了,我们应该如何将内存从栈中释放呢? 要释放变量,那就要从java ...

  2. jQuery 显示与隐藏 tab选项卡

    方法一:使用display样式:block.none来控制文本的显示与隐藏 <div class="explain_text"> 移动互联网为企业提供了连接用户的新方式 ...

  3. ansible的安装及命令相关模块

    ansible 第一步:下载epel源 curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos- ...

  4. 手把手教你用android studio创建第一个安卓程序加载html5页面(二)

    经过上一篇,我们已经可以打开html页面了,但是有很多细节方面的内容我们还需要调整. 打开链接的问题 细心的网友可能已经发现,打开百度页面后,点击顶部的链接,会在手机的浏览器中打开相应的页面,这显然不 ...

  5. Miner3D 数据分析软件

    现在,越来越多的专业人士愿意选择Miner3D来帮助他们进行快速高效的智能决策,因为它是一个功能强大.专业性强.海量数据存储能力.三维可视化效果逼真的数据分析解决工具.Miner3D凭借出色的图形质量 ...

  6. CSS中的鼠标样式明细

    <INPUT   TYPE="submit"   style="cursor:   hand"   value="hand">  ...

  7. Android触摸事件MotionEvent详解

    触摸事件MotionEvent在用户交互中,占着非常重要的地位.首先,来看看MotionEvent中封装的一些常用的事件常量,它定义了触摸事件的不同类型. 1.单点触摸按下动作 public stat ...

  8. Android开发由eclipse转Android Studio中一些常见出错问题解决方法

    1.给一个Activity添加了一个Dialog主题,结果出现了下面的问题,在eclipse却没有出错 <activity android:name=".DialogActivity& ...

  9. 分析一点python源代码

    偶然看了一下python的部分源代码,感觉python的作者写的代码真心很美,简洁美观,学习之. 举几个例子抛砖引玉一下: def removedirs(name): ""&quo ...

  10. HDFS文件操作(命令行)

    HDFS是一种分布式文件系统,为MapReduce这种框架下的海量数据分布式处理而设计. Hadoop之HDFS文件操作常有两种方式,一种是命令行方式,即Hadoop提供了一套与Linux文件命令类似 ...