早期几种不同的基础网络模型的介绍及实现

MP模型:1943年提出,是一种基于阈值逻辑运算法创造的神经网络计算模型。由固定的结构和权重组成。是一种简单的数学模型,模拟生物神经元的激活方式。成功证明神经元能够执行逻辑功能,开创了人工神经网络研究的时代。

 

 感知机模型:1957年提出,结构和MP模型相似,一般被视为最简单的人工神经网络,也被作为二元线性分类器广泛使用。一般是指单层的人工神经网络

 

 感知机的学习过程:就是将实际值和理论输出值做差,由此来调整每一个输出端的权重,学习规则是用来计算新的权重向量W和新的偏差值B的算法。

下面使用python简单的实现一个感知机的训练过程

import matplotlib.pyplot as plt
import math as math
import numpy as np
#迭代次数
n=0
#学习率
lr=0.10
#输入数据
#定义一个5行4列的数组对象 ndarray
#外界输入是4个值,前两个值是偏置,后面两个坐标某个点的坐标
X=np.array([[1,1,2,3],[1,1,4,5],[1,1,1,1],[1,1,5,3],[1,1,0,1]])
print(X[:,1])
#输出标签
Y=np.array([1,1,-1,1,-1])
#初始化权重的值,4个随机值,取值范围【-1,1】
W=(np.random.random(X.shape[1])-0.5)*2
print(W)
#更新权重函数
def get_update():
    global X,Y,W,lr,n
    n+=1
    #输出X与W的转置相乘,得到的结果由阶跃函数处理
    new_output=np.sign(np.dot(X,W.T))
    #调整权重:新的权重=旧的权重+改变权重
    #改变权重=标签的差值乘以输入X,再乘以学习率
    new_W=W+lr*((Y-new_output.T).dot(X)/int(X.shape[0]))
    W=new_W

def get_show():
    all_x=X[:,2]
    all_y= X[:, 3]
    negative_x=[1,0]
    negative_y=[1,1]
    #计算分界线斜率和截距
    k=-W[2]/W[3]
    b=-(W[0]+W[1])/W[3]
    x_data=np.linspace(0,5)
    plt.figure()
    plt.plot(x_data,x_data*k+b,'r')
    plt.plot(all_x, all_y, 'b*')
    plt.plot(negative_x, negative_y, 'yo')
    plt.xlabel('x')
    plt.xlabel('y')
    plt.show()

def main():
    for _ in range(100):
        get_update()
        new_outout=np.sign(np.dot(X,W.T))
        if(new_outout==Y.T).all():
            print('迭代次数:',n)
            break
    plt.pause(0.1)
    get_show()

if __name__ == '__main__':
    main()

结果如图所示

感知机本质是一种线性模型,只能处理线性分类问题,简单的异或问题都没有办法正常解决。

多层感知机(MLP)

由单层感知机推广而来,主要特点是有多个神经元层,一般将第一层叫做输入层,最后一层叫输出层,中间的叫做隐藏层。多层感知机没有规定隐藏层的数量,也对隐藏层和输入层神经元的个数没有限制。下面两张图为单层隐藏层前馈网络,多隐藏层前馈网络

多层感知机的关键问题:训练各层间的连接权值。比较常用的是使用反向传播BP算法对神经网络的连接权值进行训练。 误差逆传播(error BackPropagation,简称BP)算法。

BP算法

有一篇博文,将BP算法使用数据推算的方法展示,讲的非常好。可以参考一下;BP算法详解 - CharlesQAQ - 博客园

权重是位于连线上的值,神经元就是每一个小圈,是经过全连接计算后得到的值。偏置是一个常数。引用上面微博中的推算方法,进行bp算法的推算

目标:通过i1,i2输入和权值和偏置的加权计算,使得o1,o2的输出值,接近真正的输出值,0.1和0.99.这也是学习权值和偏置偏置值的意义。这样通过输入值和权值和偏置的加权计算就可以得到类别。下面开始推导:

step1:前向传播

输入层—->隐含层:

计算神经元h1和h2的输入加权和:

neth1=i1*w1+i2*w2+b1*1=0.05*0.15+0.1*0.2+0.35*1=0.3775

neth2=i1*w3+i2*w4+b1*1=0.05*0.25+0.1*0.3+0.35*1=0.5968

由于神经元处的输出是有激活函数的。所以需要使用激活函数计算神经元h1和h2的输入加权和作为第二层隐藏层的真正的输出。

 

隐含层—->输出层

 这样前向传播的过程就结束了,我们得到输出值为[0.75136079 , 0.772928465],与实际值[0.01 , 0.99]相差还很远,现在我们对误差进行反向传播,更新权值,重新计算输出。

 step2:反向传播

1.计算总误差

       总误差:(square error)

2.隐含层—->输出层的权值更新:

       以权重参数w5为例,如果我们想知道w5对整体误差产生了多少影响,可以用整体误差对w5求偏导求出:(链式法则)

 

    下面的图可以更直观的看清楚误差是怎样反向传播的:

   现在我们来分别计算每个式子的值:

 这样我们就计算出整体误差E(total)对w5的偏导值。

 将上面的每一步求导后的公式组合,不带入数值,能得到以下的表达式:

 

 

3.隐含层—->隐含层的权值更新: 

 方法其实与上面说的差不多,但是有个地方需要变一下,在上文计算总误差对w5的偏导时,是从out(o1)—->net(o1)—->w5,但是在隐含层之间的权值更新时,是out(h1)—->net(h1)—->w1,而out(h1)会接受E(o1)和E(o2)两个地方传来的误差,所以这个地方两个都要计算。

首先计算两个误差带来的误差

 

 

 

      这样误差反向传播法就完成了,最后我们再把更新的权值重新计算,不停地迭代,在这个例子中第一次迭代之后,总误差E(total)由0.298371109下降至0.291027924。迭代10000次后,总误差为0.000035085,输出为[0.015912196,0.984065734](原输入为[0.01,0.99]),证明效果还是不错的。

      总结:反向传播的过程就是第L层神经元的误差值,等于第L+1层所有与神经元j相连的神经元的误差值的权重之和乘以该神经元j的激活函数的梯度。

     这样的方法能够使分类变成非线性,也可以解决异或的问题。使用该方法,再次实现感知机的代码段。


import matplotlib.pyplot as plt
import math as math
import numpy as np
#迭代次数
n=0
#学习率
lr=0.11
#输入数据
#定义一个5行4列的数组对象 ndarray
#外界输入是6个值,前一个值是偏置,后面x1,x2,x1^2,x1*x2,x2^2
X=np.array([[1,0,0,0,0,0],[1,0,1,0,0,1],[1,1,0,1,0,0],[1,1,1,1,1,1]])
print(X[:,1])
#输出标签
Y=np.array([-1,1,1,-1])
#初始化权重的值,4个随机值,取值范围【-1,1】
W=(np.random.random(X.shape[1])-0.5)*2
print('初始化权重的值:',W)
#更新权重函数
def get_update():
    global X,Y,W,lr,n
    n+=1
    #输出X与W的转置相乘,得到的结果由阶跃函数处理
    new_output=np.sign(np.dot(X,W.T))
    #调整权重:新的权重=旧的权重+改变权重
    #改变权重=标签的差值乘以输入X,再乘以学习率
    new_W=W+lr*((Y-new_output.T).dot(X)/int(X.shape[0]))
    W=new_W
def get_line(x,root):
    a=W[5]
    b=W[2]+x*W[4]
    c = W[0] + x * W[1]+ x *x* W[3]
    if root==1:
        return(-b+np.sqrt(b*b-4*a*c))/(2*a)
    if root==2:
        return(-b-np.sqrt(b*b-4*a*c))/(2*a)
def get_show():
    #正样本
    x1=[0,1]
    y1=[1,0]
    # 负样本
    x2 = [0, 1]
    y2 = [0, 1]
    #计算分界线斜率和截距
    x_data=np.linspace(-1,2)
    plt.figure()
    plt.plot(x_data,get_line(x_data,1),'r')
    plt.plot(x_data, get_line(x_data, 2), 'r')
    plt.plot(x1, y1, 'bo')
    plt.plot(x2, y2, 'yo')
    plt.xlabel('x')
    plt.xlabel('y')
    plt.show()

def main():
    for _ in range(10000):
        get_update()
        get_show()
    last_outout=np.dot(X,W.T)
    print('最后逼近值:',last_outout)



if __name__ == '__main__':
    main()

BP算法改进

    BP算法易形成局部极小而得不到全局最优,训练次数多使得学习效率低,存在收敛速度慢等问题。

       传统的BP算法改进主要有两类:

                 启发式算法:如附加动量法,自适应算法。

                 数值优化算法:如共轭梯度法、牛顿迭代法等。

1,附加动量项

       这是一种广泛用于加速梯度下降法收敛的优化方法。附加动量法面临学习率的选取的困难,进而产生收敛速度与收敛性之间的矛盾。

       核心思想:在梯度下降搜索时,若当前梯度下降与之前梯度下降方向相同,则加速搜索,反之则减速搜索。

       标准BP算法的参数更新项为:

                               ∆ω(t)= ηg(t)

       式中,∆ω(t)为第t次迭代的参数调整量,η为学习率,g(t)为第t次迭代所计算出的梯度。

       添加动量项之后,基于梯度下降的参数更新为:

                             ∆ωt= ηgt+α∆ωt-1

       式中α被称为动量系数,一般α∈(0,1),α∆ω(t-1)代表之前梯度下降的方向和大小信息对当前梯度下降的调整作用。

2,自适应学习率

      核心思想:自适应改变学习率,使其根据环境变化增大或减小。

              ηt=σ(t)η(t-1)

     上式中,σ(t)为第 t 次迭代时的自适应学习速率因子。

3,引入陡度因子

     核心思想:如果在调整进入平坦区后,设法压缩神经元的净输入,使其输出退出激活函数的不饱和区,就可以改变误差函数的形状,从而使调整脱离平坦区。

在原激活函数中引入一个陡度因子λ

                                                        o=\frac{1}{1+e^{-\frac{net}{\lambda }}}

 

 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【项目介绍】 基于MATLAB实现传统图像去噪算法和深度学习DnCNN模型图像去噪源码+项目说明.zip 该资源内项目代码都是经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也适合小白学习进阶, 或者实际项目借鉴参考! 当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。如果基础还行,也可在此代码基础上进行修改,以实现其他功能。 1. 项目介绍 # 1.1 项目的背景 该项目是为了研究基于深度卷积神经网络的图像去噪算法,是利用DnCNN模型,但是为了比较该算法的效果,另外实现了四种传统的图像去噪算法(均值滤波、中值滤波、非局部均值滤波NLM和三维块匹配滤波BM3D)作为对照组。 # 1.2 噪声强度和类型 项目中实现五种算法对噪声强度为10,15,20...60,65,70的高斯白噪声进行处理。 # 1.3 评价指标 图像去噪后,如何评估算法去噪效果的好坏呢?项目中采用峰值信噪比PSNR和结构相似性SSIM作为评价指标。一般来说,PSNR越大,去噪效果越好。SSIM取值为0到1,越接近1,表示效果越好。 2. 数据集介绍 该项目中只是对Set12数据集进行处理,也就是项目中的Set12目录下的12张图片。如果觉得数据量不够充分,可以自行添加其他数据集,在代码中修改一下数据集的目录即可。 3. 代码介绍 对于均值滤波、中值滤波、和NLM,MATLAB都已经实现了,所以我们直接调用MATLAB自带的函数就可以。 BM3D和DnCNN的代码都是从别人那儿clone下来,做了一些小的修改。 五种算法都是对Set12数据集进行去噪,去噪的结果并没有保存,只是在运行过程中能看到去噪前和去噪后的图像对比,感兴趣的朋友可以自己将图像保存下来观察。 4. 代码运行 五种算法分别在五个不同的目录中,所以你只需要进行对应的目录,运行代码即可。 + 均值滤波、中值滤波、NLM算法对应的目录分别为avefilter、medainfilter、nlm-image-denoising。每个目录下只有一个.m文件,所以只需要运行对应的文件即可。 + BM3D对应的目录是BM3D,运行该目录下的main.m程序即可。 + DnCNN对应的目录是DnCNN,运行该目录下的Demo_test_DnCNN.m程序即可,该算法目录中对应的还有好几个代码,都是原项目中有的,我没有动过,感兴趣的朋友可以自己看看。
计算机文化基础 基础知识 计算机文化基础-基础知识全文共74页,当前为第1页。 模块描述 基础知识 本模块是对计算机技术的导论,根据计算机基础知识结构共分为五个任务.通过对本模块的学习,你将熟悉以下内容:计算机历史、现状及分类;进制数的概念和计算机内部信息表示的方法;计算机系统的结构及工作原理;与计算机软件相关的基础知识;应用软件的类型及应用领域;多媒体计算机的基本概念;计算机文化和计算机安全的基本知识. 计算机文化基础-基础知识全文共74页,当前为第2页。 基础知识 本模块任务和涉及的操作技能 计算机文化基础-基础知识全文共74页,当前为第3页。 任务要求 任务1.1 了解计算机的基本概念   什么是计算机?现代计算机是如何产生的?我们身边经常接触到哪些种类的计算机?本任务我们将回顾电子计算机的发明过程,帮助你建立对计算机的基本认识,了解现代计算机的结构,懂得何谓"程序控制"和"五大部件".通过对计算机发展阶段和分类的介绍,使你了解计算机的历史和各类计算机的应用范围. 计算机文化基础-基础知识全文共74页,当前为第4页。 任务1.1 了解计算机的基本概念 1.1.1 计算机的概念和诞生 "计算机是接收、处理和提供数据的一种装置" ——《高级汉语大词典》 这是否是现代计算机的准确定义? 计算机文化基础-基础知识全文共74页,当前为第5页。 任务1.1 了解计算机的基本概念 1.1.1 计算机的概念和诞生 1. 早期的计算机 早期计算机已包含有运算器和控制器,能够实现自动或半自动计算. 具备运算器和控制器,能够自动完成运算的设备就是现代计算机吗? 莱布尼兹发明的乘法计算机 计算机文化基础-基础知识全文共74页,当前为第6页。 任务1.1 了解计算机的基本概念 1.1.1 计算机的概念和诞生 2. 可编程的计算机 现代计算机是一个智力的工具,其核心是可编程. 使用相同的程序,不同的数据就会有不同的运算结果.同样,人们可以根据需要编写各种不同的程序来解决各种问题. 计算机文化基础-基础知识全文共74页,当前为第7页。 相关知识点 任务1.1 了解计算机的基本概念 程序〔 program 〕  "program"是为实现特定目标或解决特定问题而用计算机语言编写的命令序列的集合.在港台则翻译为"程式". 计算机文化基础-基础知识全文共74页,当前为第8页。 任务1.1 了解计算机的基本概念 1.1.1 计算机的概念和诞生 3. 智能化与逻辑运算 计算机的智能表现在哪里? 智能的基本表现为具备逻辑判断和处理能力. 计算机被称为"电脑"更重要的特点是具备逻辑判断和处理的能力. 阿兰 图灵 计算机文化基础-基础知识全文共74页,当前为第9页。 任务1.1 了解计算机的基本概念 1.1.1 计算机的概念和诞生 4. ENIAC 1946美国陆军和宾西法尼亚大学联合向世界宣布ENIAC的诞生. ENICA是历史上第一台通用的、完全电子化的计算机. ENIAC 计算机文化基础-基础知识全文共74页,当前为第10页。 任务1.1 了解计算机的基本概念 1.1.1 计算机的概念和诞生 5. EDVAC 1952年由冯 诺伊曼设计的电子计算机EDVAC在美国问世. EDVAC是遵照冯 诺伊曼结构制造的第一台现代电子计算机. 冯·诺伊曼和EDVAC 计算机文化基础-基础知识全文共74页,当前为第11页。 任务1.1 了解计算机的基本概念 1.1.2 现代计算机的模型 1. 五大部件 五大部件包括:算术逻辑单元〔运算器〕、存储器、控制器、输入设备、输出设备. 计算机文化基础-基础知识全文共74页,当前为第12页。 任务1.1 了解计算机的基本概念 1.1.2 现代计算机的模型 2. 二进制 电子设备使用二进制成本低而且稳定性好. 在现代计算机模型中,任何需要处理的数据,包括计算机的程序,必须经过转换后以统一的二进制形式存储. 3. 存储程序 程序和数据都是以二进制形式存储在同一个存储器中. 计算机文化基础-基础知识全文共74页,当前为第13页。 任务1.1 了解计算机的基本概念 1.1.3 计算机技术的发展 1. 计算机发展过程 第一代 第二代 第三代 第四代 起迄年份 1946~1957 1958~1964 1965~1970 1971~今 电子器件 电子管 晶体管 中、小规模集成电路 大规模、超大规模集成电路 内存 水银延迟线 磁芯存储器 半导体存储器 半导体存储器 外存 穿孔卡片、纸带 磁带 磁带、磁盘 磁盘、光盘等 软件 汇编语言 管理程序 程序设计语言 操作系统 高级语言 数据库 网络软件 处理速度 (指令数/秒) 几千条 几百万条 几千万条 几亿条以上 应用范围 科学计算 科学计算 数据处理 逐步广泛应用 普及到社会生活各方面 计算机文化基础-基
【资源说明】 面向物联网隐私数据分析的分布式弹性网络回归学习算法matlab实现完整源码(含超详细注释+数据集+说明).zip > 为了解决基于集中式算法的传统物联网数据分析处理方式易引发网络带宽压力过大、延迟过高以及数据隐私安全等问题,该文针对弹性网络回归这一典型的线性回归模型,提出一种面向物联网(IoT)的分布式学习算法。该算法基于交替方向乘子法(ADMM),将弹性网络回归目标优化问题分解为多个能够由物联网节点利用本地数据进行独立求解的子问题。不同于传统的集中式算法,该算法并不要求物联网节点将隐私数据上传至服务器进行训练,而仅仅传递本地训练的中间参数,再由服务器进行简单整合,以这样的协作方式经过多轮迭代获得最终结果。基于两个典型数据集的实验结果表明:该算法能够在几十轮迭代内快速收敛到最优解。相比于由单个节点独立训练模型的本地化算法,该算法提高了模型结果的有效性和准确性;相比于集中式算法,该算法在确保计算准确性和可扩展性的同时,可有效地保护个体隐私数据的安全性。 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!
卷积神经网络(Convolutional Neural Network,CNN)是一种广泛应用于图像、语音和自然语言处理等领域的深度学习模型。其主要原理是利用卷积运算提取图像等数据的特征,并通过池化操作对特征进行降维,最终通过全连接层进行分类或回归等任务。 卷积神经网络实现过程一般包括以下几个步骤: 1. 卷积层:卷积层是卷积神经网络的核心部分,其作用是通过卷积运算提取输入数据的特征。卷积层包括卷积核和偏置项,其中卷积核用于卷积运算,偏置项用于调整卷积后的特征值。 2. 激活函数:激活函数是卷积神经网络中的一个重要组成部分,其作用是引入非线性变换,增强模型的表达能力。常见的激活函数包括ReLU、sigmoid、tanh等。 3. 池化层:池化层是卷积神经网络的另一个重要组成部分,其作用是对特征进行降维,减少计算量,防止过拟合。常见的池化方式包括最大池化和平均池化。 4. 全连接层:全连接层是卷积神经网络中的最后一层,其作用是将卷积和池化得到的特征进行分类或回归等任务。 5. Dropout:Dropout是一种正则化方法,其作用是在训练过程中随机丢弃一部分神经元,防止过拟合。 卷积神经网络实现过程一般需要进行数据预处理、网络搭建、模型训练和模型评估等步骤。常用的深度学习框架,如TensorFlow、PyTorch、Keras等,都提供了卷积神经网络实现接口和优化算法,使得卷积神经网络实现变得更加简单和高效。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值