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

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. 【起航计划 023】2015 起航计划 Android APIDemo的魔鬼步伐 22 App->Menu->Inflate from XML 使用xml资源展示菜单

    本例MenuInflateFromXml.java演示了如何从Menu 资源(XML 定义)展开菜单项.这个例子的onCreate 采用了使用代码来创建Activity 界面的方法 而通常的方法是采用 ...

  2. 【从业余项目中学习2】C# 实现调用Matlab函数(Visual Studio:2008, Matlab:R2009a)

    最近正在给客户做的个人项目,要求实现C#与Matlab之间的调用,即C# winform界面收集用户输入的参数,将参数传递给Matlab的算法计算,Matlab函数返回的结果显示在winform界面上 ...

  3. springboot 修改和设置 banner

    springboot 修改和设置 banner 先上图 修改步骤 1.在src/main/resources下新建一个banner.txt文档 2.通过http://patorjk.com/softw ...

  4. Windows下hosts文件的作用

    原文地址:https://my.oschina.net/u/874225/blog/194348 在操作系统中的路径:Win7在C:\Windows\System32\drivers\etc目录下 内 ...

  5. JavaScript 正则表单验证(用户名、密码、确认密码、手机号、座机号、身份证号)

    1.关于JavaScript表单验证,如果使用双向绑定的前端js框架,会更容易的多.但是博主还是建议大家不要脱离源生js本身.因为源生js才是王道. 注意: a.代码中的错误提示可能会没有,在代码中找 ...

  6. April 11 2017 Week 15 Tuesday

    Love is hard to get into, but harder to get out of. 相爱不易,相忘更难. The past are hurt, but I think we can ...

  7. *205. Isomorphic Strings (string & map idea)

    Given two strings s and t, determine if they are isomorphic. Two strings are isomorphic if the chara ...

  8. python 面向对象(二)--访问限制

    在Class内部,可以有属性和方法,而外部代码可以通过直接调用实例变量的方法来操作数据,这样,就隐藏了内部的复杂逻辑. 但是,从前面Student类的定义来看,外部代码还是可以自由地修改一个实例的na ...

  9. 剑指offer28 字符串的排列

    1.全局变量可以在最后去定义并初始化,不一定非要在开头 2.此题有一种特殊情况需要考虑,比如字符串是“aa”,那输出应该是“aa”,而不是“aa,aa”,即相同的不输出.实现这个处理用了c++中的容器 ...

  10. django验证码功能

    1.目的 现在我们一般访问网页都需要输入验证码,比如博客园,有的甚至是通过手机验证码实时登录.这样做的目的主要还是为了防止其他人的恶意访问,比如爬虫,下面就来看看验证码是如何实现的 2.StringI ...