简单神经网络的构建



参考文章:

https://www.zybuluo.com/hanbingtao/note/476663

https://www.zybuluo.com/hanbingtao/note/448086


# -*- coding: utf-8 -*-
import numpy as np
def sigmoid(x):#激活函数
    return 1/(1+np.exp(-x))
input1 = np.array([[0.35],[0.9],[0.58],[0.78]]) #输入数据  4x1
w1 = np.random.rand(3,4)#第一层权重参数                                    3x4
w2 = np.random.rand(2,3)#第二层权重参数                                    2x3
real = np.array([[0.5],[0.7]])#标签
for s in range(100):
    output1 = sigmoid(np.dot(w1,input1))#第一层输出  3x1
    output2 = sigmoid(np.dot(w2,output1))#第二层输出,也即是最终输出    2x1
    cost = np.square(real-output2)/2#误差      2x1
    delta2=output2*(1-output2)*(real-output2)          #2x1
    delta1=output1*(1-output1)*w2.T.dot(delta2)      #3x1
    w2 = w2 + delta2.dot(output1.T)                        #2x3
    w1 = w1 + delta1.dot(input1.T)                         #3x4
    print(output1)
    print(output2)
    print(cost)

代码剖析

def sigmoid(x):#激活函数
    return 1/(1+np.exp(-x))

定义激活sigmoid激活函数的定义:


output1 = sigmoid(np.dot(w1,input1))#第一层输出  3x1
output2 = sigmoid(np.dot(w2,output1))#第二层输出,也即是最终输出    2x1

第一层输出和第二层输出

第一层输出的计算方式是:

样本数据 左乘 权重

$\vec{a}=f(W\centerdot\vec{x})\qquad $

第二层类似,只不过替换为第一层的输出左乘权重


cost = np.square(real-output2)/2#误差      2x1

计算误差:$e=\frac{1}{2}(y-\bar{y})^2$

误差主要是用来衡量模型效果的


delta2=output2*(1-output2)*(real-output2)          #2x1
delta1=output1*(1-output1)*w2.T.dot(delta2)      #3x1

计算误差项:

误差项 主要是用来更新权重使用的

  • 对于输出层节点:

    $\delta_i=y_i(1-y_i)(t_i-y_i)\qquad$

    其中,$\delta_i$是节点$i$的误差项,$y_i$是节点$i$的输出值,$t_i$是样本对应于节点$i$的目标值

  • 对于隐藏层节点:

    $\delta_i=a_i(1-a_i)\sum_{k\in{outputs}}w_{ki}\delta_k\qquad$

    其中,$a_i$是节点的输出值,$w_{ki}$是节点$i$到它的下一层节点$k$的连接的权重,$\delta_k$是节点$i$的下一层节点$k$的误差项。例如,对于隐藏层节点4来说,计算方法如下:

    $\delta_4=a_4(1-a_4)(w_{84}\delta_8+w_{94}\delta_9)$


 w2 = w2 + delta2.dot(output1.T)                        #2x3
 w1 = w1 + delta1.dot(input1.T)                         #3x4

最后,更新每个连接上的权值:

$w_{ji}\gets w_{ji}+\eta\delta_jx_{ji}\qquad$

其中,$w_{ji}$是节点$i$到节点$j$的权重,$\eta$是一个成为学习速率的常数,$\delta_i$是节点$i$的误差项,$x_{ji}$是节点$i$传递给节点$j$的输入。例如,$w_{84}$权重的更新方法如下:

$w_{84}\gets w_{84}+\eta\delta_8 a_4$

原文地址:https://www.cnblogs.com/zfcode/p/9144338.html

时间: 2024-10-17 21:53:40

简单神经网络的构建的相关文章

简单神经网络初探

按照专业解释神经网络是:一种应用类似于大脑神经突触联接的结构进行信息处理的数学模型. 神经网络是智能控制技术的主要分支之一.本书的主要内容有:神经网络的概念,神经网络的分类与学习方法,前向神经网络模型及其算法,改进的BP网络及其控制.辨识建模,基于遗传算法的神经网络,基于模糊理论的神经网络,RBF网络及其在混沌背景下对微弱信号的测量与控制,反馈网络,Hopfield网络及其在字符识别中的应用,支持向量机及其故障诊断,小波神经网络及其在控制与辨识中的应用. 准备制作硬件,包括网络学习算法的研究.这

更简单的自动化构建

gulp:更简单的自动化构建工具 目前最流行的两种使用JavaScript开发的构建工具是Grunt和Gulp.为什么使用gulp?因为Gulp更简单.Grunt任务拥有大量的配置,会引用大量你实际上并不需要的对象属性,但是Gulp里同样的任务也许只有几行.有兴趣的同学在学完本文后对比使用Grunt,你就会发现Gulp的代码量是最少的. 安装 需要先安装node.js.这里安装的v5.11.0.使用node -v查看版本号. gulp的安装不是很顺利.按照官方给的安装方法: npm instal

tensorflow构建一个简单神经网络

使用Tensorflow实现一个简单的神经网络 输入数据: 输入数据的形状是[300, 1], 也就是每个元素有一个特征,所以输入神经元是一个. 隐藏层: 输出神经元10个.输出数据会成为[300, 10]的形状.也就是300个元素,每个元素的特征变成了10个. 激活函数使用Relu 输出层: 输出数据是[300, 1] 不使用激活函数 import tensorflow as tf import numpy as np import matplotlib.pyplot as plt # 添加层

学习pytorch-使用Torch搭建一个简单神经网络

a.pyimport torch import numpy as np #生成一个五行四列的二维矩阵 print(torch.Tensor(5, 4)) # 返回的数组大小是5x4的矩阵,初始化是0~1的均匀分布 x=torch.rand(5, 4) print(torch.randn(5, 4)) print(x) #查看x的形状 print(x.size()) # numpy 类似的返回5x4大小的矩阵 print(np.ones((5, 4))) # 类似的返回5x4大小的张量 print

数据挖掘——回归分析2——简单神经网络的python实现

神经网络(Artificial Neural Network):全称为人工神经网络(ANN),是一种模仿生物神经网络(动物的中枢神经系统,特别是大脑)的结构和功能的数学模型或计算模型. 部分原理: 下面是单个神经元的数学模型: +1代表偏移值(偏置项, Bias Units):X1,X2,X2代表初始特征:w0,w1,w2,w3代表权重(Weight),即参数,是特征的缩放倍数:特征经过缩放和偏移后全部累加起来,此后还要经过一次激活运算然后再输出. 最常见的激活函数是Sigmoid(S形曲线),

ExtJS 简单主页面 构建

一. 页面JSP代码如下 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %> <pre name="code" class="html"><% String userName = (String)request.getAttribute("use

简单神经网络TensorFlow实现

学习TensorFlow笔记 import tensorflow as tf #定义变量 #Variable 定义张量及shape w1= tf.Variable(tf.random_normal([2, 3], stddev=1, seed=1)) w2= tf.Variable(tf.random_normal([3, 1], stddev=1, seed=1)) with tf.Session() as sess: print(sess.run(w1.initializer)) print

机器学习--简单神经网络

代码实现上面的算法 数据 把数据读取进来显示前10行 把前面0到100行的数据的第4列打印出来 把两种字符串转化为-1 和1 把文件里第0列和第2列的数据打印出来 把前50条数据的第0列作横坐标 第1列为纵坐标                   把后50条数据的第0列作横坐标 第1列为纵坐标   把图画出来 对数据可视化准备足够的数据 准备好两种颜色,判断数据属于哪一个种类,并根据相应的种类绘制相应的颜色进行填充 这两行代码就是活得花径花瓣的长度的最大值和最小值 meshgrid的作用就是通过

用简单的方法构建一个高可用服务端

一. 什么是高可用性 服务端,顾名思义就是为用户提供服务的.停工时间,就是不能向用户提供服务的时间.高可用,就是系统具有高度可用性,尽量减少停工时间. 停工的原因一般有: 服务器故障.例如服务器宕机,服务器网络出现问题,机房或者机架出现问题等.访问量急剧上升,导致服务器压力过大.导致访问量急剧上升的原因有:时间和访问量都可以预见的,例如秒杀活动,售票系统.时间和访问量都不可以预见的,例如特发性新闻(马航失联的事件)停工的原因,可以理解为灾难,所以系统的高可用性就是容灾,即应对灾难的能力,系统有较