精华内容
参与话题
问答
  • python3_实现BP神经网络 + BP神经网络应用实例

    万次阅读 多人点赞 2018-07-29 22:10:28
    BP神经网络是1986年由Rumelhart和McClelland为首的科学家提出的概念,是一种按照逆向传播算法训练的多层前馈神经网络,是目前应用最广泛的神经网络。 优点:具有任意复杂的模式分类能力和优良的多维函数映射能力,...

    0.目录

    1.BP神经网络简介

    2.前期理论准备

    2.算法数学原理

    (一)符号说明

    (二)公式推导

    3.python实现(python3编程实现)

    (一)sigmoid函数

    (二)BP主函数实现

    4.数据格式

    1.BP神经网络简介

    BP神经网络是1986年由Rumelhart和McClelland为首的科学家提出的概念,是一种按照逆向传播算法训练的多层前馈神经网络,是目前应用最广泛的神经网络。

    目录

    0.目录

    1.BP神经网络简介

    2.前期理论准备

    2.算法数学原理

    (一)符号说明

    (二)公式推导

    3.python实现(python3编程实现)

    (一)sigmoid函数

    (二)BP主函数实现

    4.数据格式


    优点

    • 1.具有任意复杂的模式分类能力和优良的多维函数映射能力,解决了简单感知器不能解决的异或问题的问题(参考博客:https://www.jianshu.com/p/a25788130897 或 https://www.cnblogs.com/xym4869/p/11282469.html
    • 2.从结构上讲,BP神经网络具有输入层、隐含层和输出层
    • 3.从本质上讲,BP算法就是以网络误差平方目标函数、采用梯度下降法来计算目标函数的最小值。基本BP算法包括信号的前向传播误差的反向传播两个过程。

    缺点

    • 1.学习速度慢,即使是一个简单的过程,也需要几百次甚至上千次的学习才能收敛。
    • 2.容易陷入局部极小值
    • 3.网络层数、神经元个数的选择没有相应的理论指导
    • 4.网络推广能力有限。

    应用

    • 1.函数逼近
    • 2.模式识别
    • 3.分类
    • 4.数据压缩

    2.前期理论准备

    网络训练的目标:找到合适的权值和阈值,使得误差E最小。

    sigmoid函数:在信息科学当中,由于其单增以及其反函数单增等性质,sigmoid函数常被用作神经网络的阈值函数,将变量映射当0和1之间。(该函数的对x的求导也应该理解)

    2.算法数学原理

    (一)符号说明

    Xi: 输入信号。

    Xd: 隐层的阈值(是从求和函数中-θ中分离出的-1)。

    Vih: 第h个隐层神经元所对应输入信号Xi的权值。

    αh: 第h个隐层神经元的输入。

    -γh=--1*γh:隐层神经元的阈值。

    bh: 第h个隐层神经元的输入。

    ωhj: 第j个输出层神经元所对应的隐层神经元输出bh的权值。

    -θj=-1*θj:  输出层神经元的阈值(bq)

    :第j个输出层神经元的输出(预测输出值,yj为真实值)

    (二)公式推导

    通过公式变换可得输出层权值与阈值的变化量:

    同理可得隐层权值和阈值的变化量:

    3.python实现(python3编程实现)

    (一)sigmoid函数

    def sigmoid(x):
        """
        隐含层和输出层对应的函数法则
        """
        return 1/(1+np.exp(-x))
    

    (二)BP主函数实现

    def BP(data_tr, data_te, maxiter=600):
    
        # --pandas是基于numpy设计的,效率略低
        # 为提高处理效率,转换为数组
        data_tr, data_te = np.array(data_tr), np.array(data_te)
    
        # --隐层输入
        # -1: 代表的是隐层的阈值
        net_in = np.array([0.0, 0, -1])
        w_mid = np.random.rand(3, 4)          # 隐层权值阈值(-1x其中一个值:阈值)
    
        # 输出层输入
        # -1:代表输出层阈值
        out_in = np.array([0.0, 0, 0, 0, -1])
        w_out = np.random.rand(5)             # 输出层权值阈值(-1x其中一个值:阈值)
        delta_w_out = np.zeros([5])           # 存放输出层权值阈值的逆向计算误差
        delta_w_mid = np.zeros([3, 4])        # 存放因此能权值阈值的逆向计算误差
        yita = 1.75                           # η: 学习速率
        Err = np.zeros([maxiter])             # 记录总体样本每迭代一次的错误率
    
        # 1.样本总体训练的次数
        for it in range(maxiter):
    
            # 衡量每一个样本的误差
            err = np.zeros([len(data_tr)])
    
            # 2.训练集训练一遍
            for j in range(len(data_tr)):
                net_in[:2] = data_tr[j, :2]                       # 存储当前对象前两个属性值
                real = data_tr[j, 2]
    
                # 3.当前对象进行训练
                for i in range(4):
                    out_in[i] = sigmoid(sum(net_in*w_mid[:, i]))  # 计算输出层输入
                res = sigmoid(sum(out_in * w_out))                # 获得训练结果
    
                err[j] = abs(real - res)
    
                # --先调节输出层的权值与阈值
                delta_w_out = yita*res*(1-res)*(real-res)*out_in  # 权值调整
                delta_w_out[4] = -yita*res*(1-res)*(real-res)     # 阈值调整
                w_out = w_out + delta_w_out
    
                # --隐层权值和阈值的调节
                for i in range(4):
                    # 权值调整
                    delta_w_mid[:, i] = yita * out_in[i] * (1 - out_in[i]) * w_out[i] * res * (1 - res) * (real - res) * net_in
                    # 阈值调整
                    delta_w_mid[2, i] = -yita * out_in[i] * (1 - out_in[i]) * w_out[i] * res * (1 - res) * (real - res)
                w_mid = w_mid + delta_w_mid
            Err[it] = err.mean()
        plt.plot(Err)
        plt.show()
    
        # 存储预测误差
        err_te = np.zeros([100])
    
        # 预测样本100个
        for j in range(100):
            net_in[:2] = data_te[j, :2]                         # 存储数据
            real = data_te[j, 2]                                # 真实结果
    
            # net_in和w_mid的相乘过程
            for i in range(4):
                # 输入层到隐层的传输过程
                out_in[i] = sigmoid(sum(net_in*w_mid[:, i]))
            res = sigmoid(sum(out_in*w_out))                    # 网络预测结果输出
            err_te[j] = abs(real-res)                           # 预测误差
            print('res:', res, ' real:', real)
        
        plt.plot(err_te)
        plt.show()
    
    
    
    
    if "__main__" == __name__:
    
        # 1.读取样本
        data_tr = pd.read_csv("5.2 data_tr.txt")
        data_te = pd.read_csv("5.2 data_te.txt")
        BP(data_tr, data_te, maxiter=600)

    4.数据格式

    展开全文
  • 网络应用

    千次阅读 2006-09-09 20:45:00
    <!--.STYLE1 { font-family: "宋体"; font-weight: bold;}.STYLE2 {color: #009966}--> 网络应用:
    
    
    网络应用:   发行时间:
      《CBT Nuggets思科CCNA视频教学》英语 2005
      《TrainSignal视频教程》 2000
      《局域网全搞定(标准版)》6CD 2005
      《吉大-计算机维护与维修》 2006-5-18
      《组策略高手完全手册入门至高级完全篇》 2005
      《无盘工作站组建、应用、维护实战精通》PDF 2004
      《中山大学局域网组网工程》 2005
      《上海交大计算机组网技术》 2006-6-3
      《上海交大网络安全》 [RMVB] 2006-7-2
      《上海交大计算机网络研》 [RMVB] 2006-7
      《美河制作.六个月成为网络专家》 2006-9
      《思达网络教育学校网络工程师多媒体视频学习课件》 2005
      《ccnp视频教学全集》 2004
      《互联网原理及应用》 2005-12
      《TCP/IP视频教程》 2005-9
      《电脑硬件维修资料大全》 2005-2-26
      《主板维修资料》 2004-1-20
      《笔记本拆解视频教程》 2005-7
    《打印机原理与维修》 2005
      《楚广明24小时学通linux》 2006
      《微软院校认证课程系列教材—网络服务器操作系统的安装》 2003-8
      《微软院校认证课程系列教材-Windows 2000网络环境管理》 2004
      《黑鹰LINUX》 2006-4
      《黑基VIP会员区培训内容》 2006
      《黑客基地VIP会员区视频教程》 2005-6
      《黑鹰vip光盘全集 价值168元》 2006-9-15
      《黑鹰基地Win2003系列视频教程》 2006
      《山东德州思蓝开源 大学中学不到的linux课程》 2006-8-16
      《山东德州思蓝linux内核分析视频更新丁林松主讲》 2009-6-29
      《山东德州思蓝 linux 动态连接库 丁林松主讲》 2006-8-27
      《山东德州思蓝 LINUX UNIX 黑客工具Nmap视频讲解》 2006-8-26
      《山东德州思蓝 linux C语言工具GCC讲解》 2006-8-25
      《山东德州思蓝开源组织 红旗linux应用(1)》 2006-8
      《山东德州思蓝开源组织提供REDHAT AS 4.0 虚拟程序》 2006-8-28
      《linux软件开发工程师教程》 2006
      《ChinaITLab Linux实战工程师网校课程》 [RMVB] 2005
      《unix教学,适合菜鸟》 2003
      《台湾 培亚 LINUX》 2006-6-4
      《Linux服务器设架》 2006-8-27
      《unix操作系统》 2005-12
      《dos的系统讲解》 2005
      《密码编码学与网络安全》 2003
      《精典dos实用技术配套魔法光盘》 2005-6
      《黑客基地VIP会员区视频教程》 2005-6-24
      《黑客教程之一:黑客动画教程》 2004
      《黑客动画吧FreeBSD培训教程》 2006
      《中国共享天空 原创破解动画教程系列》 2005-8-17
      《计算机软件脱壳技术视频》 2005-7
      《网络安全与计算机犯罪勘查技术学》PDF 2006-5
      《计算机资源大集合》 2005
      《操作系统菜鸟必杀技---JUJU猫论坛会员版》 2005
      《JUJU 猫论坛系统克隆准备工具 V1.0.0.0 Beta》 2005
      《北大青鸟 BENET 网络工程教材(ppt)》 2005
      《Windows Server 2003 即学即会》 2004
      《Windows Server 2003从入门到精通系列教程》 2005
      《微软TechNet》 2006-8
      《Exchange Server 白手起家系列讲座》 2006-3
      《美河提供.DB2技术原理及应用》 2006-10
      《网站制作资源系列》 2007
      《Office高手:PowerPoint2003商务演讲》[ISO] 2006
      《网管员必读-服务器与数据存储》 2005-12
      《手把手教你配路由录像》 2006-12
    个人应用:    
      《Adobe Audition2.0 视频教程》 2006
      《榕榕GHOST系统光盘制作视频教程》 2006-30
      《Ghost中文教程》 2004
      《其实你还没懂word》 2006-9
    展开全文
  • Windows Server 2012 R2 网络应用(全套)

    千人学习 2018-05-13 19:56:44
    全套视频共6章,主要涉及到的是和网络应用有关的技术知识点,内容包括Windows Server 2012 R2路由器的设置、网络地址转换(NAT)、虚拟专用网(VPN)、DirectAccess直接访问内部网络资源、RADIUS服务器的配置、网络...
  • MATLAB的人工神经网络应用

    千次阅读 2015-07-06 18:11:54
    基于梯度法Hopfield神经网络提供了一个有效的实时求解线性矩阵方程的并行计算方法,用梯度法神经网络模型解线性矩阵方程Ax=b做实例: 一、 人工神经网络简介 二、 梯度法神经网络模型的建立 三、梯度法神经网络模型解...

    一、  人工神经网络简介

        人工神经网络 ( Artifical NeuralNetwork- ANN) 是目前国际上迅速发展的前沿交叉学科 (张立明, 1993), 它是模仿生物神经系统的信息处理方式、 组织结构和系统功能的简化系统。人工神经网络以其自身的自组织、自适应和自学习的特点被广泛应用于各个领域。传统的前馈网络属于静态网络,而今年来迅速发展的递归神经网络,属于动态网络,利用网络的内部状态来反馈描述系统的非线性动力学特性,从而更直接的反应系统的动态特性。

        递归网络是有一个或多个反馈回路的神经网络,把反馈应用于神经网络有多种不中的形式,从而就会产生不同结构的递归网络。在其学习算法中,递归下降法被广泛应用。本文采用一种梯度法神经网络(即Hopfield神经网络或称递归神经网络)求解线性矩阵方程:

     

    通过与理论的解对比分析,验证该模型的解线性矩阵方程Ax=b的准确性,并进一步通过误差分析,证实求解的正确性。


    二、 梯度法神经网络模型的建立

         自上世纪 80年代中期以来 , 很多研究都把注意力放在矩阵运算的快速算法方面。一般来说,数值算法的最小计算复杂度通常与矩阵维数的立方成正比。所以,当这种串行处理算法应用到维数较大的矩阵实时求解问题时就显得效率不高。有鉴于此,我们也曾提出复杂度与矩阵维数平方成正比的数值算法来解决这类矩阵问题。然而,结果也同样未尽人意,如求解一个60000维矩阵逆运算需要约一个小时的时间。因此 ,许多学者一直在探讨合适的并行计算方案。动力学系统方法是一种非常重要的并行计算方法,能够有效地解决固定矩阵运算问题,随着对神经网络的深入研究,基于递归神经网络的动力学系统和模拟求解方法已经发展成熟。神经动力学方法,因其并行分布计算的特性和简单的硬件/电路可实现性,被认为是在线解决这些固定矩阵运算问题的强有力的替换工具。

     

    2.1 理论解

    数学矩阵论中求解方法如下:

     


    2.2 模型推导

    下面依据负梯度设计方法推导该神经网络模型:

    1)构造一个基于矩阵范数的标量误差函数 :


    2)为了使上述误差减小 , 可使用经典的负梯度方法, 因此我们可以得到如下误差函数负梯度方向作为下降方向:


    3)线性的基于负梯度的神经网络模型如下:


    其中参数  决定网络的收敛速度(如条件允许, 越大越好);

    三、梯度法神经网络模型解线性矩阵方程Ax=b结果的验证

    通过数学矩阵论中求出的解与梯度法神经网络模型求出的解x的比较分析,以及误差分析来检验该神经网络在求解线性矩阵方程问题时的准确性和有效性。模型的验证我们通过MATLAB仿真来实现。

     

    3.1 MATLAB程序分析

    3.1.1构造矩阵

    为了仿真 、 对比和验证上文给出 的分析结论 , 我们可以考虑与如下常系数矩阵相关的矩阵方程的神经网络求解:


                                              

    且矩阵A、b可以由下面MATLAB代码给出:

    构造矩阵A

    matirxA.m

    function A=matirxA()

    A=[1 2  3; 4  2  6;7  4 9];  %任意给出n阶方阵

     

    构造矩阵B

    Vector.m

    function b=vectorb()

    b=[1; 1; 3];      %任意给出与矩阵同行的行矩阵

     

    3.1.2 AX=b 理论解的求解

    main.m

    %理论解的求解

    A=matrixA(t);

    b=vectorb(t);

    y=A\b;

    t1=0:0.01:10

     

    %画出理论解y1 y2 y3的图形

    plot(t1, y(1), '.b', t1, y(2), '.r', t1,y(3), '.k')

    legend('理论解x1','理论解x2','理论解x3');

    xlabel('t');

    ylabel('x');

    hold on

    x1= y(1), x2=y(2),x3=y(3)       %输出理论解

     

    3.1.3 梯度法神经网络模型解线性矩阵方程Ax=b

    先将描述该神经网络的矩阵微分方程 (MDE)转化为向量微分方程(VDE) ,即标准的给定初始值常微分方程 (ODE) ; 再用MATLAB 指令“ode15s ”, 用来仿真上述转化后的给定初始值常微分方程,最后再将x随时间t变化的过程绘出。

    (1)矩阵微分方程转换为向量微分方程

    xprim3.m

    function xprim=xprim3(t,x)

    lamda=100;    %lamda即模型中的参数    决定网络的收敛速度

    A=matirxA;

    b=vectorb;

    xprim=-lamda*A'*(A*x-b); %t时间内 x 沿负梯度方向变化的  的值

     

    (2)梯度法神经网络模型求出的 的解以及求解的x的过程图

    main.m

    clc

    clear

    close all

    t0=[0 2];

    x0=[0;0;0];

    %ode15s返回值:随时间变化  的值  

    % ode15s参数:'xprim3' – 需要求数值解的微分方程的函数

    %t0 – 变化的时间     x0 –- x 的初值

    % 在时间t自动调整x,求解

    [t,x]=ode15s('xprim3',t0,x0); 

    plot(t,x);    %画出微分方程求解过程中随时间t变化的曲线

    hold off;

     

    3.1.4 误差分析

    for j=1:length(t)

           err(:,j)=A*x(j,:)'-b; %将神经网络模型求解的x值代入Ax-b中

           nerr(j)=norm(err(:,j));

    end

    figure

    plot(t,nerr)

    xlabel('时间t');

     

    3.2 MATLAB的运行结果分析

     (1) 理论解的数值

           理论解的数值分别是:

    x1 =   0.5000

    x2 =   1.0000

    x3 =   -0.5000

     

    (2)理论解与模型解的图形

    从图1中,理论解x1、理论解x2和理论解x3三条直线是以理论解x1、x2、x3做纵坐标平行于x轴的直线,可以看出当 t>1 时,随着t的增大,梯度法神经网络模型求解线性矩阵方程 的三个解分别越来越接近理论解x1、理论解x2和理论解x3三条直线,说明网络模型求解线性矩阵方程的准确性。


    图1

     

    (2) 误差分析图形


    图2

    从误差图图2进一步分析,同样当t>1 时,基于梯度下降法的神经网络模型求解线性方程组结果的误差趋近于0。进一步验证我们的基于梯度下降法的神经网络模型求解线性方程组的模型具有很好的校验。

     

    四、结论

    仿真结果同理论分析的对应一致,进一步证实基于梯度法的Hopfield神经网络在求解固定系数线性矩阵方程中具有很好的效验。基于梯度法Hopfield神经网络提供了一个有效的实时求解线性矩阵方程的并行计算方法。

    展开全文
  • 《DeepLearning tutorial(5)CNN卷积神经网络应用于人脸识别(详细流程+代码实现)》这篇文章的代码,将CNN用于人脸识别,整个实现流程请见:http://blog.csdn.net/u012162613/article/details/43277187
  • 最通俗易懂的网络应用层协议详解

    万次阅读 多人点赞 2017-02-23 17:21:00
    前言其实本文只是讲解从传输层到应用层实现网络消息传递的一个详细流程,至于更底层的网络层和网络接口层,那就不在我的考虑范围内了,事实上那部分机制是不需要你去操心的,除非你想开发操作系统!然后本文打着通俗...

    前言


    其实本文只是讲解从传输层到应用层实现网络消息传递的一个详细流程,至于更底层的网络层和网络接口层,那就不在我的考虑范围内了,事实上那部分机制是不需要你去操心的,除非你想开发操作系统!

    然后本文打着通俗易懂的标题,所以在前言之后我将不会提及任何一个新手可能会不理解的关键字或专业术语(也就是说这样只是方便了理解并不方便使用,但这就是本文的目的,毕竟有了清晰的理解之后无论再换到哪个平台都是同样的使用方式,只不过部分专业术语我可能会在它第一次出现的位置放个【】描述一下它的本名),接下来我将开启典型的情景模式进行讲解。

    首先声明,本文主要是根据自己的理解编写而来,如果有错误的地方,不要犹豫,直接打脸就行了。

    背景


    电脑A和电脑B【服务器和客户端】是相隔了未知距离的两台电脑,有一天,A突然想要跟B打招呼(也许是冥冥之中的命运,他知道了B的存在),这时互联网大哥就出来了(至于这货是怎么诞生的有兴趣的再去查他的生辰吧),A和B都买了一根最新潮的网线【数据传输线】,插在自己身上同时两人都连接到了互联网内。

    互联网大哥这时就开始推销了:你想要跟B打招呼吗?拜托我不就成了,A你把要说的话告诉我,然后我再告诉B,同时B要对你说的话我也能反馈给你。

    A一听兴奋了,原来打个招呼这么简单,想着他一股脑儿的把自己想说的话通通告诉了互联网大哥,然后......

    就没有然后了,互联网大哥跑断了腿也没能找到B住在哪儿,因为A并没有告诉他B的住处,事实上A也不知道B的住处,所以,这场原本预料之中无比轻松欢快的交流宣告破裂。

    【任意电脑连接至互联网,便可以通过互联网传输数据,电脑间的资源共享其实就是把一台电脑的资源数据通过互联网传递到另一台电脑,在另一台电脑生成一个一模一样的资源,从而实现了资源共享】

    问题来了:怎么找到B的住处?


    这天,A在医院陪着断腿的互联网大哥,他们商量着一种可以找到B的住处的方法。

    互联网大哥:我们整个互联网家族兄弟姐妹千千万万,B虽然也是委托给了我们家,但我也找不到跟他直接联系的那个人是谁呀,有可能是我千千万万兄弟姐们姨嫂舅伯中的任何一个。

    A点着头:对,这确实是个麻烦事,看来我们的首要目的就是要先知道B的住处。

    想了一想,这时互联网大哥突然一拍脑门:我想到法子了,我让族里的兄弟姐妹们给每家每户都标个门牌号【IP地址】不就得了,这样的话往后家家户户串门就要容易得多了。

    想着,互联网大哥直接从病床上翘了起来,不顾A的拦阻瘸着个断腿就跑出了医院,他迫不及待的想要把这种新潮的想法普及给族里的每个兄弟姐妹,这样的话,他也能帮助A找到B的住处了。

    ......

    也不知道是过了多久以后,这天互联网大哥再次登门到了A家。

    A无比热情的迎接了他,饭后互联网大哥递了一张名片给A:这是B家的门牌号。

    A接过这张名片,听着互联网大哥给他介绍上面的基本信息:147.258.369.145是他家的门牌号,现在注册门牌号的住户太多,我们分了四个0到255的数再通过符号点连接组成,至于为什么要用点来连接,嘿嘿,这也是我提的方式,毕竟147.258.369.145比147258369145容易识别得多。

    听着互联网大哥说完,A算是明白了:那这么说的话往后我把想说的话告诉你,你就能通过这个门牌号传达到B那里去了吗?

    互联网大哥点着头:对,而且不只是我,只要是我们家族内的任何一个成员,你把要传递的话告诉他,再把传递的门牌号告诉他,他都能帮你传达消息。

    A一听兴奋了,原来打个招呼终于变得这么简单了,想着他一股脑儿的把自己想说的话通通告诉了互联网大哥,然后......

    就没有然后了,互联网大哥跑断了腿也没能找到哪个是B,因为B的家族里也有数不清的兄弟姐妹,很明显他也不知道其中哪个是B,所以,这场原本预料之中无比轻松欢快的交流又一次宣告破裂。

    【互联网中通过IP地址 + 端口号才能完整的定位到某台电脑的某个程序,从而向该程序发送数据,只依靠IP地址的话不能发送到特定的程序】

    问题来了:怎么知道在B的家族中哪个是B?


    这天,A陪在医院替互联网大哥削着苹果。

    互联网大哥想来想去总觉得这刚施行起来的门牌号机制还是不太完善,不过突然他灵光一闪,又想到了一个极好的法子来改善这个门牌号机制:对呀,我们要是给每家每户的每口人都制定一个身份证【端口号】不就得了,这样通过门牌号和身份证就可以准确的找到B了。

    想着,互联网大哥直接从病床上翘了起来,不顾A的拦阻瘸着个断腿就跑出了医院,他迫不及待的想要把这种更新潮的想法普及给族里的每个兄弟姐妹,这样的话,他也能帮助A找到B了。

    ......

    也不知道是过了多久以后,这天互联网大哥再次登门到了A家。

    A无比热情的迎接了他,饭后互联网大哥递了一张名片给A:这是B家的门牌号和B的身份证。

    A接过这张名片,只见上面写着:147.258.369.145:80,后面这个80的话应该就是B的身份证了。

    A说:这样的话往后我把想说的话告诉你,你就能通过这个门牌号和身份证传达到B那里去了吗?

    互联网大哥点点头:对。

    A一听兴奋了,原来打个招呼终于变得这么简单了,想着他一股脑儿的把自己想说的话通通告诉了互联网大哥,然后......

    就没有然后了,互联网大哥虽然把A说的话带到了B那里,但B完全看不明白A在说些什么,因为互联网大哥是用录音机【编码】来记录A的传话的,而他们的录音机只能记录一些正常人完全没法看懂的由数字1和数字0组成的数据【二进制数组】,所以,即便他将A说的话完好无损的用录音机录了下来,但到了B那里时却不知道用什么方式才能播放出来了,所以,这场原本预料之中无比轻松欢快的交流又一次宣告破裂。

    【互联网中传递的数据都是由1和0组成的字节数组,任意数据类型(int、string等),任意文件(.mp4、.mp3等)都能转换为字节数组从而在网络中传递,接收方按照传输方的编码方式对字节数组进行转换之后,得到特定的数据类型或文件,这才算是完成了数据的传输】

    问题来了:A要传递的话已经到了B的手里,但怎么才能让B看懂A所说的话呢?


    这天,A又和互联网大哥聚在一起。

    互联网大哥抱怨说:一定是录音机有问题,我要去找生产厂商投诉。

    A提议道:找厂商定做一款播放器不就得了,能够把录音机录下来的声音原封不动的回放出来。

    听A这一说,互联网大哥一拍脑门:好主意啊,这样的话我们也不用管录音机里装的那些1啊0的是些什么数据了,只管让播放器按照录音机录音的方式【编码方式】进行回放就可以了!

    想着,互联网大哥立马就跟A道别离去,也不顾A的挽留,他迫不及待的想要把这种更新潮的想法普及给族里的每个兄弟姐妹,这样的话,他也能帮助B听到A的传话了。

    ......

    也不知道是过了多久以后,这天互联网大哥再次登门到了A家。

    A无比热情的迎接了他,饭后互联网大哥介绍了他们最新的传话工具,录音机和播放器。

    A一听兴奋了,原来打个招呼终于变得这么简单了,想着他一股脑儿的把自己想说的话通通告诉了互联网大哥,然后......

    就没有然后了,互联网大哥虽然把A说的话带到了B那里,但B完全没听明白A在说些什么,因为互联网大哥用录音机同时记录了A说的好几句话。

    本来传话的内容是这样的:你好呀!我叫A,我住在A家村!

    但播放器播放出来的内容却是这样的:你好呀我叫,A我住,在,A家村!

    所以,这场原本预料之中无比轻松欢快的交流又一次宣告破裂。

    【因为数据的接收方收到的只是一长串的字节数值,先不论他知不知道该用什么编码方式进行转换,就算知道了,他将数据转换出来以后也只是一段一段分隔开的内容,或是一长串黏在一起的内容,总之他可不知道接收到的这个数据究竟是装了四个int数据呢,还是三个int一个string,还是一张图片】

    问题来了:A要传递的话已经到了B的手里,但怎么才能让B理清A要表达的语意呢?


    这天,A又和互联网大哥聚在一起。

    互联网大哥抱怨说:一定是播放器有问题,我要去找生产厂商投诉。

    A提议道:播放器应该没有问题,我想我们可以在传话的内容上做些手脚,比如说,用一些特殊的东西来区分开我说的每一句话,也就是,制定一种规则【传输协议】

    听A这一说,互联网大哥一拍脑门:好主意啊,我想到了一个法子,我们在每句话的前面都加上一个表示你开始说话的词语【消息头】,然后里面记录你这句话说了多少个字【消息头记录的消息体长度】,这样的话就算播放器放出来不是连贯的,但B也能根据我们附加的信息看明白你说的话。

    想着,互联网大哥立马就跟A道别离去,也不顾A的挽留,他迫不及待的想要把这种更新潮的想法普及给族里的每个兄弟姐妹,这样的话,他也能帮助B听明白A的传话了。

    ......

    也不知道是过了多久以后,这天互联网大哥再次登门到了A家。

    A无比热情的迎接了他,饭后互联网大哥介绍了他们最新的传话规则,以这种规则来传话的话,A说的一句话从播放器放出来大概就是这种格式:

    【消息头】A说了一句话,说了三个字【消息体的长度】【消息体】你好呀!

    不过互联网大哥继续说:只不过这种规则的话,为了防止前面的标记(A说了一句话,说了三个字)也被播放器打乱顺序,我们得规定这个标记必须是一个固定的长度,以及一个固定的语法,同时这个长度和语法要让B也知道,这样的话就算传递到B那里时前面的标记被打乱了(比如在B那里是这样:A说了一,句话说了,三个字),但B只要根据我们规定的长度(比如这里是:11)和语法就能整理出这个标记,然后再通过这个标记整理出他后面包含的话,从标记中可以看出后面只有三个字是包含在这句话中的,将这三个字:你好呀,提取出来就是一句完整的话,然后 你好呀 后面跟着的又是下一句话的标记,再根据标记的长度固定为11,筛选出11个字,整理出来就是下一句话的标记,然后根据标记中又可以得出下一句话的长度,以此类推......

    A一听兴奋了(虽然他压根就没听明白),原来打个招呼终于变得这么简单了,想着他一股脑儿的把自己想说的话通通告诉了互联网大哥,这次,终于成功了,B终于听到了A对他说的话,虽然内容中有很多不属于原话的标记信息,但B总算是听明白了:

    A说了一句话,说了三个字你好呀
    A说了一句话,说了三个字我叫A
    A说了一句话,说了六个字我住在A家村

    同时,B也通过A的门牌号和身份证并使用这种互联网家族推行的规则向A回应了一声:

    B说了一句话,说了三个字你好呀
    B说了一句话,说了六个字很高兴认识你

    ......

    至此,这场原本预料之中无比轻松欢快的交流到这里终于轻松欢快的完成了。

    互联网大哥为此感到无比的欣慰,虽然只是为A和B解决了看似简单的互相传话,但在这之后,他想到了可以把任何东西都通过一种方式变成很多个1和0组成的数据,然后送到指定的门牌号和身份证的人手里,从而实现了一个无比复杂的物流链,那种最初的和A制定的规则也一直延续了下来。

    至此,故事讲完了,如果你还是没听懂或者压根就没看明白讲述了什么,那一定是A和B的描述有问题(A:这锅我不背!B:这锅我不背!),不过,我觉得还是有必要进行总结一下。

    总结


    总结的话大概就是下面两点:

    1、【传输层】两台电脑之间要互通消息的话,通过IP地址和端口号来确定各自的位置,然后将要传递的数据转化为字节数组(因为目前只支持传递这种格式的数据,事实上所有数据存放在内存中都是这种格式),进行相互发送和接收,至于传输层,也是有传输协议的,不过这个一般不需要你去管理,提一下,一般只需要你去关心的就是TCP/IP协议,当然还有UDP/IP协议。

    2、【应用层】虽然发送方知道自己发送的是什么东西、转化成字节数组之后有多长,但接收方肯定不知道,所以应用层的网络协议诞生了,他规定发送方和接收方必须使用一个固定长度的消息头,消息头必须使用某种固定的组成,而且消息头里必须记录消息体的长度等一系列信息,以方便接收方能够正确的解析发送方发送的数据。

    再次整理一下流程:

    发送方发送消息 ->

    接收方首先根据协议规定的消息头长度(比如30),取出30个字节 ->

    再根据协议规定的消息头编码方式(比如UTF-8),将这30个字节转换为对应数据,也就是得到消息头 ->

    再根据协议规定的消息头中的特定位置记录有消息体的长度(比如200),从而在这30个字节之后再取出200个字节 ->

    再根据协议规定的消息头中的特定位置记录有消息体的编码方式(比如UTF-8),对这200个字节进行转换,从而得到与发送方发送时一模一样的数据。

    所以说,应用层的网络协议,他旨在让你更方便的应用从网络中接收到的数据,至于数据的传递,没有类似http协议的东西,你也可以直接在两台电脑间开干,只不过传来传去就是一堆1和0组成的字节数组,如果你认为能够看得懂,那也就可以不使用协议了。



    转载请注明出处:http://blog.csdn.net/qq992817263/article/details/56669228

    展开全文
  • 网络应用第七次测试

    万次阅读 2020-03-10 16:47:30
    IEEE802.1Q可以提供的有效的VLAN ID范围是__D____单选 ...对于应用VLAN的二层交换机,下列说法错误的是___D___单选 A:在不通过三层路由的情况下,任何一个帧都不能从自己所属的VLAN被转发到其他的VLAN中 B:每一...
  • 计算机网络应用层题库

    千次阅读 2018-07-31 17:53:55
    网络课课后题 1 P2P模式的最主要特点是:...3 网络应用-FTP文件共享:要求高带宽   4 服务质量中的抖动是指发送端相邻两个报文发送的时间差。 解析:接收端相邻两个报文的时延差,即前后两个时间的到达时间...
  • PC端网络应用和APP应用的差别

    千次阅读 2015-11-19 20:37:23
    桌面端网络应用和手机应用的差别 不管是桌面端网络应用还是手机应该,性能测试的基本原理是相似的,尤其是对于手机网络应用的测试。两者使用相同的技术,你也不用为手机应用选择特别 的性能测 试工具。测试工具只...
  • 网络应用程序体系结构

    千次阅读 2019-02-21 17:06:16
    具有客户/服务器体系结构的著名应用程序有Web、FTP、Telnet和电子邮件。 其特点有: 1.服务器和客户机是一对多的关系(如图 注意:但服务器却并不总是一台,因为有的时候要处理海量的客户机的请求,一台服务器...
  • 计算机网络13--网络应用的体系结构

    千次阅读 2016-02-26 16:10:24
    1.网络应用的三种体系结构简介 2.客户机/服务器结构 3.P2P结构 4.混合结构 1.网络应用的三种体系结构简介  网络应用的体系结构主要有以下三种:  a.客户机/服务器结构=Client-Server(C/S)  b.点对点结构=Peer...
  • 2001年4月,Borland已经正式发布了Delphi 6.0,它在网络应用程序开发方面具有非常独特的优势。 本书主要介绍Delphi 6.0在网络开发方面的内容。 全书共分为10章,循序渐进地介绍了Delphi网络实用开发技术,主要包括...
  • 循环神经网络应用举例

    千次阅读 2017-10-09 01:29:21
    RNN的应用举例——基于RNN的语言模型 现在,我们介绍一下基于RNN语言模型。我们首先把词依次输入到循环神经网络中,每输入一个词,循环神经网络就输出截止到目前为止,下一个最可能的词。例如,当我们依次输入: ...
  • 网络应用(network application)是计算机网络之所以存在的理由。要是我们设想不出任何有用的网络应用,那就没有必要设计支持它们的网络协议了。不过,过去30年内已有不少人设计出大量精妙的网络应用。这些应用既包括...
  • Java高级编程9-姜国海 网络应用编程

    万次阅读 2018-07-12 10:40:43
    Socket(InetAddress address, int port, InetAddress localAddr, int localPort) Creates a socket and connects it to the specified remote address on the specified remote port. 客户端 ...
  • 网络应用层架构一般分为两层架构、三层架构、N层架构。其中B/S架构、C/S架构是两层架构的代表。 一、C/S架构 C/S架构是Client/Server的缩写,翻译过来就是“客户端/服务器”。 C/S架构的业务逻辑主要集中在客户端...
  • 如此,网络中就有一个输入节点,一个输出节点,18个隐含节点 % curve_filt_hand_buid.m %% 清理 clear all close all clc %% % 输入 x=-9:8; % 期望输出; y=[129,-32,-118,-138,-125,-97,-55,-23,-4,..
  • 计算机网络应用层 之 P2P

    千次阅读 2013-11-24 00:08:58
    对等网络(PeertoPeer,简称P2P)也称为对等连接,是一种新的通信模式,每个参与者具有同等的能力,可以发起一个通信会话。 这个定义有点抽象,下面就来简单地解释一下。粗略地讲,应用程序可以设计成采用客户机/...
  • 计算机网络应用技术技能大赛

    千次阅读 2012-04-02 22:24:55
    《计算机网络应用》技能竞赛项目     赛题说明 一、竞赛内容分布 “计算机网络应用”竞赛共分四个部分(每部分均采用百分制),其中: 第一部分:网络环境搭建项目,占总分的比例为10%; 第二部分:网络...
  • 典型的网络应用模式大致有三类:B/S、C/S、P2P。其中B代表浏览器(Browser)、C代表客户端(Client)、S代表服务器(Server),P2P是对等模式,不区分客户端和服务器。B/S应用模式中可以视为特殊的C/S应用模式,只是...
  • 基于TCP的网络应用程序

    千次阅读 2014-04-21 11:15:32
    最近在看网络编程方面的知识,和当是记一下
  • iOS开发网络应用的利器

    千次阅读 2013-06-13 22:06:39
    网络应用开发当中,服务器与客户端数据结构统一利器。 https://github.com/icanzilb/JSONModel 有两个需要注意的: Optional ConvertOnDemand
  • Apache MINA(网络应用程序框架)实例

    万次阅读 2017-10-07 16:42:06
    Apache MINA实例、网络应用程序框架、NIO
  • 计算机网络应用层协议分析总结

    千次阅读 2018-01-20 15:13:52
    1.1、网络应用程序体系结构 C/S结构,有一个总是打开的主机称为服务器,它服务于来自许多其他称为客户机的主机请求。客户机主机既可能有时打开,也可能总是打开。C/S结构之下,客户机之间不直接通信。服务器有固定...
  • 利用MINA构建JAVA网络应用框架

    万次阅读 2011-04-28 11:07:00
    Apache Mina Server 是一个网络通信应用框架,也就是说,它主要是对基于TCP/IP、UDP/IP 协议栈的通信框架(当然,也可以提供JAVA 对象的序列化服务、虚拟机管道通信服务等), Mina 可以帮助我们快速开发高性能、...
  • 影响网络应用程序性能的因素

    千次阅读 2005-07-20 10:40:00
    随着网络的发展,越来越多的应用程序需要依赖于网络,所以网络的性能直接影响到我们应用程序的性能。那么都有那些因素影响到网络程序的性能来?我们以Windows平台上的应用程序来分析,首先将影响因素分为两个部分:...
  • Visual InterDev是为开发网络应用程序而设计的集成可视化开发环境。集成了所有编写和配置网络应用程序所必须的工具,它甚至为Microsoft Visuall C++项目和Microsoft Visuall J++项目提供了公用的集成工作环境。为...
  • 为什么只能上QQ和百度,其它的浏览器,网址,播放器等网络应用软件使用不了。或许有的人可能会遇到,这是 我切身体会到的问题,为了解决这个问题花费了一下午的时间,竟然只是一个小小的MTU值问题引起的,不免感觉整...
  • 应用层协议: 1、远程登录协议(Telnet) 2、文件传输协议(FTP) 3、超文本传输协议(HTTP) 4、域名服务协议(DNS) 5、简单邮件传输协议(SMTP) 6、邮局协议(POP3)   其中,从网络上...

空空如也

1 2 3 4 5 ... 20
收藏数 246,763
精华内容 98,705
关键字:

网络应用