让你轻松了解什么是HTTP协议,什么是URI

实现CGI版本的HTTP服务器 通用的HTTP服务器框架,基于TCP,socket api;按照HTTP协议的格式要求,对收到的数据进行解析,生成响应数据。和具体业务无关,基于这样一个通用的服务器框架进行二次开发。 流程: 1、读取并解析请求(标准的HTTP协议的请求) HTTP请求是一个纯文本的协议,按照行分割。行文本的数据构成的整体的请求。a、首行用空格分割为“方法 url 版本号”。初始化... 阅读详情
1.Http简介

HTTP是一种无状态、由文本构成的请求-响应(request-response)协议,这种协议使用的是客户端-服务器(client-server)计算模型。
请求-响应是两台计算机进行通信的基本方式,其中一台计算机会向另一台计算机发送请求,而接收到请求的计算机则会对请求进行响应。在客户端-服务端计算模型中,发送请求的一方(客户端)负责向返回响应的一方(服务器)发起会话,而服务端则负责为客户提供服务。在HTTP协议中,客户端也被称为用户代理(user-agent),而服务器则通常会被称为Web服务器。
HTTP是以纯文本方式而不是二进制方式发送和接收协议数据的。

2. CGI

CGI(Common Gateway Interface)通用网关接口。简单理解,可以认为CGI是Web服务器和一个独立的进程之间的协议,它会把HTTP请求Request的Header头设置成进程的环境变量,HTTP请求的Body正文设置成进程的标准输入,进程的标准输出设置为HTTP响应Response,包含Header头和Body正文。

3. HTTP请求

HTTP是一种请求-响应协议,协议涉及的所有事情都以一个请求开始。HTTP请求跟其他所有HTTP保温(message)一样,都由一系列文本行组成,这些文本行会按照以下顺序进行排列:
(1)请求行(request-line);
(2)零个或任意多个请求首部(header);
(3)一个空行;
(4)可选的报文主体(body)。
如下图:
在这里插入图片描述
请求行的第一个单词为请求方法,之后跟着的是统一资源标识符(Uniform Resource Identifier, URI)以及所使用的HTTP版本。位于请求行之后的两个文本行为请求的首部。

3.1 请求方法

请求方法是请求行中的第一个单词,他指明了客户端想要对资源执行的操作。HTTP0.9只有GET一个方法,HTTP1.0添加了POST方法和HEAD方法,而HTTP1.1则添加了PUT、DELETE、OPTIONS、TRACE和CONNECT这五个方法,并允许开发者自行添加更多方法。
各个HTTP方法的作用说明如下:

  • GET 命令服务器返回指定的资源
  • HEAD 与GET方法的作用类似,唯一的不同在于这个方法不要求服务器返回报文的主体。这个方法通常用于在不获取报文主体的情况下,取得响应的首部。
  • POST 命令服务器将报文主体中的数据传递给URI指定的资源,至于服务器具体会对这些数据执行什么动作则取决于服务器本身。
  • PUT 命令服务器将报文主题中的数据设置为URI指定的资源。如果URI指定的位置上已经有数据存在,那么使用报文主体中的数据去代替已有的数据。如果资源尚未存在,那么URI指定的位置上新创建一个资源。
  • DELETE 命令服务器删除URI指定的资源
  • TRACE 命令服务器返回请求本身。通过这个方法,客户端可以知道介于他和服务器之间的其他服务器是如何处理请求的。
  • OPTIONS 命令服务器返回它支持的HTTP方法列表。
  • CONNECT 命令服务器与客户端建立一个网络连接。这个方法通常用于设置SSL隧道以开启HTTPS功能。
  • PATCH 命令服务器使用报文主体中的数据对URI指定的资源进行修改。
3.2 安全的请求方法

如果一个HTTP方法只要求服务器提供信息而不会对服务器的状态做任何修改,那么这个方法就是安全的(safe)。GET、HEAD、OPTIONS和TRACE都不会对服务器的状态进行修改,所以他们都是安全的方法。

3.3 幂等的请求方法

如果一个HTTP方法在使用相同的数据进行第二次调用的时候,不会对服务器的状态造成任何改变,那么设个方法就是幂等的。根据安全的方法的定义,因为多有安全的方法都不会修改服务器状态,所以他们天生就是幂等的。

PUT和DELETE虽然不安全,但却是幂等的,因为他们在进行第二次调用的时候都不会改变服务器的状态:因为服务器在执行第一个PUT请求之后URI指定的资源已经更新或者创建出来了,所以针对同一个资源的第二次PUT请求只会执行服务器已经执行过的动作;与此类似,虽然服务器对于同一个资源的第二次PUT请求只会执行服务器已经执行过的动作;与此类似,虽然服务器对于同一个资源的第二次DELETE请求肯能会返回一个错误,但这个请求并不会改变服务器的状态。

3.4 浏览器对请求方法的支持

GET方法是最基本的HTTP方法,它负责从服务器上获取内容,所有浏览器都支持这个方法。POST方法从HTML2.0开始可以通过添加HTML表单来实现:HTML的form标签有一个名为method的属性,用户通过将这个属性的值设置为get或者post来指定要使用那个方法。HTML不支持除GET和POST之外的其他HTTP方法。

但是,现在流行的浏览器通常都不会只支持HTML一种数据格式——用户可以使用XMLHttpRequest(XHR)来或得对PUT方法和DELETE方法的支持。XHR是一系列浏览器API,这些API通常由JavaScript包裹(实际上XHR就是一个名为XMLHttpRequest的浏览器对象)。XML允许程序员向服务器发送HTTP请求,并且跟“XMLHttpRequest”这个名字所暗示的不一样,这项技术并不仅仅局限于XML格式——包括JSON以及纯文本在内的任何格式的请求和响应都可以通过XHR发送。

3.5 请求首部

HTTP请求方法定义了发送请求的客户端想要执行的动作,而HTTP请求的首部则记录了与请求本身及客户端有关的信息。请求的首部由热议多个冒号隔开的纯文本键值对组成,最后以回车(CR)和换行(LF)结尾。
常见的请求首部:

首部字段作用描述
Accept客户端在HTTP响应中能够接收的内容类型。比如说,客户端可以通过Accept:text/html这个首部,告知服务器自己希望在响应的主体中收到HTML类型的内容
Accept-Charset客户端要求服务器使用的字符集编码。比如客户端可以通过Accept-Charset:uft-8这个首部,告知服务器自己希望响应的主体使用UTF-8字符集。
Authorization这个首部用于向服务器发送基本的身份验证证书
Cookie客户端应该在这个首部中把服务器之前设置的所有cookie回传给服务器。比如说,如果服务器之前在浏览器上设置了3个cookie,那么Cookie首部字段将在一个字符串里面包含这三个cookie,并使用分号对这些cookie进行分割。以下是一个Cookie首部示例:Cookie: my_first_cookie=hello; my_second_cookie=world
Content-Length请求主体的字节长度
Content-Type当请求包含主体的时候,这个首部用于记录主体内容的类型。在发送POST或PUT请求时,内容的类型默认为x-www-form-urlen-coded,但是在上传文件时,内容的类型应该设置为multipart/form-data(上传文件这一操作可以通过将input标签的类型设置为file来实现)
Host服务器的名字以及端口号。如果这个首部没有记录服务器的端口号,就表示服务器使用的是80端口。
Referrer发送请求的页面所在的地址
User-Agent对发起的客户端进行描述
4. HTTP响应

HTTP响应报文是对HTTP请求报文的回复。跟HTTP请求一样,HTTP响应也由一系列文本行组成,其中包括:

  • 一个状态行;
  • 零个或任意数量的响应首部,
  • 一个空行;
  • 一个可选的报文主体。
    如下图:
    在这里插入图片描述
    HTTP响应的第一行为状态行,这个文本行包括了状态码( status code )和相应的原因短语( reason phrase ),原因短语对状态码进行了简单的描述。除此之外,这个例子中的HTTP响应还包含了一个HTML格式的报文主体。
4.1 响应状态码:

HTTP响应状态码总共有5种类型,他么分别以不同的数字作为前缀,如下表:

状态码类型作用描述
1XX情报状态码。服务器通过这些状态码来告知客户端,自己已经接收到了客户端发送的请求,并且已经对请求进行了处理。
2XX成功状态码。这些状态码说明服务器已经接收到了客户端发送的请求,并且已经成功的对请求进行了处理。这类状态码的标准响应为“200 OK”
3XX重定向状态码。这些状态码表示服务器已经接收到了客户端发送的请求,并且已经处理了请求,但是为了完成指定的动作,客户端还需要在做一切其他的 工作。这类状态码大多用于实现URL重定向。
4XX客户端错误状态码。这类状态码说明客户端发送的请求出现了某些问题。在这一类型的状态码种,最常见的就是“404 Not Found”,这个状态码表示服务器无法从请求的URL中找到客户端想要的资源。
5XX服务器错误状态码。当服务器因为某些原因而无法正确的处理请求时,服务器就会使用这类状态码来通知客户端。这一类状态码中,最常见的就是”500 Internal Server Error“状态码。
4.2 响应首部

响应首部跟请求首部一样,都是由冒号分隔的纯文本键值对组成,并且同样以(CR)和换行符(LF)结尾。下表为常见的响应首部:

首部字段作用描述
Allow告知客户端,服务器支持那些请求方法
Content-Length响应主体的字节长度
Content-Type如果响应包含可选的主体,那么这个首部记录的就是主体内容的类型
Date以格林尼治标准时间(GMT)格式记录的当前事件
Location这个首部仅在重定向时使用,他会告知客户端接下来应该向那个URL发送请求
Server返回响应的服务器的域名
Set-Cookie在客户端里面设置一个Cookie。这个相应里面可以包含多个Set-Cookie的首部。
W-W-W-Authenticate服务器通过这个首部告知客户端,在Authorization请求首部中应该提供哪些类型的身份验证信息。服务器常常会把这个首部与“401 Unauthorized”状态行一同发送。除此之外,这个首部还会向服务器许可的认证授权模式(schema)提供验证信息
5.URI

URI(Uniform Resource Location, 统一资源定位符)是一个涵盖性术语,它包含了URN(Uniform Resource Name, 统一资源名称)和URL,并且这两者也拥有相似的语法和格式。

URI的一般格式为:<方案名称>:<分层部分>[ ? <查询参数> ][ # <片段> ]

URI中的方案名称(scheme name)记录了URI正在使用的方案,它定义了URI其余部分的结构。因为URI是一种非常常用的资源标识方式,所以它拥有大量的方案可供使用。

URI的分层部分(hierarchical part)包含了资源的识别信息,这些信息会以分层的方式进行组织。如果分层部分以双斜线(//)开头,那么说明它包含了可选的用户信息,这些信息将以@符号结尾,后跟分层路径。不带用户信息的分层部分就是一份单纯的路径,每个路径都由一连串的分段(segment)组成,各个分段之间使用但斜杠(/)分隔。

在URI的各个部分当中,只有“方案名称”和“分层部分”是必须的。以问好(?)为前缀的查询参数(query)是可选的,这些参数用于包含无法使用分层方式表示的其他信息。多个查询参数会被组织成一连串的键值对,各个键值对之间只用&符号分割。

URI的零一个可选部分为片段(fragment),片段使用井号(#)作为前缀,它可以对URI定义的资源中的次级资源(secondary resource)进行标识。当URI包含查询参数时,URI的片段将被放到查询参数之后。因为URI的片段是由客户端负责处理的,所以Web浏览器在将URI发送给服务器之前,一般都会先把URI中的片段移除掉。如果程序员想要取得URI片段,那么可以通过JavaScript或者某个HTTP客户端库,将URI片段包含在一个GET请求里面。

【C++】搭建HTTP服务器 http服务器实现 阅读详情

相关推荐

Java编程:浅析 httpRequest 中的参数requestURL、requestURI、servletPath、contextPath、serverName、serverPort等

本篇文章主要介绍下 httpRequest 中的参数的含义与区别。 以 http://localhost:8080/sns/test/get 路径为例进行分析,其中 sns 为应用名称,/test/get 为请求的 controller 路径。springboot 中配置如下: server.port=8080 server.context-path=/sns 1.请求路径参数 仔细考虑了下,...

天将降大任于是人 7885

【项目实战】自主实现 HTTP 项目(六)——CGI机制

我们在之前的篇目中讲到了,在我们客户端向服务器发送请求的时候,如果发送的内容是一个目录或者一个普通文件,我们给他们返回的是一个静态的网页。而接下来我们就讲解另一种情况,如果请求资源路径下面是一个可执行文件,那么这个时候就要我们使用(CGI)机制。

2021级大一程序白一枚,记录学习的每一步的脚印 2189

【Nginx学习】3招搞定:Nginx如何编写HTTP模块,处理用户请求,轻松获取URI和参数

通过本文的详细介绍,相信你对Nginx模块开发有了更深刻的理解。编写自定义模块不仅可以扩展Nginx的功能,还能让你在技术上更进一步。如果你有任何疑问或需要进一步的帮助,欢迎随时留言交流!希望这些知识能成为你Nginx模块开发之旅的得力助手,祝你一路顺风!

java专栏 903

HTTP和CGI普及

HTTP和CGI普及 一. HTTP HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展。目前在WWW中使用的是HTTP/1.0的第六版,HTTP/1.1的规范化工作正在进行之中,而且HTTP-NG(Next Generation of HTTP)的建议已经提出。 HTTP协

chenglinhust的专栏 6622

HTTP协议深度解析与RESTful API设计

本文深入解析HTTP协议与RESTful API设计,主要内容包括:1) HTTP协议概述,介绍其发展历程和请求响应模型;2) 详细解析HTTP请求/响应结构、方法、状态码和头部字段;3) REST架构风格的六大约束条件和核心概念;4) RESTful API设计最佳实践,涵盖URI设计规范、HTTP方法使用、响应格式、版本管理和分页策略。文章通过代码示例和图表展示了HTTP协议和RESTful API的关键技术要点,为开发者提供全面的API设计指南。

闲人编程的博客 876

URI-fasp:掌握Perl环境下的Aspera FASP协议

在互联网信息快速发展的今天,数据传输技术始终是关注的焦点。传统的TCP/IP协议虽然稳定,但其传输速度无法满足日益增长的高容量数据传输需求。为了解决这一问题,IBM推出了FASP(Fast And Secure Protocol)协议。FASP旨在通过网络提供高速且安全的大容量数据传输服务,特别是在长距离和高延迟网络环境下,FASP表现出了显著的性能优势。FASP协议的核心特点包括流控制、拥塞控制、安全性控制等,它通过优化底层传输机制来显著提高数据传输效率。

weixin_35728286的博客 1054

HTTP 协议详解

本文介绍了HTTP协议的基础知识,包括其无连接、无状态特性以及URI/URL编码规则。重点分析了HTTP请求/响应格式,详细讲解了GET/POST方法的应用场景和区别,并列举了常见的HTTP状态码和Header字段。文章通过代码示例展示了HTTP服务器的实现原理,包括静态资源处理、动态交互、Cookie/Session管理等核心功能。最后梳理了HTTP各版本的技术演进,从HTTP/0.9到HTTP/3.0的性能优化路径。内容涵盖HTTP协议从基础到实践的完整知识体系,适合作为网络开发的参考指南。

Small_entreprene的博客 7978

从零构建:STM32与EC800 4G模块的工业物联网数据透传实战

本文详细介绍了如何从零构建STM32与EC800 4G模块的工业物联网数据透传系统。内容涵盖硬件选型、抗干扰电路设计、AT指令稳定性优化、网络连接管理、可靠数据透传协议以及低功耗策略,为开发者提供了一套可直接应用于工业场景的完整实战方案。

uran的专栏 1014

通过图轻松了解HTTP方法

目录: 告知服务器意图的HTTP方法 GET获取资源 POST传输实体主体 PUT传输文件 DELETE删除文件 HEAD获得报文首部 OPTIONS询问支持的方法 TRACE追踪路径 CONNECT要求用隧道协议连接代理 持久连接 管线化 告知服务器意图的HTTP方法 GET获取资源 用来请求访问已被URI识别的资源,指定的资源经服务器端解析返回响应内容。 例子如下: 请求: GET...

furfur-jiang的博客 554

【SAP】ABAP——ALV显示后选择数据操作

在ALV显示后,可全选、全不选或者选择几条数据进行发邮件、更新、下单等等操作。 在user_command中的实现方式如下: 方式一: FORM user_command USING ucomm LIKE sy-ucomm selfield TYPE slis_selfield. DATA: lr_grid TYPE REF TO cl_gui_alv_grid. DATA: lt_rows TYPE lvc_t_row WITH

Mona_1220的博客 4091

ArcGISPro小白必看:5分钟搞定3D地形图制作(附免费数据源)

本文为ArcGISPro初学者提供5步制作专业3D地形图的完整指南,涵盖免费数据获取、项目初始化、数据预处理、3D场景构建和成果输出等关键步骤。特别推荐使用NASA的SRTM高程数据和吉林一号卫星影像,帮助用户快速掌握3D地形图制作技巧,适用于教学演示和科研分析。

weixin_28314575的博客 239

如何快速掌握HTTP协议?

HTTP 协议极其庞杂,它影响着浏览器、爬虫、代理服务器、防火墙、CDN、Web 容器、微服务等诸多方面,自身的规范却并不统一,所要面对的各类软件的新旧版本也同时存在于网络上。在这种情况下,如果对 HTTP 没有一个深入的理解,就很容易被各种各样的网络问题难倒。 那么,如何才能快速掌握HTTP协议呢? 在我看来,需要从以下四个方面入手: 工欲善其事,必先利其器,首先我们先要掌握好抓包及相关的...

陶辉:聚焦分布式系统的程序员 2387

Python爬虫案例:从39问医生网爬取口腔科的在线问答记录(单轮问答)

本次实验爬取39问医生网中口腔科分类下的所有在线单轮问答记录,每页32条,共100页,总数据量为3200条,最终结果以excel格式保存。

JieBao11的博客 1640

与HTTP相关的各种协议

TCP/IP协议是目前网络世界“事实上”的标准通信协议,实际上是一系列网络通信协议的统称,其中最核心的两个协议是 TCP和IP,其他的还有 UDP、ICMP、ARP 等等,共同构成了一个复杂但有层次的协议栈。这个协议栈有四层,最上层是“应用层”,最下层是“链接层”,TCP 和 IP 则在中间:TCP属于“传输层”,IP属于“网际层”。IP协议是“Internet Protocol”的缩写,主要目的是解决寻址和路由问题,以及如何在两点间传送数据包。

qq_42108074的博客 824

北斗三号PPP-B2b信号实战指南:从接收机配置到精度验证全流程

本文提供了北斗三号PPP-B2b信号从硬件配置到数据处理的全流程实战指南。详细解析了信号特性、接收机关键参数设置,并以飞纳接收机和Mass软件为例,演示了数据解算与精度验证方法。通过覆盖中国多地区的联调测试案例,验证了PPP-B2b服务可实现分米级实时定位精度,为无网络地区高精度应用提供了可靠解决方案。

nn3456的博客 551

内存越界一定会导致程序崩溃吗?详解内存越界

本文详细解释了内存越界不一定导致内存越界的问题,全面介绍了C++内存越界的相关内容。

dvlinker的技术专栏 2万+

http协议详解,get,post,put,delete,head,options,trace消息头详解

HTTP协议是Hypertext Transfer Protocol(也称为超文本传输协议)的缩写,是用于从万维网(www:world wide web)服务器传输超文本到本地浏览器的传送协议http协议工作于客户端-服务端(browser/sever)B/S架构上。浏览器作为http客户端通过url向http服务端即web服务器发送所有请求。web服务器根据接收到的请求后,向客户端发送响应信息。HTTP(超文本传输协议)经历了多个版本的发展,每个版本都在性能、功能和安全性等方面有所改进。

2202_75361164的博客 1313

LeRobot 入门教程(二)强化学习训练及 SmolVLA 模型微调

本文介绍了LeRobot框架中基于人类在环的样本高效强化学习(HIL-SERL)工作流,包含真实机器人训练和模拟环境训练两大模块。在真实机器人部分,详细说明了从配置设置、工作空间边界确定、演示数据收集、奖励分类器训练到演员-学习者架构部署的全流程,并强调了人类干预的关键作用。同时介绍了适用于模拟训练的gym_hil环境及其配置使用方法。最后,文章提供了微调SmolVLA基础模型的指南,包括数据集收集、微调步骤和模型评估方法。该工作流实现了人机协作的高效强化学习,适用于各类机器人操作任务。

2506_90492529的博客 3896

【网络编程】http协议

URL(Uniform Resource Locator,统一资源定位符)是用于指定互联网上的资源地址的一种表示方法。它提供了访问互联网资源的路径和定位方式,使得人们可以通过浏览器或其他工具轻松访问这些资源。URL的组成通常包括以下几个部分(用冒号分隔):只有协议和域名(ip地址)是必须的,其余都是可选的当提交或者获取的数据本身可能包含与url中特殊的字符冲突的字符,要求BS(Browser-Server)双方要进行编码和解码。将字符转为16进制,从右向左取4位,每两位做1为,前面加上%。

m0_73865858的博客 1293

基于FPGA的7x7矩阵求逆verilog开发

up目录一、理论基础二、核心程序三、测试结果 矩阵求逆,即求矩阵的逆矩阵。矩阵是线性代数的主要内容,很多实际问题用矩阵的思想去解既简单又快捷。逆矩阵又是矩阵理论的很重要的内容,逆矩阵的求法自然也就成为线性代数研究的主要内容之一。设A是数域上的一个n阶方阵,若在相同数域上存在另一个n阶矩B,使得: AB=BA=E。 则我们称B是A的逆矩阵,而A则被称为可逆矩阵。其中,E为单位矩阵。典型的矩阵求逆方法有:利用定义求逆矩阵、初等变换法、伴随阵法、恒等变形法等。 逆矩阵的求法有多种,其中重要

FPGA/MATLAB学习教程/源码/项目合作开发 3898

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

HTTP协议格式

HTTP 协议是用于传输超文本数据(如 HTML)的应用层协议,它建立在传输层协议 TCP/IP 之上。当我们在浏览器中输入一个 "网址" (URL) 时,浏览器就会给相应的服务器发送一个 HTTP请求,该服务器也返回一个 HTTP 响应。这个响应结果被浏览器解析之后,就展示成我们看到的页面内容. (这个过程中浏览器可能会给服务器发送多个 HTTP 请求,服务器会对应返回多个响应,这些响应里就包含了页面 HTML,CSS,JavaScript,图片,字体等信息)。

weixin_49817511的博客 1458

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

HTTP协议概述

HTTP历史 起源 蒂姆·伯纳斯·李(Tim Berners-Lee)爵士(1955年出生于英国)是万维网的发明者,互联网之父。 1989 年,欧洲核子研究组织(CERN)的蒂姆·博纳斯-李(Tim Berners-Lee)博士提出一个构想:借助多文档之间相互关联形成的超文本(HyperText),连成可参阅的 WWW(World Wide Web,万维网),以帮助远隔两地的研究者们共享知识。在这个构想中,他提出了 3 项 WWW 构建的关键技术:HTML, URI, HTTP. 互联网之父:蒂姆·伯纳斯·

HYJ1027的博客 916

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

如何快速掌握HTTP协议(高清思维导图 )

原文转自: https://mp.weixin.qq.com/s/QB9y01FfKPsLgtYyjnE41g HTTP 协议极其庞杂,它影响着浏览器、爬虫、代理服务器、防火墙、CDN、Web 容器、微服务等诸多方面,自身的规范却并不统一,所要面对的各类软件的新旧版本也同时存在于网络上。在这种情况下,如果对 HTTP 没有一个深入的理解,就很容易被各种各样的网络问题难倒。 那么,如何才...

mysteryflower的专栏 1565

轻松认识HTTP协议

关于HTTP协议,一篇就够了HTTP简介HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分...

gsc1456的博客 285

通过图轻松了解HTTP状态码

状态码是当客户端向服务器端发送请求时,描述返回的请求结果。以3位数组和原因短语组成 状态码 类别 原因短语 1XX Informational(信息性状态码) 接收的请求正在处理 2XX Success(成功状态码) 请求正常处理完毕 3XX Redirection(重定向状态码) 需要进行附加操作以完成请求 4XX Client Error(客户端错误状态码) 服务器...

furfur-jiang的博客 720

http协议的内容

记录:post通常代表新增,put通常代表修改HTTP协议在前端开发中的应用工具HTTP协议实现的过程HTTP协议的含义及格式   1.调试工具首先,前端开发的一个很重要的工具就是chrome浏览器。其实像火狐浏览器也很很好的调试工具,但我更喜欢使用chrome的。 按下F12就能调出这个管理控制台。 点击Network后就会出现所有的网络请求。 当我点击其中一个网络请求时,可以点击它的heade...

qq_36573925的博客 4050
上一篇: Go语言成长路线
下一篇: Go语言中的html/template标准库学习笔记二(template语法介绍)
random_w
博客等级 码龄9年 130粉丝 168原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值