精华内容
下载资源
问答
  • 网上学习确定自动点击工具

    热门讨论 2010-09-15 10:02:50
    网上学习确定自动点击工具 网上学习时过一个随机时间弹出一个确认菜单,要点确定后才继续记时,这个就是自动点确定的工具,只要运行隐藏后就可以自动工作了。不要启用屏保功能,关了显示器就好了
  • 残差网络学习心得

    万次阅读 多人点赞 2019-02-18 20:32:24
    残差网络学习心得残差网络介绍为什么残差网络有如此好的表现? 残差网络介绍 ResNets是由残差块构建的,首先先解释一下什么是残差块。 这是一个两层神经网络在L层进行激活。计算过程是从a[l]开始,首先进行线性激活...

    残差网络介绍

    ResNets是由残差块构建的,首先先解释一下什么是残差块。

    在这里插入图片描述
    这是一个两层神经网络在L层进行激活。计算过程是从a[l]开始,首先进行线性激活 。
    在这里插入图片描述
    根据这个等式,通过a[l]算出z[l+1]即a[l]乘以权重矩阵再加上偏差因子,然后通过非线性Relu激活得到a[l+1]。
    在这里插入图片描述
    随后我们再进行线性激活,从下面等式可以得出z[l+2]。
    在这里插入图片描述
    最后根据这个等式再进行Relu非线性激活
    在这里插入图片描述
    这里的g指的是Relu非线性函数
    在这里插入图片描述
    换句话说,信息流从a[l]到a[l+2],需要经历上述所有步骤即这组网络层的主路径。在残差网络中有一点变化:我们将a[l]直接向后拷贝到神经网络的深层,在Relu非线性激活前加上a[l],这是一条捷径将a[l]的信息直接传达到神经网络的深层(不再沿着主路经传递)
    在这里插入图片描述
    这就意味着最后这个等式去掉了
    在这里插入图片描述
    取而代之的是另一个Relu非线性函数,仍然对z[l+2]进行g函数处理,但这次要加上a[l],也就是加上的这个a[l]产生了一个残差块。
    在这里插入图片描述
    我们也可以画一条捷径直达第二层,实际上这条捷径是在进行Relu非线性激活之前加上的。而这里的每一个节点都执行了线性函数和Relu激活函数,所以a[l]插入的时机是在线性激活之后Relu激活之前
    在这里插入图片描述
    除了捷径,你还听到另一个术语“跳远连接”,就是指a[l]跳过一层或者好几层,从而将信息传递到神经网络的更深层。
    使用残差块能够训练更深的神经网络,构建一个Resnet网络就是通过将很多这样的残差块堆积在一起,形成一个深度神经网络。

    在这里插入图片描述
    我们来看看这样一个网络,这并不是一个残差网络,而是一个普通网络,把它变成ResNet的方法就是加上所有的跳远连接。
    在这里插入图片描述
    正如前面所看到的每两层增加一个捷径,构成一个残差块,所以这个图就有5个残差块,构成一个残差网络。
    如果我们使用标准优化算法训练一个普通网络,比如梯度下降或者其他优化算法,如果没有残差,没有这些捷径。凭经验,你会发现随着网络深度的加深,训练错误会先减少然后增多。

    在这里插入图片描述

    而理论上随着网络深度的加深,应该训练得越来越好才对。也就是说,理论上网络深度越深越好,但实际上,如果没有残差网络,对于一个普通网络来说,深度越深意味着用优化算法越难训练。

    但有了ResNets就不一样了,即使网络再深,训练的表现却不错,错误会减少。

    为什么残差网络有如此好的表现?

    先来看一个例子,上面我们说到一个网络深度越深,它在训练集上训练网络的效率会有所减弱,这也是有时我们不愿加深层数的原因。但在训练ResNets网络时并不完全如此。
    在这里插入图片描述
    假设有一个大型神经网络,其输入为x,输出激活值为a[l],如果你想增加这个神经网络的深度,就再给这个网络额外添加两层,最后输出为a[l+2],可以把这两层看作ResNet块,即具有近路连接的残差块。假设我们在整个网络中使用Relu激活函数,所以激活值都大于等于0。a[l+2]=g(z[l+2]+a[l]),添加项a[l]是刚添加的跳远连接的输入。

    在这里插入图片描述

    如果z[l+2]=0,那么a[l+2]=a[l]。因为我们假定使用Relu激活函数,并且所有激活值都是负的。结果表明,残差块学习这个恒等式函数残差块并不难。加入残差块后,我们可以得出a[l+2]=a[l],这说明即使增加两层它的效率也不逊色与简单的神经网络。所以给大型神经网络增加两层,不论是把残差块添加到神经网络的中间还是末端位置都不会影响网络的实现。当然我们不仅要保持效率还要提升。想象一下,如果这些隐层单元学到一些有用信息,那么它可能比学习恒等函数变现的更好。而哪些不含有残差的普通网络情况就不一样了,当层数越来越深时,就算选择学习恒等函数的参数都很困难。所以很多层最后的表现不但没有更好反而更糟。残差网络起作用的主要原因就是这些残差块学习恒等函数非常容易。你能确定网络性能不会受到影响,很多时候甚至会提高效率。另一点值得去说的是,假设z[l+2]与a[l]具有相同维度,所以Resnet使用了许多相同卷积,这个a[l]的维度等于这个输出层的维度。
    在这里插入图片描述
    我们只需要在普通网络中加入如图残差块就能变为残差网络。

    展开全文
  • 神经网络学习心得

    千次阅读 2019-10-19 18:58:15
    人工智能(AI)从诞生以来,理论和技术日益成熟...机器学习中的神经网络是研究人工智能最热门的方向,而多层复杂的神经网络又发展成现在的深度学习。 数学基础:高等数学、线性代数、概率论与数理统计(后面两个在...

    人工智能(AI)从诞生以来,理论和技术日益成熟,应用领域也不断扩大。目前人工智能(AI)已经以雷霆万钧之势从学术界潜入产业界的每一个角落,其价值之大,可想而知。人工智能是一门极富挑战性的科学,从事这项工作的人必须懂得计算机知识,心理学和哲学。机器学习中的神经网络是研究人工智能最热门的方向,而多层复杂的神经网络又发展成现在的深度学习。

    1. 数学基础:高等数学、线性代数、概率论与数理统计(后面两个在本文中可能显得不是那么重要)
    2. 编程基础:Python(https://www.runoob.com/python/python-tutorial.html

    1.AI从入门到放弃:BP神经网络算法推导及代码实现笔记:https://zhuanlan.zhihu.com/p/38006693

    总结:该部分是学习神经网络的前提,其中梯度下降法需要重点掌握(用到高数中不少知识点),神经网络中的梯度下降法或BP算法用到了高数中的链式求导法则(可以跟着这个方向走)。链接的内容很多,但是需要我们掌握的有三点,梯度下降法、BP算法、loss损失函数的自定义(提供的链接没有提到,但是用到了,自定义损失函数有些人用到了信息论中的知识)。

     

    2.神经网络或深度学习框架的选择:https://blog.csdn.net/broadview2006/article/details/79147351

    总结:自认为讲得还不错,自己也用了pytorch的框架。但是也有必要列出其他神经网络框架,如下图所示。pytorch框架学习教程:https://github.com/zergtant/pytorch-handbook

     

    3.搭建我们所需的环境:这部分我也弄了很长时间,主要原因是pytorch所需要的包都是从国外下载,下载速度很慢导致崩溃。

    第一步,选择Python的编程工具

    推荐使用清华源anaconda(https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/),下载好后安装即可,该工具自带Python环境。

    第二步,安装pytorch环境

    pytorch安装与配置:https://blog.csdn.net/tough_strong/article/details/103137029

    注意:第二步安装很容易出错。

    所有工作完成好后,我们就可以在GitHub(https://github.com/)找个项目来跑跑了(本文不作详细的说明了)。跑完之后就可以自己尝试着写代码了。

     

    最后,放上几个感觉还不错的链接,因为写本文的初衷就是想收藏几个链接,生怕以后找不到了。

    卷积神经网络特征图可视化(自定义网络和VGG网络):

    https://blog.csdn.net/dcrmg/article/details/81255498

    Pytorch中正确设计并加载数据集方法:

    https://ptorch.com/news/215.html

    pytorch使用(一)处理并加载自己的数据:

    https://blog.csdn.net/gyguo95/article/details/78821520/

    Pytorch:从读取数据到项目落地:

    https://blog.csdn.net/qq_26697045/article/details/100987856

    Faster RCNN的TensorFlow代码的理解:

    https://www.cnblogs.com/darkknightzh/p/10043864.html

    faster-rcnn代码解读记录,github+tf:

    https://blog.csdn.net/qq_41576083/article/details/82966489

    展开全文
  • 神经网络学习 之 BP神经网络

    万次阅读 多人点赞 2015-11-30 21:17:56
    由这些人工神经元构建出来的网络,才能够具有学习、联想、记忆和模式识别的能力。BP网络就是一种简单的人工神经网络。 本文具体来介绍一下一种非常常见的神经网络模型——反向传播(Back Propagation)神经网络。概述...

    上一次我们讲了M-P模型,它实际上就是对单个神经元的一种建模,还不足以模拟人脑神经系统的功能。由这些人工神经元构建出来的网络,才能够具有学习、联想、记忆和模式识别的能力。BP网络就是一种简单的人工神经网络。
    本文具体来介绍一下一种非常常见的神经网络模型——反向传播(Back Propagation)神经网络。

    概述

    BP(Back Propagation)神经网络是1986年由Rumelhart和McCelland为首的科研小组提出,参见他们发表在Nature上的论文 Learning representations by back-propagating errors

    BP神经网络是一种按误差逆传播算法训练的多层前馈网络,是目前应用最广泛的神经网络模型之一。BP网络能学习和存贮大量的 输入-输出模式映射关系,而无需事前揭示描述这种映射关系的数学方程。它的学习规则是使用最速下降法,通过反向传播来不断 调整网络的权值和阈值,使网络的误差平方和最小。

    BP算法的基本思想

    上一次我们说到,多层感知器在如何获取隐层的权值的问题上遇到了瓶颈。既然我们无法直接得到隐层的权值,能否先通过输出层得到输出结果和期望输出的误差来间接调整隐层的权值呢?BP算法就是采用这样的思想设计出来的算法,它的基本思想是,学习过程由信号的正向传播与误差的反向传播两个过程组成。

    • 正向传播时,输入样本从输入层传入,经各隐层逐层处理后,传向输出层。若输出层的实际输出与期望的输出(教师信号)不符,则转入误差的反向传播阶段。
    • 反向传播时,将输出以某种形式通过隐层向输入层逐层反传,并将误差分摊给各层的所有单元,从而获得各层单元的误差信号,此误差信号即作为修正各单元权值的依据。

    这两个过程的具体流程会在后文介绍。

    BP算法的信号流向图如下图所示
    在这里插入图片描述
    BP网络特性分析——BP三要素

    我们分析一个ANN时,通常都是从它的三要素入手,即
    1)网络拓扑结构;
    2)传递函数;
    3)学习算法。

    在这里插入图片描述

    每一个要素的特性加起来就决定了这个ANN的功能特性。所以,我们也从这三要素入手对BP网络的研究。

    3.1 BP网络的拓扑结构

    上一次已经说了,BP网络实际上就是多层感知器,因此它的拓扑结构和多层感知器的拓扑结构相同。由于单隐层(三层)感知器已经能够解决简单的非线性问题,因此应用最为普遍。三层感知器的拓扑结构如下图所示。
    一个最简单的三层BP:
    这里写图片描述
    ###3.2 BP网络的传递函数
    BP网络采用的传递函数是非线性变换函数——Sigmoid函数(又称S函数)。其特点是函数本身及其导数都是连续的,因而在处理上十分方便。为什么要选择这个函数,等下在介绍BP网络的学习算法的时候会进行进一步的介绍。
    单极性S型函数曲线如下图所示。
    f ( x ) = 1 1 + e − x f(x)={1\over 1+e^{-x}} f(x)=1+ex1
    这里写图片描述
    双极性S型函数曲线如下图所示。
    f ( x ) = 1 − e − x 1 + e − x f(x)={1-e^{-x}\over 1+e^{-x}} f(x)=1+ex1ex

    这里写图片描述

    3.3 BP网络的学习算法

    BP网络的学习算法就是BP算法,又叫 δ 算法(在ANN的学习过程中我们会发现不少具有多个名称的术语), 以三层感知器为例,当网络输出与期望输出不等时,存在输出误差 E ,定义如下

    E = 1 2 ( d − O ) 2 = 1 2 ∑ κ = 1 ℓ ( d k − o k ) 2 E={1\over 2}(d−O)^2={1\over 2}∑_{κ=1}^ℓ(d_k−o_k)^2 E=21(dO)2=21κ=1(dkok)2

    将以上误差定义式展开至隐层,有
    E = 1 2 ∑ κ = 1 ℓ [ d κ − f ( n e t κ ) ] 2 = 1 2 ∑ κ = 1 ℓ [ d κ − f ( ∑ j = 0 m ω j κ y j ) ] 2 E={1\over 2}∑_{κ=1}^ℓ[d_κ−f(net_κ)]^2={1\over 2}∑_{κ=1}^ℓ[d_κ−f(∑_{j=0}^mω_{jκ}y_j)]^2 E=21κ=1[dκf(netκ)]2=21κ=1[dκf(j=0mωjκyj)]2

    进一步展开至输入层,有
    E = 1 2 ∑ κ = 1 ℓ d κ − f [ ∑ j = 0 m ω j κ f ( n e t j ) ] 2 = 1 2 ∑ κ = 1 ℓ d κ − f [ ∑ j = 0 m ω j κ f ( ∑ j = 0 n υ i j χ i ) ] 2 E={1\over 2}∑_{κ=1}^ℓ{d_κ−f[∑_{j=0}^mω_{jκ}f(net_j)]}^2={1\over 2}∑_{κ=1}^ℓ{d_κ−f[∑_{j=0}^mω_{jκ}f(∑_{j=0}^nυ_{ij}χ_i)]}^2 E=21κ=1dκf[j=0mωjκf(netj)]2=21κ=1dκf[j=0mωjκf(j=0nυijχi)]2

    由上式可以看出,网络输入误差是各层权值 ω j κ ω_{jκ} ωjκ υ i j υ_{ij} υij的函数,因此调整权值可改变误差 E E E。 显然,调整权值的原则是使误差不断减小,因此应使权值与误差的梯度下降成正比,即
    Δ ω j κ = − η ∂ E ∂ ω j κ j = 0 , 1 , 2 , … , m ; κ = 1 , 2 , … , ℓ Δω_{jκ}=−η{∂E\over ∂ω_{jκ}}j=0,1,2,…,m;κ=1,2,…,ℓ Δωjκ=ηωjκEj=0,1,2,,m;κ=1,2,,

    Δ υ i j = − η ∂ E ∂ υ i j i = 0 , 1 , 2 , … , n ; j = 1 , 2 , … , m Δυ_{ij}=−η{∂E∂\over υ_{ij}}i=0,1,2,…,n;j=1,2,…,m Δυij=ηυijEi=0,1,2,,n;j=1,2,,m

    对于一般多层感知器,设共有 h h h 个隐层,按前向顺序各隐层节点数分别记为 m 1 , m 2 , … , m h m_1,m_2,…,m_h m1,m2,,mh,各隐层输出分别记为 y 1 , y 2 , … , y h y_1,y_2,…,y_h y1,y2,,yh,各层权值矩阵分别记为 W 1 , W 2 , … , W h , W h + 1 W_1,W_2,…,W_h,W_{h+1} W1,W2,,Wh,Wh+1,则各层权值调整公式为

    输出层

    Δ ω j κ h + 1 = η δ h + 1 κ y j h = η ( d κ − o κ ) o κ ( 1 − o κ ) y j κ ( j=0,1,2, … ,mh;κ=1,2, … ,ℓ ) Δω^{h+1}_{jκ}=ηδ_{h+1}^κy^h_j=η(d_κ−o_κ)o_κ(1−o_κ)y^κ_j\tag{j=0,1,2,…,mh;κ=1,2,…,ℓ} Δωjκh+1=ηδh+1κyjh=η(dκoκ)oκ(1oκ)yjκ(j=0,1,2,,mh;κ=1,2,,)

    h h h 隐层

    Δ ω i j h = η δ j h y i h − 1 = η ( ∑ κ = 1 l δ κ o ω j κ h + 1 y j κ ( 1 − y j k a p p a ) y i h − 1 ( i=0,1,2, … ,m(h−1);j=1,2, … , m h ) Δω^h_{ij}=ηδ^h_jy^h_i−1=η(∑^l_{κ=1}δ^o_κω^{h+1}_{jκ}y^κ_j(1−y^k_jappa)y^h_i−1\tag{i=0,1,2,…,m(h−1);j=1,2,…,$m_h$} Δωijh=ηδjhyih1=η(κ=1lδκoωjκh+1yjκ(1yjkappa)yih1(i=0,1,2,,m(h1);j=1,2,,mh)

    按以上规律逐层类推,则第一隐层权值调整公式

    Δ ω p q 1 = η δ q 1 χ p = η ( ∑ r = 1 m 2 δ r 2 ω q r 2 ) y q 1 ( 1 − y q 1 ) χ p ( p=0,1,2, … ,n;j=1,2, … , m 1 ) Δω^1_{pq}=ηδ^1_qχ_p=η(∑^{m_2}_{r=1}δ^2_rω^2_{qr})y^1_q(1−y^1_q)χ_p\tag{p=0,1,2,…,n;j=1,2,…,$m_1$} Δωpq1=ηδq1χp=η(r=1m2δr2ωqr2)yq1(1yq1)χp(p=0,1,2,,n;j=1,2,,m1)

    容易看出,BP学习算法中,各层权值调整公式形式上都是一样的,均由3个因素决定,即:

    1. 学习率 η η η
    2. 本层输出的误差信号 δ δ δ
    3. 本层输入信号 Y Y Y(或 X X X

    其中输入层误差信号与网络的期望输出与实际输出之差有关,直接反应了输出误差,而各隐层的误差信号与前面各层的误差信号有关,是从输出层开始逐层反传过来的。

    可以看出BP算法属于δ学习规则类,这类算法常被称为误差的梯度下降算法。δ学习规则可以看成是Widrow-Hoff(LMS)学习规则的一般化(generalize)情况。LMS学习规则与神经元采用的变换函数无关,因而不需要对变换函数求导,δ学习规则则没有这个性质,要求变换函数可导。这就是为什么我们前面采用Sigmoid函数的原因。

    综上所述,BP三要素如下图所示。

    在这里插入图片描述

    下面我们会介绍BP网络的学习训练的具体过程。

    BP网络的训练分解

    训练一个BP神经网络,实际上就是调整网络的权重和偏置这两个参数,BP神经网络的训练过程分两部分:

    • 前向传输,逐层波浪式的传递输出值;
    • 逆向反馈,反向逐层调整权重和偏置;
      我们先来看前向传输。

    前向传输(Feed-Forward前向反馈)

    在训练网络之前,我们需要随机初始化权重和偏置,对每一个权重取 [ − 1 , 1 ] [-1,1] [1,1]的一个随机实数,每一个偏置取 [ 0 , 1 ] [0,1] [0,1]的一个随机实数,之后就开始进行前向传输。

    神经网络的训练是由多趟迭代完成的,每一趟迭代都使用训练集的所有记录,而每一次训练网络只使用一条记录,抽象的描述如下:

    while 终止条件未满足:
        for record:dataset:
            trainModel(record)
    

    首先设置输入层的输出值,假设属性的个数为100,那我们就设置输入层的神经单元个数为100,输入层的结点 N i N_i Ni为记录第 i i i维上的属性值 x i x_i xi。对输入层的操作就这么简单,之后的每层就要复杂一些了,除输入层外,其他各层的输入值是上一层输入值按权重累加的结果值加上偏置,每个结点的输出值等该结点的输入值作变换
    这里写图片描述
    前向传输的输出层的计算过程公式如下:
    I j = ∑ i = 1 ω i j o i + θ j I_j=\sum_{i=1}\omega_{ij}o_i+\theta_j Ij=i=1ωijoi+θj
    o j = f ( I j ) = 1 1 + e I j o_j=f(I_j)={1\over 1+e^{I_j}} oj=f(Ij)=1+eIj1
    对隐藏层和输出层的每一个结点都按照如上图的方式计算输出值,就完成前向传播的过程,紧接着是进行逆向反馈。

    逆向反馈(Backpropagation)

    逆向反馈从最后一层即输出层开始,我们训练神经网络作分类的目的往往是希望最后一层的输出能够描述数据记录的类别,比如对于一个二分类的问题,我们常常用两个神经单元作为输出层,如果输出层的第一个神经单元的输出值比第二个神经单元大,我们认为这个数据记录属于第一类,否则属于第二类。

    还记得我们第一次前向反馈时,整个网络的权重和偏置都是我们随机取,因此网络的输出肯定还不能描述记录的类别,因此需要调整网络的参数,即权重值和偏置值,而调整的依据就是网络的输出层的输出值与类别之间的差异,通过调整参数来缩小这个差异,这就是神经网络的优化目标。对于输出层:
    E j = O j ( 1 − O j ) ( T j − O j ) E_j=O_j(1-O_j)(T_j-O_j) Ej=Oj(1Oj)(TjOj)
    其中 E j E_j Ej表示第 j j j个结点的误差值, O j O_j Oj表示第 j j j个结点的输出值, T j T_j Tj记录输出值,比如对于2分类问题,我们用01表示类标1,10表示类别2,如果一个记录属于类别1,那么其 T 1 = 0 T_1=0 T1=0 T 2 = 1 T_2=1 T2=1

    中间的隐藏层并不直接与数据记录的类别打交道,而是通过下一层的所有结点误差按权重累加,计算公式如下:
    E j = O j ( 1 − O j ) ∑ k E k W j k E_j=O_j(1-O_j)\sum_kE_kW_{jk} Ej=Oj(1Oj)kEkWjk
    其中 W j k W_{jk} Wjk表示当前层的结点 j j j到下一层的结点 k k k的权重值, E k E_k Ek下一层的结点 k k k的误差率。

    计算完误差率后,就可以利用误差率对权重和偏置进行更新,首先看权重的更新:
    这里写图片描述
    其中 λ λ λ表示表示学习速率,取值为0到1,学习速率设置得大,训练收敛更快,但容易陷入局部最优解,学习速率设置得比较小的话,收敛速度较慢,但能一步步逼近全局最优解。

    更新完权重后,还有最后一项参数需要更新,即偏置:
    这里写图片描述

    至此,我们完成了一次神经网络的训练过程,通过不断的使用所有数据记录进行训练,从而得到一个分类模型。不断地迭代,不可能无休止的下去,总归有个终止条件。

    训练终止条件

    每一轮训练都使用数据集的所有记录,但什么时候停止,停止条件有下面两种:

    1. 设置最大迭代次数,比如使用数据集迭代100次后停止训练
    2. 计算训练集在网络上的预测准确率,达到一定门限值后停止训练

    BP网络运行的具体流程

    网络结构

    输入层有 n n n个神经元,隐含层有 p p p个神经元,输出层有 q q q个神经元。

    变量定义

    输入变量: x = ( x 1 , x 2 , … , x n ) x=(x_1,x_2,\dots,x_n) x=(x1,x2,,xn)
    隐含层输入变量: h i = ( h i 1 , h i 2 , … , h i p ) hi=(hi_1,hi_2,\dots,hi_p) hi=(hi1,hi2,,hip)
    隐含层输出变量: h o = ( h o 1 , h o 2 , … , h o p ) ho=(ho_1,ho_2,\dots,ho_p) ho=(ho1,ho2,,hop)
    输出层输入变量: y i = ( y i 1 , y i 2 , … , y i q ) yi=(yi_1,yi_2,\dots,yi_q) yi=(yi1,yi2,,yiq)
    输出层输出变量: y o = ( y o 1 , y o 2 , … , y o q ) yo=(yo_1,yo_2,\dots,yo_q) yo=(yo1,yo2,,yoq)
    期望输出向量: d o = ( d 1 , d 2 , … , d q ) d_o=(d_1,d_2,\dots,d_q) do=(d1,d2,,dq)
    输入层与中间层的连接权值: w i h w_{ih} wih
    隐含层与输出层的连接权值: w h o w_{ho} who
    隐含层各神经元的阈值: b h b_h bh
    输出层各神经元的阈值: b o b_o bo
    样本数据个数: k = 1 , 2 , … , m k=1,2,\dots,m k=1,2,,m
    激活函数: f ( ⋅ ) f(\cdot) f()
    误差函数: e = 1 2 ∑ o = 1 q ( d o ( k ) − y o o ( k ) ) 2 e={1\over 2}\sum_{o=1}^{q}(d_o(k)-yo_o(k))^2 e=21o=1q(do(k)yoo(k))2
    ###第一步:网络初始化
    给各连接权值分别赋一个区间 ( − 1 , 1 ) (-1,1) (1,1)内的随机数,设定误差函数 e e e,给定计算精度值 ε \varepsilon ε和最大学习次数 M M M
    ###第二步:随机选取
    随机选取第 k k k个输入样本以及对应的期望输出
    x ( k ) = ( x 1 ( k ) , x 2 ( k ) , … , x n ( k ) ) d o ( k ) = ( d 1 ( k ) , d 2 ( k ) , … , d q ( k ) ) x(k)=(x_1(k),x_2(k),\dots,x_n(k))\\ d_o(k)=(d_1(k),d_2(k),\dots,d_q(k)) x(k)=(x1(k),x2(k),,xn(k))do(k)=(d1(k),d2(k),,dq(k))
    ###第三部:隐含层计算
    计算隐含层各神经元的输入和输出
    h i h ( k ) = ∑ i = 1 n w i h x i ( k ) − b h ( h = 1 , 2 , … , p ) hi_h(k)=\sum_{i=1}^nw_{ih}x_i(k)-b_h \tag{$h=1,2,\dots,p$} hih(k)=i=1nwihxi(k)bh(h=1,2,,p)
    h i h ( k ) = f ( h i h ( k ) ) ( h = 1 , 2 , … , p ) hi_h(k)=f(hi_h(k)) \tag{$h=1,2,\dots,p$} hih(k)=f(hih(k))(h=1,2,,p)
    y i o ( k ) = ∑ h = 1 p w h o h o h ( k ) − b o ( o=1,2, …   ,q ) yi_o(k)=\sum_{h=1}^pw_{ho}ho_h(k)-b_o \tag{o=1,2,$\dots$,q} yio(k)=h=1pwhohoh(k)bo(o=1,2,,q)
    y o o ( k ) = f ( y i o ( k ) ) ( o=1,2, …   ,q ) yo_o(k)=f(yi_o(k))\tag{o=1,2,$\dots$,q} yoo(k)=f(yio(k))(o=1,2,,q)

    第四步:求偏导数

    利用网络期望输出和实际输出,计算误差函数对输出层的各神经元的偏导数 δ o ( k ) \delta_o(k) δo(k)
    这里写图片描述这里写图片描述

    第六步:修正权值

    利用输出层各神经元的 δ o ( k ) \delta_o(k) δo(k)和隐含层各神经元的输出来修正连接权值 w h o ( k ) w_{ho}(k) who(k)
    这里写图片描述

    第七部:修正权值

    利用隐含层各神经元的 δ h ( k ) \delta_h(k) δh(k)和输入层各神经元的输入修正连接权值。
    这里写图片描述

    第八步:计算全局误差

    E = 1 2 m ∑ k = 1 m ∑ o = 1 q ( d o ( k ) − y o ( k ) ) 2 E={1\over 2m}\sum_{k=1}^m\sum_{o=1}^q(d_o(k)-y_o(k))^2 E=2m1k=1mo=1q(do(k)yo(k))2

    第九步:判断模型合理性

    判断网络误差是否满足要求。
    当误差达到预设精度或者学习次数大于设计的最大次数,则结束算法。
    否则,选取下一个学习样本以及对应的输出期望,返回第三部,进入下一轮学习。

    BP网络的设计

    在进行BP网络的设计是,一般应从网络的层数、每层中的神经元个数和激活函数、初始值以及学习速率等几个方面来进行考虑,下面是一些选取的原则。

    1.网络的层数

    理论已经证明,具有偏差和至少一个S型隐层加上一个线性输出层的网络,能够逼近任何有理函数,增加层数可以进一步降低误差,提高精度,但同时也是网络 复杂化。另外不能用仅具有非线性激活函数的单层网络来解决问题,因为能用单层网络解决的问题,用自适应线性网络也一定能解决,而且自适应线性网络的 运算速度更快,而对于只能用非线性函数解决的问题,单层精度又不够高,也只有增加层数才能达到期望的结果。

    2.隐层神经元的个数

    网络训练精度的提高,可以通过采用一个隐含层,而增加其神经元个数的方法来获得,这在结构实现上要比增加网络层数简单得多。一般而言,我们用精度和 训练网络的时间来恒量一个神经网络设计的好坏:
    (1)神经元数太少时,网络不能很好的学习,训练迭代的次数也比较多,训练精度也不高。
    (2)神经元数太多时,网络的功能越强大,精确度也更高,训练迭代的次数也大,可能会出现过拟合(over fitting)现象。
    由此,我们得到神经网络隐层神经元个数的选取原则是:在能够解决问题的前提下,再加上一两个神经元,以加快误差下降速度即可。

    3.初始权值的选取

    一般初始权值是取值在(−1,1)之间的随机数。另外威得罗等人在分析了两层网络是如何对一个函数进行训练后,提出选择初始权值量级为s√r的策略, 其中r为输入个数,s为第一层神经元个数。

    4.学习速率

    学习速率一般选取为0.01−0.8,大的学习速率可能导致系统的不稳定,但小的学习速率导致收敛太慢,需要较长的训练时间。对于较复杂的网络, 在误差曲面的不同位置可能需要不同的学习速率,为了减少寻找学习速率的训练次数及时间,比较合适的方法是采用变化的自适应学习速率,使网络在 不同的阶段设置不同大小的学习速率。

    5.期望误差的选取

    在设计网络的过程中,期望误差值也应当通过对比训练后确定一个合适的值,这个合适的值是相对于所需要的隐层节点数来确定的。一般情况下,可以同时对两个不同 的期望误差值的网络进行训练,最后通过综合因素来确定其中一个网络。

    BP网络的局限性

    BP网络具有以下的几个问题:

    • (1)需要较长的训练时间:这主要是由于学习速率太小所造成的,可采用变化的或自适应的学习速率来加以改进。
    • (2)完全不能训练:这主要表现在网络的麻痹上,通常为了避免这种情况的产生,一是选取较小的初始权值,而是采用较小的学习速率。
    • (3)局部最小值:这里采用的梯度下降法可能收敛到局部最小值,采用多层网络或较多的神经元,有可能得到更好的结果。
      BP网络的改进

    P算法改进的主要目标是加快训练速度,避免陷入局部极小值等,常见的改进方法有带动量因子算法、自适应学习速率、变化的学习速率以及作用函数后缩法等。 动量因子法的基本思想是在反向传播的基础上,在每一个权值的变化上加上一项正比于前次权值变化的值,并根据反向传播法来产生新的权值变化。而自适应学习 速率的方法则是针对一些特定的问题的。改变学习速率的方法的原则是,若连续几次迭代中,若目标函数对某个权倒数的符号相同,则这个权的学习速率增加, 反之若符号相反则减小它的学习速率。而作用函数后缩法则是将作用函数进行平移,即加上一个常数。

    BP网络实现

    由于BP网络具有出色的非线性映射能力、泛化能力和容错能力,因此BP网络成了至今为止应用最广泛的人工神经网络。下图是Matlab下用BP网络做线性拟合的结果,效果很好。
    这里写图片描述

    % BP网络函数逼近实例
    % 1.首先定义正弦函数,采样率为20Hz,频率为1Hz
    k = 1; % 设定正弦信号频率
    p = [0:0.05:4];
    t = cos(k*pi*p) + 3*sin(pi*p);
    plot(p, t, '-'), xlabel('时间'); ylabel('输入信号');
    % 2.生成BP网络。用newff函数生成前向型BP网络,设定隐层中神经元数目为10
    % 分别选择隐层的传递函数为 tansig,输出层的传递函数为 purelin,
    % 学习算法为trainlm。
    net =
    newff(minmax(p),[10,10,1],{'tansig','tansig','purelin'},'trainlm');
    % 3.对生成的网络进行仿真并做图显示。
    y1 = sim(net,p); plot(p, t, '-', p, y1, '--')
    % 4.训练。对网络进行训练,设定训练误差目标为 1e-5,最大迭代次数为300,
    % 学习速率为0.05。
    net.trainParam.lr=0.05;
    net.trainParam.epochs=1000;
    net.trainParam.goal=1e-5;
    [net,tr]=train(net,p,t);
    %5.再次对生成的网络进行仿真并做图显示。
    y2 = sim(net,p);
    plot(p, t, '-', p, y2, '--')
    

    这是用C语言写的:用BP神经网络拟合函数: Y = s i n ( X ) Y=sin(X) Y=sin(X)

    #include "math.h"
    #include "time.h"
    #include "stdio.h"
    #include "stdlib.h"
    #include "ctype.h"
    #define Ni 1
    #define Nm 4
    #define No 1
    #define L 100
    #define Enom 0.02
    #define loopmax 100000
    #define e 2.71828
    double E;
    double a,u,n;
    double W1[Ni][Nm],D1[Ni][Nm],W2[Nm][No],D2[Nm][No];
    double D22[Nm][No],D11[Ni][No];
    double a1[Ni][Nm],a2[Nm][No];
    double Pi[L][Ni],Pm[L][Nm],Po[L][No],T[L][No];
    double Xm[L][Nm],Xo[L][No];
    double Qm[L][Nm],Qo[L][No];
    void proceed();
    void proceedR();
    void forQ();
    void amend();
    void initiate();
    double newa(double a,double D);
    double cal(double d);
    double vcal(double d);
    main()
    {
        long int i;
    	int flag;
    	char choice;
        for(;;)
    	{
    		flag=0;
    		initiate();
    		for(i=0;;i++)
    		{
    			proceed();
    			if( E < Enom )
    			{ 
    				flag=1;
    				break;
    			}
    			if( i >= loopmax)
    			{
    				flag = -1;
    				break;
    			}
    			if(i%2500==0)
    				printf("第%10d轮误差:%20f,学习速率:%10f\n",i,E,a1[0][0]);
    			forQ();
    			amend();
    		}
    		if(flag>0)proceedR();
    		else printf("训练失败!\n");
    		for(;;)
    		{
    			choice=getchar();
    			printf("是否继续?(Y/N)\n");
    			choice=getchar();
    			choice=toupper(choice);
    			if(choice=='Y')break;
    			if(choice=='N')exit(0);
    		}
    	}
    }
    void initiate()
    {
    	int i,j;
    	int random;
    	double x;
    	double step;
    	int stime;	
    	long ltime;
    	ltime=time(NULL);
    	stime=(unsigned)ltime/2;
    	srand(stime);
    	a=0.02;
    	u=1;
        n=1;
    	printf("本程序将用BP神经网络拟合函数:Y=sin(X)\n\n");
    	for( i=0; i<Nm; i++)
    	{
    		for( j=0; j<Ni; j++)
    		{
    			random=rand()%100-50;
    			x=random;
    			x=x/100;
    			W1[j][i]=x;
    			D11[j][i]=0;
    			D1[j][i]=0;
    			a1[j][i]=0.01;
    		}
    		for( j=0; j<No; j++)
    		{
    			random=rand()%100-50;
    			x=random;
    			x=x/100;
    			W2[i][j]=x;
    			D22[i][j]=0;
    			D2[i][j]=0;
    			a2[i][j]=0.01;
    		}
    	}
        step=1.0/L;
    	for(i=0;i<L;i++)
    	{
    		x=i;
    		Pi[i][0]=x*step;
    		T[i][0]=sin(Pi[i][0]);
    	}
    	printf("初始化成功!\n\n下面将对神经网络进行训练请稍候。\n");
    }
    void proceed()
    {
    	int i, j, k;
    	E=0 ;
    	for( i=0; i<L; i++ )
    	{
    		for( j=0; j<Nm; j++ )
    		{
    			Pm[i][j] = 0;
    			for( k=0; k<Ni; k++ )
    			{
    				Pm[i][j] = Pi[i][k] * W1[k][j] + Pm[i][j];
    			}
    			Xm[i][j] = cal( Pm[i][j] );
    		}
    		for( j=0; j<No; j++)
    		{
    			Po[i][j] = 0;
    			for( k=0; k<Nm; k++)
    			{
    				Po[i][j] = Xm[i][k] * W2[k][j] + Po[i][j];
    			}
    			Xo[i][j] = cal( Po[i][j] );
    		    E = E + ( Xo[i][j] - T[i][j] ) * ( Xo[i][j] - T[i][j] ) / 2;
    		}
    	}
    }
    void forQ()
    {
    	int i,j,k;
    	for( i=0; i<L; i++ )
    	{
    		for( j=0; j<No; j++)
    		{
    			Qo[i][j] = ( T[i][j] - Xo[i][j] )* vcal( Xo[i][j] );
    		}
    		for(j=0; j<Nm; j++)
    		{
    			Qm[i][j]=0;
    			for( k=0; k<No; k++)
    			{
    				Qm[i][j] = Qo[i][k] * W2[j][k] + Qm[i][j];
    			}
    			Qm[i][j] = Qm[i][j] * vcal( Xm[i][j] );
    		}
    	}
    }
    void amend()
    {
    	int i,j,k;
    	double D;
    	for( i=0; i<Nm; i++)
    	{
    		for( j=0; j<Ni; j++)
    		{
    			D1[j][i]=0;
    		}
    		for( j=0; j<No; j++)
    		{
    			D2[i][j]=0;
    		}
    	}
    	for( i=0; i<Ni; i++)
    	{
    		for( j=0; j<Nm; j++)
    		{
    			for( k=0; k<L; k++)
    			{
    				D1[i][j] = Qm[k][j] * Pi[k][i] + D1[i][j];
    			}
                 D = D1[i][j] * D11[i][j]  ;//为D11付初值
    			 a1[i][j] = newa( a1[i][j] , D );  // a 付初值
    			 W1[i][j] = W1[i][j] + a1[i][j] * ( n * D1[i][j] + ( 1 - n ) * D11[i][j] );
    			 D11[i][j] = D1[i][j];
    		}
    	}
        for( i=0; i<Nm; i++)
    	{
    		for( j=0; j<No; j++)
    		{
    			for( k=0; k<L; k++)
    			{
    				D2[i][j] = Qo[k][j] * Xm[k][i] + D2[i][j];
    			}
    			D = D2[i][j] * D22[i][j]  ;//为D11付初值
                a2[i][j] = newa( a2[i][j] , D ); 
    			W2[i][j] = W2[i][j] + a2[i][j] * ( n * D2[i][j] + ( 1 - n ) * D22[i][j] );
    			D22[i][j] = D2[i][j];
    		}
    	}
    }
     void proceedR()
    {
    	int i, j;
    	float x;
    	double input,output;
    	char choice;
    	for(;;)
    	{
    		for(;;)
    		{
    			printf("在此输入需要计算的值(0,1):\n");
    			scanf("%f",&x);
    			input=(double)x;
    			if((input>=0)&(input<=1))break;			
    			printf("注意输入值应介于0、1之间!\n");
    			for(;;)
    			{
    				choice=getchar();
    				printf("是否继续?(Y/N)\n");
    				choice=getchar();
    				choice=toupper(choice);
    				if(choice=='Y')break;
    				if(choice=='N')exit(0);			
    			}
    		}
    		for(i=0;i<Nm;i++)
    		{
    			Pm[0][i]=0;
    			for( j=0; j<Ni; j++ )
    			{
    				Pm[0][i] =  input* W1[j][i]+Pm[0][i] ;
    			}
    			Xm[0][i] = cal( Pm[0][i] );
    		}
    		for( i=0; i<No; i++)
    		{
    			Po[0][i] = 0;
    			for( j=0; j<Nm; j++)
    			{
    				Po[0][i] = Xm[0][j] * W2[j][i]+Po[0][i];
    			}
    		}
    		output=cal( Po[0][0] );
    		printf("输入值为%20f对应的结果为%f\n",input,output);
    		printf("输入值为%20f对应的正常结果为%f\n",input,sin(input));
    		for(;;)
    		{
    			choice=getchar();
    			printf("是否继续?(Y/N)\n");
    			choice=getchar();
    			choice=toupper(choice);
    			if(choice=='Y')break;
    			if(choice=='N')exit(0);			
    		}
    	}
    }
    
    double newa(double a, double D)
    {
    	if( D > 0 )
    	{
    		{
    			if(a<=0.04)
    				a = a * 2;
    			else a=0.08;
    		}
    	}
    	else
    		if ( D < 0)
    		{
    			if(a>=0.02)
    			{
    				a = a / 2;
    			}
    			else a=0.01;
    		}
    	return a;
    }
    double cal(double d)
    {
    	d =  - (d * u);                                //              chushihua 
    	d = exp( d );
    	d = 1 / ( 1 + d );
    	return d;
    }
    double vcal(double d)
    {
    	return u * d * ( 1 - d );
    }
    
    
    
    展开全文
  • 计算机网络学习方法

    万次阅读 多人点赞 2016-07-10 18:40:37
    一、网络课程究竟难在哪? 1.内容比较乱 如果把《计算机网络技术基础》看做是一本计算机网络导论方面的教材,就不会认为乱了,因为导论就是为了解决知识凌乱问题而设置的课程,比如计算机导论,因此也应该有...

    一、网络课程究竟难在哪?

     

    1.内容比较乱

    如果把《计算机网络技术基础》看做是一本计算机网络导论方面的教材,就不会认为乱了,因为导论就是为了解决知识凌乱问题而设置的课程,比如计算机导论,因此也应该有计算机网络导论的课程。这里一般都要介绍基础,包括通信基础,网络体系结构,局域网协议,TCP/IP协议等章节。还包括局域网的内容,包括网络操作系统,网络组建基础,Wi-Fi无线局域网也可以算作局域网的内容,特别是网络设备及设置,也基本上属于局域网的内容。

     

    然后是广域网,虽然一般只有1章的内容,但也是计算机网络组成的重要部分,而且还需要指出,一般广域网涉及到通信基础知识的内容比较多,所以,只要讲广域网,就一定要学习数据通信基础知识。

     

    然后是Internet,是采用网络互连技术的计算机网络,主要向人们提供信息,是学生们非常喜爱,非常了解的计算机网络,主要包括信息访问、信息发布和网络接入。Internet是互联网,采用的网络协议是TCP/IP,因此,本章与TCP/IP协议有密切联系,可以认为是TCP/IP协议内容在应用层上的继续,可以把这2章联系起来学习。

     

    可见,虽然内容多,比较乱,但基本上还是有规律可循的,这里的顺序是网络基础-局域网-广域网-Internet-信息网络安全,期间,各部分又有几条分支,这样,教材的内容就不会显得乱了。当然,教材内容的组成,还可以以另外的顺序,即网络协议,可以是TCP/IP协议,那么,以TCP/IP协议为中心,向下,有广域网、局域网和无线网作为底层协议,向上有Internet作为应用,而有的章节可以作为其他章节的分支。

     

    2.条理性比较差

    前面已经以网络类型作为条理进行了梳理,然后,又以TCP/IP作为条理进行了梳理,因此,条理性差的问题是否就迎刃而解了呢?

     

    3.理论性比较强

    理论性比较强的章节包括数据通信基础、网络体系结构、局域网、TCP/IP协议、广域网等章节,基本上是以理论为主。后面的部分章节,既包括应用,也包括一些理论知识,这样的章节包括信息网络安全、无线网以及Internet,后2者只简单介绍了很少的理论知识,包括C/S模式以及无线局域网协议等。

     

    虽然感觉理论性比较强,但也贯穿着一条主线,这条主线就是网络协议,如果把协议的基本概念在第3章了解和掌握清楚了,这个问题也就基本上迎刃而解了。从协议理论上,主要包括:数据通信-通信协议-协议分层-协议体系结构-协议标准-OSI网络各层协议-局域网协议-以太网协议-广域网协议-TCP/IP协议-无线协议-网络安全协议等。

     

    协议的核心是TCP/IP协议,是统领全局的,是整本书的主线,别的协议都可以作为这个协议的子协议。广域网协议、局域网协议以及无线网协议作为TCP/IP协议的底层协议,即网络接口协议;TCP/IP协议章节中的应用层,以及Internet是TCP/IP协议的应用层协议,在信息网络安全一章中也讨论了协议,是从安全协议的角度讨论协议;在网络组建基础一章,针对不同的网络设备,也讨论了不同的协议分层,比如集线器是网络层设备,交换机是链路层设备,路由器是网络层设备等。

     

    4.涉及复杂的通信技术

    通信本身就是一门复杂的技术,有专门的专业进行研究和学习,本来计算机网络技术就比较复杂,再加上复杂的通信技术,因此,很多读者都感觉,计算机网络技术很难学习。其实,可以这样来理解,计算机网络技术的确需要学习和了解通信技术,通信是计算机网络技术的基础,但是,如果不需要学习广域网技术,或者只需对广域网有一般的了解,并不需要学习更多的通信技术,只要对通信技术有一般的了解,尤其是对数据通信有一般的了解即可,比如数据传输基本概念,交换的概念,多路复用基本概念和差错控制等。

     

    5.解决网络学习困难的方法

    由此可见,分类、协议可以解决知识凌乱的问题,可以解决条理性的问题,而这些,正是教材中的主要内容,掌握这些内容,按照这样的内容进行学习,问题就可以得到解决。

     

    二、学好计算机网络应该注意的要点

     

    1.理解计算机网络的组成

    计算机网络是计算机与通信技术的结合,软件与硬件的结合,通信子网与资源子网的结合,这样来理解,可以减少网络课程学习的难度。这也是网络协议分层的基本知识原点,即网络为什么要分为通信子网和资源子网,因为计算机网络是由通信与计算机技术相结合而产生的。分为2个子网后,问题变简单了。进一步,还可以继续分层,把通信子网分为2层或者3层,即物理层、链路层和网络层;再把资源子网分为2层,即传输层和应用层。

    网络硬件与软件的结合,这样的概念理解也是很重要的,比如互联网,是由路由器和IP协议相结合产生的,路由器是其硬件,而IP协议是其软件。

     

    网络的组成还要注意的是,不同类型的网络,有不同的组成方式,包括局域网、广域网和互联网,因此,要分别介绍网络的组成,不能笼统地谈计算机网络的组成。网络应用也有类似情况,局域网,广域网和互联网的应用范围和模式都是不同的。

     

    2.如何学习网络协议

    分层理论,把协议分层,可以减少分析的难度,分层,以及模块化是计算机技术的重要分析方法。计算机网络首先分为通信子网和资源子网2层,进一步再把通信子网和资源子网继续分层。事实上,网络设备与层有关,比如集线器、以太网交换机和路由器都是不同层的网络设备。TCP/IP与层有关,比如IP层,传输层和应用层。网络安全与层有关,比如应用层、传输层、网络层和链路层都有相应的安全协议。

     

    3.了解网络分类的重要性

    可以更好地帮助读者理清思路,不至于在头脑中如同一团浆糊。如按照地域分类,包括局域网、广域网;按照介质分类,包括铜网、光纤网、无线网;按照应用分类,包括局域网应用和互联网应用。

     

    4.一定要学习好TCP/IP协议

    底层是局域网,广域网或者无线网,然后是IP层,用于组成逻辑的,完整的网络,上述完成了通信子网的功能。TCP完成应用进程间的通信,应用层完成应用。学习计算机网络的实质是学习TCP/IP协议,因为只有采用了TCP/IP这个完整协议的网络才称得上是真正的计算机网络,因此,学习好TCP/IP协议,理解了TCP/IP协议的内涵,也就真正地理解了计算机网络,学会了计算机网络。

     

    三、理解计算机网络技术中一些常用的术语

     

    1.广播方式

    传统局域网采用广播方式,这样才能理解共享介质访问控制,理解以太网的冲突域,理解用集线器组网性能比较差,正被逐渐淘汰,理解以太网交换机对于局域网发展的重要性,因为广播方式属于传统局域网,交换机组网属于交换型局域网,是以太网发展的里程碑,分水岭。除此之外,在MAC层或者在IP协议中,还经常强调广播,因为,广播方式简单,适合于分发信息,比如多媒体广播,会议电视信息分发等。

     

    2.交换

    广域网采用交换,分组交换是计算机网络技术中非常重要的技术,是核心技术,是代表性的技术。局域网开始采用广播,后来,也采用交换,但是与广域网的交换不同,广域网是在网络层,对于分组进行交换,局域网是在MAC层,对MAC帧进行交换。实际上,互联网也要交换,分组在路由器不同端口间进行转发,也可以看做是交换,只不过人们习惯称为分组的存储转发。可见,交换的概念对于计算机网络来说是非常重要的,计算机网络技术离不开交换。

     

    3.点对点和端到端

    点对点有2个含义,一是相对于广播来说的,数据传输只针对某个结点的通信,广域网一般采用点对点方式,路由后,选中一条链路,然后数据传往地址所指出的目的结点(不传往别的结点)。另外一个是相对于端到端来说的,这里的点对点是指,数据传输是逐点进行传输的,端到端则是指,数据传输一般不通过中间结点(不是逐点),或者中间结点不进行处理,比如传输层的数据传输就是在应用程序之间,通过端到端的方式进行传输,因为中间结点没有传输层,不能进行处理,也没有必要进行处理。而网络层,链路层的数据传输均是点对点传输。

     

    4.网络应用模式

    网络的最终目的是为了应用,应用离不开网络通信的双方,那么通信双方是什么关系?他们之间如何相互作用?在TCP/IP协议中指出,他们的关系是客户/服务器(C/S)模式,C/S模式是用来描述通信双方间相互作用方式的。认为,C与S之间是通信双方的关系,在通信中,双方不可能同时发起通信,总有一方首先发起通信,另外一方响应通信,规定,发起通信的一方为客户C,发起通信后,响应通信的一方为服务器。由此,C/S模式也成了编写涉及通信的软件的模式,还有一种模式是B/S模式,其中的B是浏览器,S是WEB服务器,这种模式是目前软件编程的基本常用模式。

     

    5.自底向上与自顶向下

    网络协议是分层的,在对分层的协议进行分析时,可以采用自底向上的方式,也可以采用自顶向下的方式。自底向上是从物理层开始进行分析,一直到应用层;而自顶向下是从应用层开始分析,一直到物理层。过去,人们经常采用自底向上的方法,而现在采用自顶向下的方法比较多。

     

    6.什么才是真正的计算机网络?

    只有采用了TCP/IP完整协议的网络才能称为计算机网络,比如Internet,而局域网,广域网等都属于计算机通信网,属于通信子网,是用来进行数据传输的,尤其是广域网,主要功能是用于数据传输,局域网的概念则可以包含通信子网,也可能某种网络的应用就是采用局域网模式,但这样的模式,高层目前也都采用TCP/IP协议,并且如果要上网,也必须采用TCP/IP协议,即属于互联网,因此,一般所说的计算机网络均是指采用TCP/IP协议的互联网,比如Internet。

     

    四、了解教材架构,建立计算机网络的整体概念

     

    1.通读教材

    学习计算机网络的时候,切记不要太注重细节,要从整体上认识和了解计算机网络,这样就要通读教材,看看教材是如何写的,为什么要这样写,章节的顺序为什么是这样而非那样,作者的写作目的是什么。

     

    2.常看目录

    整体了解教材,学习目标要明确,常看目录,可以了解教材的内容,网络课程的知识体系,教材的结构,教材的主要内容,做到整体上,全面了解和认识计算机网络技术。常看目录,可以使读者不至于陷入某些具体的,局部内容中去,可以跳出圈子,冷眼看计算机网络的课程。目录体现了作者的思路,作者的目的,知道作者究竟要告诉读者什么,使读者目标明确,思路清晰,才能更好地学好计算机网络课程。

     

    3.协议的层次

    一般的教材基本上按照协议层次写,可以理解为按照TCP/IP协议的层次写,局域网、无线网和广域网都是底层协议,Internet是应用层协议,第5章再详细、具体地讨论IP层协议和传输层协议,这不是在按照TCP/IP的协议层次吗?但也有分类的因素,一般是按照地域文类,即局域网、广域网和互联网,这样的、按照地域分类也可以理解为按照应用,即按照局域网应用来分类,和按照互联网应用来分类。

     

    4.教材的写法与网络的学习

    教材的写法与学习网络是两回事,不一定非要按照教材的顺序学习网络。先学习一些计算机网络应用知识,提高感性认识,然后再学习网络理论,学起来的效果就会好些。

     

    (1)比如体系结构在第3章,但是可以靠后些学习。

    (2)局域网组建虽然比较靠后,但可以放在前面来学习,比如网线制作。学会网线制作以后,就可以练习把2台计算机通过一根交叉的双绞线连接起来,然后用Ping命令测试网络连接是否通畅,如果不通畅,即是网线没有制作好。这里既了解了如何建设一个最简单的局域网,又学习了IP协议的概念,学习使用了命令,知道了命令提示符。

    (3)操作系统也是这样,可以在最开始的时候学习,因为学生对于操作系统是比较了解的,起码对于Windows XP和Windows 7是非常熟悉的,以此为基础,可以很容易学会Windows Server 2003。

    (4)Internet也如此,因为学生对Internet是再熟悉不过的,过去一般都上过网,上过QQ空间,上过校内,对于网站的概念都比较熟悉,这样,在学习Internet的时候就会感觉很亲切,能够提起学习的兴趣,尤其在学习Internet信息发布的时候,对于基本概念可以不必做太多的介绍。

     

    紧接着可以讨论WWW技术,介绍WEB技术,介绍网页的概念,介绍HTML语言,介绍C/S客户与服务器模式,介绍端口,介绍HTTP协议以及URL统一资源定位器。事实上,此时已经涉及到了TCP/IP协议的基本概念,涉及到了应用层,为进一步学习TCP/IP协议,学习网络体系结构打下了基础。

     

    5.整个教材的架构

    教材的架构是:底层协议,包括广域网、局域网和无线网,TCP/IP协议,局域网知识体系,包括协议原理,操作系统管理和网络组建,最后是信息网络安全。架构如此,但章节的顺序并不需要必须如此,这是需要注意的。

     

    五、通过应用引领学习

     

    计算机网络不光在计算机信息类专业的工作中很有用,其实,在我们的日常生活中也经常要用到计算机网络技术的相关知识。学习计算机网络,应该结合日常应用来学习,这样可以提高学习兴趣,也能建立明确的学习目标,才能更好地学好计算机网络课程。

     

    1.建立局域网

    现在的家庭,或者学生宿舍配有多台计算机的情况已经很普遍,这样经常涉及到,可能要把计算机连网,以便共享资源,包括打印机资源,文件资源,信息资源等。比如,多台计算机共用一台打印机,共享Internet接入等。

     

    2.学习接入Internet

    我们的计算机,或者家庭,以及宿舍的局域网一般都要接入Internet,了解接入技术,或者在网络接入发生问题的时候能够排除故障,对于学习计算机的人来说都是必须具备的基本能力。

     

    3.笔记本无线网连接

    如果宿舍里有多台笔记本电脑,当需要共享资源时,可以考虑采用无线方式进行联网,因为,现在的笔记本都具有无线连网功能,不用任何传输导线,就可以把这些计算机连接起来,非常方便,并且可以共享上网。

     

    4.蓝牙通信

    笔记本,或者手机,一般都具备蓝牙通信功能,当要把数码相机,或者手机里的照片等上传到笔记本的时候,可以考虑采用蓝牙技术,以便学习计算机网络技术。

     

    5.手机上网

    手机与PC正在不断融合,手机越来越成为一种网络终端,通过手机上网,可以非常方便,包括流量网页,上QQ等,还可以考虑通过手机上微博等。

     

    6.博客,微博

    现代社会,应该学会在Internet上发布信息,因为,Internet已经进入了所谓Web 2.0时代,每个人都应该学会在Internet上发布信息,可以采用论坛BBS,博客或者微博。尤其是微博,是一种具备个人性,移动性,即时性发布信息的最好平台,一定要充分利用,才能在现代社会,快速获取信息和发布信息。通过上博客和围脖,也可以更深入了解和学习计算机网络技术。

     

    条理性的问题解决了,能够整体上认识知识体系了,知识要点掌握了,教材的架构了解了,网络的名词概念弄懂了,又知道了网络如何应用,学习计算机网络技术就是一件轻松自如的事情了,就可以建立起学习的兴趣,而兴趣是最好的老师,有了浓厚的学习兴趣,就可以自觉地学习,刻苦地学习,钻研到计算机网络的知识体系中去,相信,只要有了这样的专研精神,就一定可以学习并掌握好计算机网络课程。

    展开全文
  • 深度网络学习调研报告

    千次阅读 2016-12-10 11:14:36
    深度网络学习调研报告   目  录 1.前言............................................... 3 1.1课题研究的背景及意义.......................... 3 1.2国内外研究的现状.............................. 3 ...
  • 一、学习率衰减的概念和必要性学习率过大,在算法优化的前期会加速学习,使得模型更容易接近局部或全局最优解。但是在后期会有较大波动,甚至出现损失函数的值围绕最小值徘徊,波动很大,始终难以达到最优,如下图...
  • 神经网络学习率设置

    万次阅读 2018-05-21 15:18:29
    原文中文
  • MATLAB神经网络学习

    千次阅读 2015-08-05 22:10:13
    以下内容中还有很多是从网上借鉴而来,权当学习。 1.什么是神经网络 比较粗浅的解释是,我们把输入信号当做matlab中需要输入的数据,将这些数据输入到神经网路后,这些数据都会乘以个数,即权值w,得出的结果再与...
  • BP神经网络学习算法原理

    千次阅读 2017-04-18 13:31:06
    特点是:信号前向传播,误差...通俗理解就是,BP神经网络通过层与层向前传播,得到最终实际输出后,与期望输出做对比,通过“梯度下降”策略,逐层调节权重和阈值,最终得到与期望输出在误差允许范围内的神经网络模型。
  • 如何学习计算机网络——学习方法

    万次阅读 多人点赞 2019-04-03 13:17:18
    一、网络课程究竟难在哪? 1.内容比较乱 如果把《计算机网络》看做是一本计算机网络导论方面的教材,就不会认为乱了,因为导论就是为了解决知识凌乱问题而设置的课程,比如计算机导论,因此也应该有计算机网络导论...
  • 提供可视化使得卷积神经网络不同卷积层单元激活最大化的一些图片或者图片块,理解深度卷积网络到底在学习什么
  • 脉冲神经网络学习笔记(综述)

    万次阅读 多人点赞 2017-11-26 16:03:05
    脉冲神经网络学习笔记,是综述性质的学习笔记
  • 训练函数和学习函数是两个不同的函数 ,网络设置中两个都有。简单的说,训练函数确定调整的大算法,是全局调整权值和阈值,考虑的是整体误差的最小; 学习函数决定调整量怎么确定,是局部调整权值和阈值,考虑的是...
  • 深度学习 --- 神经网络学习原理(学习规则)

    万次阅读 多人点赞 2018-11-10 13:33:45
    从今天开始进入深度学习领域,深度学习我在前两年的理论学习过程中,体会颇深,其中主要有两个算法CNN和RNN,但是本人喜欢追本溯源,喜欢刨根问题。最重要的是每个算法并不是拍脑袋想出来的,是根据当时的研究进程和...
  • 神经网络和深度学习(一)——初识神经网络

    万次阅读 多人点赞 2017-08-15 19:18:17
    神经网络和深度学习 神经网络:一种可以通过观测数据使计算机学习的仿生语言范例 深度学习:一组强大的神经网络学习技术神经网络和深度学习目前提供了针对图像识别,语音识别和自然语言处理领域诸多问题的最佳解决...
  • 前言相信每一位研究深度学习的朋友都明白,深度学习能够在这几年取得如此爆炸式的发展,除了算法本身的改进与创新,最关键的因素就是拥有海量的数据和强大的计算资源。那么,我们很自然的会问:没有海量数据怎么办...
  • 网络表征学习简介

    千次阅读 2018-04-17 19:26:45
    中国计算机学会通讯(CCF)3月份发布了一个关于网络表征学习的专题,对于想了解这方面知识的朋友来说真是雪中送炭啊,感谢大牛们的好文章,下面就来简单谈一谈关于“网络表征学习(Network Representation Learning ...
  • 深度学习(三十二)半监督阶梯网络学习笔记

    万次阅读 多人点赞 2016-03-13 14:26:11
    这几年深度学习声名鹊起,一个又一个AI领域被深度学习攻破,然而现在大部分深度学习所采用的算法都是有监督学习的方法,需要大量的标注数据,需要耗费大量的人力物力。因此如何充分利用大量的无标签数据资源,必将...
  • 神经网络学习小记录55——Pytorch搭建常见分类网络平台(VGG16、MobileNetV2、ResNet50)学习前言源码下载分类网络的常见形式分类网络介绍1、VGG16网络介绍2、MobilenetV2网络介绍3、ResNet50网络介绍a、什么是残差...
  • 人工智能、机器学习、深度学习、神经网络

    万次阅读 多人点赞 2017-12-21 11:38:04
    大数据、云计算、机器学习的技术应用,已经使得IT从业者的门槛越来越高。套用一句樊登读书会的宣传口号“keep learning”,保持对新鲜技术的好奇心,保持对技术应用的责任心,持续关注、学习是每个IT从业者的必备...
  • 人工神经网络(Artificial Neural Network,即ANN ),是20世纪80 年代以来人工智能领域兴起的研究热点。它从信息处理角度对人脑神经元网络进行抽象, 建立某种简单模型,按不同的连接方式组成不同的网络。在工程与...
  • 计算机网络学习心得(一)

    千次阅读 2014-07-04 22:29:25
    为什么要学习计算机网络?什么是计算机网络
  • 机器学习——BP神经网络

    千次阅读 2019-05-30 20:18:37
    1.BP神经网络的思想: BP 神经网络的基本思想就是根据梯度下降法不断更新,输入,输出权值得到的模型。 BP(back propagation)神经网络是非线性不确定性数学模型,是一种具有连续传递函数的多层前馈人工神经网络,...
  • 神经网络学习的原因

    万次阅读 多人点赞 2017-11-27 20:12:55
    神经网络故障检查列表——check list 神经网络的训练出现了问题咋办?损失函数不收敛怎么办?准确率很高但输出不对是什么清况?本文提供了相当全面的检查手册。主要分为数据问题,网络问题和训练问题。
  • 深度学习与神经网络的关系

    千次阅读 2019-06-02 22:22:33
    从广义上说深度学习网络结构也是多层神经网络的一种。 传统意义上的多层神经网络是只有输入层、隐藏层、输出层。其中隐藏层的层数根据需要而定,没有明确的理论推导来说明到底多少层合适。 而深度学习中最著名的...
  • 深度强化学习1——强化学习到深度强化学习

    万次阅读 多人点赞 2018-10-05 22:04:43
    从事深度强化学习有一段时间了,整理了网上的一些资料,写几篇博客作为知识的梳理和总结。 开讲前,先给大家看个深度强化学习的例子,下面是深度学习cnn和强化学习结合玩吃豆人的游戏 看图像我们会发现吃豆人会...
  • 远程培训学习挂机助手【通用版】

    热门讨论 2013-09-15 21:36:35
    现在网络上有各种各样的网络远程培训,有些培训学习时要点指定的按钮才能更新学习时间;有些培训学习时隔一定时间要刷新才行;甚至有的需要在学习过程中做试题或输入验证码之后才能继续学习。在编写完一系列的挂机...
  • 1、复现别人的网络,得不到相同的表现。 2、自己的网络调参,结果调不上去。 所以有些大佬就总结了一些调参的tricks,在这里学习记录一下,然后加上一些自己的理解。 影像神经网络效果的因素可能有但不限于以下几点:...
  • 深度学习图像处理之垃圾分类

    万人学习 2019-09-29 14:32:47
    本课程将使用Pytorch深度学习框架进行实战,并在ubuntu系统上进行演示,包括:不同标注文件下的数据集读取、编写卷积神经网络、训练垃圾分类数据集、测试训练网络模型、网络可视化、性能评估等。 【课程如何观看?】...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,931,602
精华内容 772,640
关键字:

网络学习