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

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. 权限修饰符(public、protected、default、private)权限验证

    一.测试方法 在authorityTest包中建类AuthorityValidate package authorityTest; public class AuthorityValidate { p ...

  2. Android Studio 小技巧(1):如何导入AAR文件

    1. 导入AAR.JAR文件 File- > New -> New Module 这样子AAR文件就导入了,然后在app中的build.gradle中做如下添加 dependencies ...

  3. SQL Stored Procedure and Function

    Anything can be programmable with defined syntax and common lib. )) -- Add the parameters for the st ...

  4. Thinkphp 出现 “_CACHE_WRITE_ERROR” 错误的可能解决办法

    有可能是老毛病: Cache文件夹和里面的文件,php没有权限 解决办法: chmod -R 777 /.............../www/Cache

  5. react-native —— 在Mac上搭建React Native Android开发环境

    需要:JDK,Android SDK,Node.js   1.安装JDK 去Java官网下载列表选择Mac OS X x64版   2.安装Android SDK 虽然现在谷歌推荐使用Android ...

  6. JavaScript 事件兼容性写法

    1.以下是JavaScript事件兼容性写法,使用者可以随意使用,兼容所有浏览器.包括IE6(亲测) <!DOCTYPE html> <html> <head> & ...

  7. bzoj1801 [Ahoi2009]中国象棋

    Description 在N行M列的棋盘上,放若干个炮可以是0个,使得没有任何一个炮可以攻击另一个炮. 请问有多少种放置方法,中国像棋中炮的行走方式大家应该很清楚吧. Input 一行包含两个整数N, ...

  8. Ubuntu 16.04 安装札记

    写在前面的话:第一次写,有点紧张,不知道怎么写,就胡乱写了,主要是写给自己看的,感觉这里大神遍地都是,大牛更是数不胜数,我就一小白,记下来怕以后忘了,言归正传,我初步打算是把这篇博客写成安装指南(捂脸 ...

  9. C# unchecked运算符

    一.C# unchecked运算符 unchecked运算符用于取消整型算术运算和转换的溢出检查. 二.提示 默认情况下,都是unchecked选项.因此,只有在需要把几个未检查的代码行放在一个明确标 ...

  10. PowerDesigner 图表导出Excel格式

    快捷方式打开运行界面:ctrl+shift+X '*************************************************************************** ...