标准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 np
import 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
标准3层神经网络搭建Demo的更多相关文章
- 用标准3层神经网络实现MNIST识别
一.MINIST数据集下载 1.https://pjreddie.com/projects/mnist-in-csv/ 此网站提供了mnist_train.csv和mnist_test.cs ...
- C#进阶系列——DDD领域驱动设计初探(七):Web层的搭建
前言:好久没更新博客了,每天被该死的业务缠身,今天正好一个模块完成了,继续来完善我们的代码.之前的六篇完成了领域层.应用层.以及基础结构层的部分代码,这篇打算搭建下UI层的代码. DDD领域驱动设计初 ...
- Web层的搭建
Web层的搭建 前言:好久没更新博客了,每天被该死的业务缠身,今天正好一个模块完成了,继续来完善我们的代码.之前的六篇完成了领域层.应用层.以及基础结构层的部分代码,这篇打算搭建下UI层的代码. DD ...
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(2)-数据库访问层的设计Demo
原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(2)-数据库访问层的设计Demo ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) (1)框架搭建 前言:这 ...
- [DeeplearningAI笔记]神经网络与深度学习3.2_3.11(激活函数)浅层神经网络
觉得有用的话,欢迎一起讨论相互学习~Follow Me 3.2 神经网络表示 对于一个由输入层,隐藏层,输出层三层所组成的神经网络来说,输入层,即输入数据被称为第0层,中间层被称为第1层,输出层被称为 ...
- WCF快速搭建Demo
WCF快速搭建Demo ps:本Demo只是演示如何快速建立WCF 1.首先完成IBLL.BLL.Model层的搭建,由于数据访问层不是重点,WCF搭建才是主要内容,所以本Demo略去数据访问层. 新 ...
- ng-深度学习-课程笔记-4: 浅层神经网络(Week3)
1 神经网络概览( Neural Networks Overview ) 先来快速过一遍如何实现神经网络. 首先需要输入特征x,参数w和b,计算出z,然后用激活函数计算出a,在神经网络中我们要做多次这 ...
- DDD领域驱动设计初探(七):Web层的搭建
前言:好久没更新博客了,每天被该死的业务缠身,今天正好一个模块完成了,继续来完善我们的代码.之前的六篇完成了领域层.应用层.以及基础结构层的部分代码,这篇打算搭建下UI层的代码. DDD领域驱动设计初 ...
- 吴恩达《深度学习》-第一门课 (Neural Networks and Deep Learning)-第三周:浅层神经网络(Shallow neural networks) -课程笔记
第三周:浅层神经网络(Shallow neural networks) 3.1 神经网络概述(Neural Network Overview) 使用符号$ ^{[
随机推荐
- 并发系列(4)之 AbstractQueuedSynchronizer 源码分析
本文将主要讲述 AbstractQueuedSynchronizer 的内部结构和实现逻辑,在看本文之前最好先了解一下 CLH 队列锁,AbstractQueuedSynchronizer 就是根据 ...
- 杂牌机搞机之旅(二)————移植TWRP第三方Recovery并刷入
原本想把杂牌机作为android破解和开发的测试机,破解的话肯定是安装框架的嘛,毕竟有些是要涉及到脱壳 . 但是,我尝试安装xposed的时候,手机卡在了开机界面,也就是magisk出现了错误,如果想 ...
- Django学习之八:forms组件【对form舒心了】
目录 Django forms组件 bound and unbound form instance forms渲染有关 隐藏一个字段,不渲染它 form 校验 form类 ModelForm 利用Mo ...
- vue click事件 v-on:click
v-on:click <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo ...
- .net开源工作流引擎ccflow表单数据返回值Pop分组模式和表格模式对比
Pop分组模式和表格模式对比 关键词: 驰骋工作流引擎 表单引擎 ccflow .net开源工作流 jflow Java工作流引擎 驰骋工作流程快速开发平台 工作流程管理系统 工作流引擎 a ...
- 随笔:关于去年的WordPress建站的回忆
2018-02-26 建站 2018-02-28 选择主题Clearision 2018-03-01 学习插入视频.修改主题 <iframe src="//playe ...
- SpringBoot热部署-解决方案
在SpringBoot中启用热部署是非常简单的一件事,因为SpringBoot为我们提供了一个非常方便的工具spring-boot-devtools,我们只需要把这个工具引入到工程里就OK了,下面我就 ...
- [20190416]查看shared latch gets的变化.txt
[20190416]查看shared latch gets的变化.txt 1.环境:SYS@book> @ ver1PORT_STRING VERSION ...
- SQL 行转列 PIVOT 学习示例
CREATE TABLE [StudentScores] ( ), --学生姓名 ), --科目 [Score] FLOAT, --成绩 ) select * from [StudentScores] ...
- Redis基础一(Linux)
Redis概述 1.是一个开源的,先进的<key,value>存储,并用与构建高性能,可扩展的应用程序的完美解决方案 2.从它的许多竞争继承来的三个主要特点: l Redis数据库完全在 ...