上面我们说了神经网络的基础知识,根据上章的基础尝试搭建一个标准的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 = & * E * 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. 神经网络与深度学习三:编写单隐层神经网络

    三:编写单隐层神经网络 1 神经网络概述 这篇文章你会学到如何实现一个神经网络,在我们深入学习技术细节之前,现在先大概快速的了解一下如何实现神经网络,如果你对某些内容不甚理解(后面的文章中会深入其中的 ...

  2. DL之DNN:自定义2层神经网络TwoLayerNet模型(计算梯度两种方法)利用MNIST数据集进行训练、预测

    DL之DNN:自定义2层神经网络TwoLayerNet模型(计算梯度两种方法)利用MNIST数据集进行训练.预测 导读 利用python的numpy计算库,进行自定义搭建2层神经网络TwoLayerN ...

  3. DeepLearning.AI第一部分第三周、 浅层神经网络(Shallow neural networks)

    文章目录 3.1 一些简单的介绍 3.2神经网络的表示Neural Network Representation 3.3计算一个神经网络的输出Computing a Neural Network's ...

  4. python 神经网络工具_神经网络15分钟入门!使用python从零开始写一个两层神经网络...

    本篇是该系列的第三篇,建议在阅读本篇文章之前先看前两篇文章. 在本文中将使用python实现之前描述的两层神经网络,并完成所提出的"象限分类"的问题. 需要注意的是,虽然标题叫做神 ...

  5. 深度学习-吴恩达-笔记-4-深层神经网络

    目录 深层神经网络 前向传播和反向传播 深层网络中的前向传播 核对矩阵的维数 为什么使用深层表示 搭建神经网络块 参数 VS 超参数 深度学习和大脑的关联性 [此为本人学习吴恩达的深度学习课程的笔记记 ...

  6. 实验二 单隐层神经网络

    一.实验目的 (1)学习并掌握常见的机器学习方法: (2)能够结合所学的python知识实现机器学习算法: (3)能够用所学的机器学习算法解决实际问题. 二.实验内容与要求 (1)掌握神经网络的基本原 ...

  7. 排序层-深度模型-2015:AutoRec【单隐层神经网络推荐模型】

    AutoRec模型是2015年由澳大利亚国立大学提出的. 它将 自编码器(AutoEncoder ) 的思想和协同过滤结合,提出了一种单隐层神经网络 推荐模型.因其简洁的网络结构和清晰易懂的模型原理, ...

  8. 深度学习入门笔记(六):浅层神经网络

    专栏--深度学习入门笔记 声明 1)该文章整理自网上的大牛和机器学习专家无私奉献的资料,具体引用的资料请看参考文献. 2)本文仅供学术交流,非商用.所以每一部分具体的参考资料并没有详细对应.如果某部分 ...

  9. 使用浅层神经网络识别图片中的英文字母

    一.实验介绍 1.1 实验内容 本次实验我们正式开始我们的项目:使用神经网络识别图片中的英文字母. 激动人心的时刻到了,我们将运用神经网络的魔力,解决一个无法使用手工编程解决的问题.如果你(自认为)是 ...

  10. 吴恩达深度学习deeplearning.ai——第一门课:神经网络与深度学习——第三节:浅层神经网络

    3.1 神经网络概述(Neural Network Overview) 本章你将学习如何实现一个神经网络.在我们深入学习具体技术之前,我希望快速的带你预览一下本章你将会学到的东西.如果这个视频中的某些 ...

最新文章

  1. PrestaShop 网站后台配置(六)
  2. 嵌入式系统笔记之自动登录
  3. 委瑞内拉遭网络攻击全国停电,他们可能忽视哪些安全威胁?...
  4. Java官方相关资源文件的获取教程
  5. 关于WPF中TextBox使用SelectAll无效的问题的解决办法
  6. App 运营的指标具体都有哪些?(四)
  7. 9.带有返回值的函数
  8. linux 查看led设备,Linux下LedButton设备驱动——详细设计
  9. android百度输入法表情符号,分析Android 搜狗输入法在微信和QQ中发送图片和表情...
  10. 天津医科大学计算机科学与技术,天津医科大学生物医学工程学院
  11. 关于URL编码(转载)
  12. NSString (NSStringPathExtensions) 类的相关方法和属性梳理
  13. 【深入浅出通信原理-学习笔记】信源编码
  14. 经纬度转换 gcj02转wgs84
  15. 阿里拍卖全链路导购策略首次揭秘
  16. 小学二年级计算机课游戏,小学二年级适合玩的课堂游戏
  17. 关于Rost ContentMining 6.0情感分析出现空白的解决方案
  18. Oracle项目管理主数据之WBS
  19. 用传统流程图表示求解以下问题的算法有两个瓶子A和B
  20. python中xlrd模块

热门文章

  1. Security+ 学习笔记48 攻击框架
  2. 通解:HTTP超时,或者require TLS/SSL,亦或者conda install / update/ create Solving environment不停
  3. 动态路由之OSPF(开放式最短路径优先协议)
  4. NYOJ--71--独木舟上的旅行
  5. Verizon:2013年数据破坏调查报告(DBIR)【更新版】
  6. win2003server域控服务器安装及设置
  7. CentOS7虚拟机克隆,且成功互ping
  8. 博客园看到的很好的Linux网络编程技巧(此处一字不动的转载过来)
  9. mybatis获取自增主键的值
  10. go 中 = 与:= 区别