标准3层神经网络搭建Demo
上面我们说了神经网络的基础知识,根据上章的基础尝试搭建一个标准的3层神经网络,参考https://www.cnblogs.com/bestExpert/p/9128645.html
1.框架代码
1.>初始化函数 — 设定输入层节点、隐藏层节点、输出层节点的数量,设置学习率和各层的权重
2.>训练 — 学习给定训练集样本后,优化权重
3.>查询 — 给定输入,从输出节点给出答案
2.初始化网络
在init函数里面增加节点、学习率的初始化
3.权重--网络的核心
网路中最重要的部分是链接权重,我们使用这些权重来计算前馈信号、反向传播误差,并且在试图改进网路时优化链接权重本身。可以使用矩阵简明地表示权重,因为是三层结构,所以我们需要创建:
♦ 在输入层与隐藏层之间的连接权重矩阵Winput_hidden,大小为hidden_nodes乘以input_nodes
♦ 在隐藏层与输出层之间的连接权重矩阵Whidden_output,大小为output_nodes乘以hidden_nodes
我们使用 numpy.randon.rand(row,columns) 或者numpy.random.normal()生成权重
如下生成一个3*3大小,数值区间为±根号下hnodes的倒数
4.查询网络
query()函数接受神经网络的输入,返回网络的输出。需要传递来自输入层节点的输入信号,通过隐藏层,最后从输出层输出。当信号馈送至给定的隐藏层节点或输出层节点时,我们使用链接权重调节信号,还应用S激活函数抑制来自这些节点的信号。
1.>定义输入值为input_list,拆分成多维数组,利用python的nmpy.array(input_list,ndmin=2).T
2.>利用输入矩阵点乘于链接权重计算出隐藏层输出:Xhidden=Whidden_input * I ,在python中我们可以利用numpy.dot()来实现矩阵的点乘
3.>对输出矩阵应用激活函数:Ohidden=sigmoid(Xhidden),在python中我们可以利用scipy.special.expit(x)
隐藏层到输出层过程同上,整合之后代码如下:
5.训练网络:目的是根据误差优化权重
第一部分:针对给定的训练样本计算输出,这与我们刚刚在query()函数上所做的没什么区别
第二部分:将计算得到的输出与所需输出对比,使用差值来指导网络权重的更新。
第一部分和上面的一样,将不再细分,下来主要细分第二部分
1.>train()函数增加目标值列表参数,并转换成多维数组,方式同input的转换,在python中我们通过targets=numpy.array(target_input,ndmin=2).T
2.>计算输出层误差,为目标值减去输出值,output_errors=target-final_output
3.>计算得到隐藏层误差,errorhidden=weightThidden_output*erroroutput,在python中我们可以通过dot()方法计算矩阵点乘得到hidden_errors
4.>计算隐藏层到输出层的权重变化量,根据公式ΔWJ,K = & * Ek * sigmoid( Ofinal_input) * (1 - sigmoid(Ofinal_input)) • OjT ,&为学习率,sigmoid为激活函数,Oj为输出值的输入矩阵
5.>计算输入层到隐藏层的权重变化量,同上。
总结前面5步如下:
一个简单的3层神经网络就搭建完了,这些代码可用于创建、训练、查询3层神经网络,进行几乎任何任务,下面我们将进行特定任务,学习识别手写数字,上面的代码合起来如下:
import numpy as npimport scipy.special as spc class neuralNetwork: def __init__(self, inputnodes, hiddennodes, outputnodes, learningrate): self.inodes = inputnodes self.hnodes = hiddennodes self.onodes = outputnodes self.lr = learningrate self.wih = np.random.normal(0.0, pow(self.hnodes, -0.5), (self.hnodes, self.inodes)) self.who = np.random.normal(0.0, pow(self.onodes, -0.5), (self.onodes, self.hnodes)) self.activation_function = lambda x: spc.expit(x) pass def train(self, input_list, target_list): inputs = np.array(input_list, ndmin=2).T hidden_input = np.dot(self.wih, input) hidden_output = self.activation_function(hidden_input) final_input = np.dot(self.who, hidden_output) final_output = self.activation_function(final_input) targets = np.array(target_list, ndmin=2).T output_error = targets - final_output hidden_errors = np.dot(self.who.T, output_error) self.who += self.lr * np.dot(output_error * final_output * (1.0 - final_output), np.transpose(hidden_output)) self.wih += self.lr * np.dot(hidden_errors * hidden_output * (1.0 - hidden_output), np.transpose(inputs)) pass def query(self, input_list): inputs = np.array(input_list, ndmin=2).T hidden_input = np.dot(self.wih, inputs) hidden_output = self.activation_function(hidden_input) final_input = np.dot(self.who, hidden_output) final_output = self.activation_function(final_input) return final_output 也可以在github上面下载,里面有详细的注释:https://github.com/pythonAndAI/nerve-net/tree/master/threeLayerDome
转载于:https://www.cnblogs.com/bestExpert/p/9248353.html
标准3层神经网络搭建Demo相关推荐
- 神经网络与深度学习三:编写单隐层神经网络
三:编写单隐层神经网络 1 神经网络概述 这篇文章你会学到如何实现一个神经网络,在我们深入学习技术细节之前,现在先大概快速的了解一下如何实现神经网络,如果你对某些内容不甚理解(后面的文章中会深入其中的 ...
- DL之DNN:自定义2层神经网络TwoLayerNet模型(计算梯度两种方法)利用MNIST数据集进行训练、预测
DL之DNN:自定义2层神经网络TwoLayerNet模型(计算梯度两种方法)利用MNIST数据集进行训练.预测 导读 利用python的numpy计算库,进行自定义搭建2层神经网络TwoLayerN ...
- DeepLearning.AI第一部分第三周、 浅层神经网络(Shallow neural networks)
文章目录 3.1 一些简单的介绍 3.2神经网络的表示Neural Network Representation 3.3计算一个神经网络的输出Computing a Neural Network's ...
- python 神经网络工具_神经网络15分钟入门!使用python从零开始写一个两层神经网络...
本篇是该系列的第三篇,建议在阅读本篇文章之前先看前两篇文章. 在本文中将使用python实现之前描述的两层神经网络,并完成所提出的"象限分类"的问题. 需要注意的是,虽然标题叫做神 ...
- 深度学习-吴恩达-笔记-4-深层神经网络
目录 深层神经网络 前向传播和反向传播 深层网络中的前向传播 核对矩阵的维数 为什么使用深层表示 搭建神经网络块 参数 VS 超参数 深度学习和大脑的关联性 [此为本人学习吴恩达的深度学习课程的笔记记 ...
- 实验二 单隐层神经网络
一.实验目的 (1)学习并掌握常见的机器学习方法: (2)能够结合所学的python知识实现机器学习算法: (3)能够用所学的机器学习算法解决实际问题. 二.实验内容与要求 (1)掌握神经网络的基本原 ...
- 排序层-深度模型-2015:AutoRec【单隐层神经网络推荐模型】
AutoRec模型是2015年由澳大利亚国立大学提出的. 它将 自编码器(AutoEncoder ) 的思想和协同过滤结合,提出了一种单隐层神经网络 推荐模型.因其简洁的网络结构和清晰易懂的模型原理, ...
- 深度学习入门笔记(六):浅层神经网络
专栏--深度学习入门笔记 声明 1)该文章整理自网上的大牛和机器学习专家无私奉献的资料,具体引用的资料请看参考文献. 2)本文仅供学术交流,非商用.所以每一部分具体的参考资料并没有详细对应.如果某部分 ...
- 使用浅层神经网络识别图片中的英文字母
一.实验介绍 1.1 实验内容 本次实验我们正式开始我们的项目:使用神经网络识别图片中的英文字母. 激动人心的时刻到了,我们将运用神经网络的魔力,解决一个无法使用手工编程解决的问题.如果你(自认为)是 ...
- 吴恩达深度学习deeplearning.ai——第一门课:神经网络与深度学习——第三节:浅层神经网络
3.1 神经网络概述(Neural Network Overview) 本章你将学习如何实现一个神经网络.在我们深入学习具体技术之前,我希望快速的带你预览一下本章你将会学到的东西.如果这个视频中的某些 ...
最新文章
- PrestaShop 网站后台配置(六)
- 嵌入式系统笔记之自动登录
- 委瑞内拉遭网络攻击全国停电,他们可能忽视哪些安全威胁?...
- Java官方相关资源文件的获取教程
- 关于WPF中TextBox使用SelectAll无效的问题的解决办法
- App 运营的指标具体都有哪些?(四)
- 9.带有返回值的函数
- linux 查看led设备,Linux下LedButton设备驱动——详细设计
- android百度输入法表情符号,分析Android 搜狗输入法在微信和QQ中发送图片和表情...
- 天津医科大学计算机科学与技术,天津医科大学生物医学工程学院
- 关于URL编码(转载)
- NSString (NSStringPathExtensions) 类的相关方法和属性梳理
- 【深入浅出通信原理-学习笔记】信源编码
- 经纬度转换 gcj02转wgs84
- 阿里拍卖全链路导购策略首次揭秘
- 小学二年级计算机课游戏,小学二年级适合玩的课堂游戏
- 关于Rost ContentMining 6.0情感分析出现空白的解决方案
- Oracle项目管理主数据之WBS
- 用传统流程图表示求解以下问题的算法有两个瓶子A和B
- python中xlrd模块
热门文章
- Security+ 学习笔记48 攻击框架
- 通解:HTTP超时,或者require TLS/SSL,亦或者conda install / update/ create Solving environment不停
- 动态路由之OSPF(开放式最短路径优先协议)
- NYOJ--71--独木舟上的旅行
- Verizon:2013年数据破坏调查报告(DBIR)【更新版】
- win2003server域控服务器安装及设置
- CentOS7虚拟机克隆,且成功互ping
- 博客园看到的很好的Linux网络编程技巧(此处一字不动的转载过来)
- mybatis获取自增主键的值
- go 中 = 与:= 区别