Linux网络编程基础之一--TCP --Unix学习总结之三

Linux基础之网络编程 1)进程间通信的方式有**:管道,消息队列,共享内存,信号,信号量这么集中2)特点:依赖于linux内核,基本是通过内核来实现应用层的两个进程间的通信3)缺陷:无法多机通讯1)网络编程适用去不同的pc间的通信,可以实现多机运行地址和数据地址是指:IP地址和端口号。每台PC机连网够都有一个IP地址,那么每台联网的PC机可能跑多个服务器,然后每个服务器中对应的有很多进程。当客户端接入的时候,不知道去对接哪个服务器。那么这时端口号对应的就是每个服务器的端口。客户就可以通过端口号连接到对应的服务器了。 阅读详情

Linux网络编程基础之一--TCP

    流socket和数据报socket

    流socket传送数据就跟电话网中传送声音一样,客户先建立连接,然后使用该连接进行单向、双向或类似管道的字节流传送。
    数据报通讯则与从一个邮箱到另一个邮箱发送包裹类似。客户不必建立连接,只要向特定的地址发送消息,而服务器进程在该地址接收信息。
    流socket使用TCP,数据报socket使用UDP。
    数据报与邮件网络系统类似,包括3个主要部分:目的地址、返回地址和消息。
    数据报socket可以被理解成一个内部有数据的盒子,发送者给出目的socket地址。网络将数据从发送者发送到目的socket。接收进程从该socket中读取数据。程序使用sendto函数发送数据和recvfrom函数来读取数据。

   下面介绍几个Linux网络编程的初等网络函数(TCP)-- 流socket

   Linux系统是通过提供套接字(socket)来进行网络编程的.网络程序通过socket和其它几个函数的调用,会返回一个 通讯的文件描述符,我们可以将这个描述符看成普通的文件的描述符来操作,这就是linux的设备无关性的好处.
   我们可以通过向描述符读写操作实现网络之间的数据交流.
(一)socket
 
  int socket(int domain, int type,int protocol)

  domain:说明我们网络程序所在的主机采用的通讯协族(AF_UNIX和AF_INET等).
        AF_UNIX只能够用于单一的Unix 系统进程间通信,
        而AF_INET是针对Internet的,因而可以允许在远程
        主机之间通信(当我们 man socket时发现 domain可选项是 PF_*而不是AF_*,因为glibc是posix的实现所以用PF代替了AF,
        不过我们都可以使用的).

  type:我们网络程序所采用的通讯协议(SOCK_STREAM,SOCK_DGRAM等)
        SOCK_STREAM表明我们用的是TCP 协议,这样会提供按顺序的,可靠,双向,面向连接的比特流.
        SOCK_DGRAM 表明我们用的是UDP协议,这样只会提供定长的,不可靠,无连接的通信.

  protocol:由于我们指定了type,所以这个地方我们一般只要用0来代替就可以了。 socket为网络通讯做基本的准备.
  成功时返回文件描述符,失败时返回-1,看errno可知道出错的详细情况.


(二)bind
  int bind(int sockfd, struct sockaddr *my_addr, int addrlen)

  sockfd:是由socket调用返回的文件描述符.

  addrlen:是sockaddr结构的长度.

  my_addr:是一个指向sockaddr的指针. 在中有 sockaddr的定义

        struct sockaddr{
                unisgned short  as_family;
                char            sa_data[14];
        };

  不过由于系统的兼容性,我们一般不用这个头文件,而使用另外一个结构(struct sockaddr_in) 来代替.在中有sockaddr_in的定义
        struct sockaddr_in{
                unsigned short          sin_family;    
                unsigned short int      sin_port;
                struct in_addr          sin_addr;
                unsigned char           sin_zero[8];
        }
  我们主要使用Internet所以
        sin_family一般为AF_INET,
        sin_addr设置为INADDR_ANY表示可以和任何的主机通信,
        sin_port是我们要监听的端口号.sin_zero[8]是用来填充的.
  bind将本地的端口同socket返回的文件描述符捆绑在一起.成功是返回0,失败的情况和socket一样

(三)listen
  int listen(int sockfd,int backlog)

  sockfd:是bind后的文件描述符.

  backlog:设置请求排队的最大长度.当有多个客户端程序和服务端相连时, 使用这个表示可以介绍的排队长度.
  listen函数将bind的文件描述符变为监听套接字.返回的情况和bind一样.


(四)accept
  int accept(int sockfd, struct sockaddr *addr,int *addrlen)

  sockfd:是listen后的文件描述符.

  addr,addrlen是用来给客户端的程序填写的,服务器端只要传递指针就可以了. bind,listen和accept是服务器端用的函数,
  accept调用时,服务器端的程序会一直阻塞到有一个 客户程序发出了连接. accept成功时返回最后的服务器端的文件描述符,
  这个时候服务器端可以向该描述符写信息了. 失败时返回-1

(五)connect
   int connect(int sockfd, struct sockaddr * serv_addr,int addrlen)

   sockfd:socket返回的文件描述符.

   serv_addr:储存了服务器端的连接信息.其中sin_add是服务端的地址

   addrlen:serv_addr的长度

   connect函数是客户端用来同服务端连接的.成功时返回0,sockfd是同服务端通讯的文件描述符 失败时返回-1.

下面是一个简单的客户机和服务器的时间服务器例子(选自Understanding Unix/Linux Programming):

服务器:
/*
timeserv.c -- a socket-based time of day server
*/
#include<stdio.h>
#include<unistd.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<netdb.h>
#include<time.h>
#include<strings.h>

#define PORTNUM 13000
#define HOSTLEN 256
#define oops(msg) {perror(msg);exit(1);}

int main()
{
 struct sockaddr_in saddr;
 struct hostent *hp;
 char hostname[HOSTLEN];
 int sock_id,sock_fd;
 FILE *sock_fp;
 char *ctime();
 time_t thetime;

 /*step1 : ask kernel for a socket*/
 sock_id=socket(PF_INET,SOCK_STREAM,0);
 if(sock_id==-1)
  oops("socket");
 /*step2 : bind address to socket.Address is host,port*/
 bzero((void*)&saddr,sizeof(saddr));
 gethostname(hostname,HOSTLEN);
 hp=gethostbyname(hostname);

 bcopy((void*)hp->h_addr,(void*)&saddr.sin_addr,hp->h_length);
 saddr.sin_port=htons(PORTNUM);
 saddr.sin_family=AF_INET;
 if(bind(sock_id,(struct sockaddr *)&saddr,sizeof(saddr))!=0)
  oops("bind");

 /*step3 : allow incoming calls with Qsize=1 on socket*/
 if(listen(sock_id,1)!=0)
  oops("listen");

 /*main loop : accept(),write(),close()*/

 while(1)
 {
  sock_fd=accept(sock_id,NULL,NULL);
  printf("wow ! got a call !/n");
  if(sock_fd==-1)
   oops("accept");
  sock_fp=fdopen(sock_fd,"w");
  if(sock_fp==NULL)
   oops("fdopen");
  thetime=time(NULL);
  fprintf(sock_fp,"The time here is ..");
  fprintf(sock_fp,"%s",ctime(&thetime));
  fclose(sock_fp);
 }
}
客户端:
/*  05.12.31
 *  timeclnt.c -- a client for timeserv.c
 *                usage : timeclnt hostname protnumber
 */
 
 #include<stdio.h>
 #include<sys/types.h>
 #include<sys/socket.h>
 #include<netinet/in.h>
 #include<netdb.h>
 
// #define BUFSIZ 256  //Alreday define in head file
 #define oops(msg) {perror(msg);exit(1);}
 
 main(int ac,char *av[])
 {
    struct sockaddr_in servadd;
    struct hostent *hp;
    int sock_id,sock_fd;
    char message[BUFSIZ];
    int messlen;
   
    /*
     * Step 1: Get a socket
     */
     sock_id=socket(AF_INET,SOCK_STREAM,0);
     if(sock_id==-1)
        oops("socket");
     /*
      * Step 2: Connect to server
      *         need to build address(host,port) of server first
      */
      bzero(&servadd,sizeof(servadd));
      hp=gethostbyname(av[1]);
      if(hp==NULL)
        oops(av[1]);
      bcopy(hp->h_addr,(struct sockaddr*)&servadd.sin_addr,hp->h_length);
      servadd.sin_port=htons(atoi(av[2]));
      servadd.sin_family=AF_INET;
      if(connect(sock_id,(struct sockaddr *)&servadd,sizeof(servadd))!=0)
        oops("Connect !");
      /*
       * Step 3: Transfer data from server,then hangup
       */
       messlen=read(sock_id,message,BUFSIZ);
       if(messlen==-1)
        oops("read");
       if(write(1,message,messlen)!=messlen)
        oops("write");
       close(sock_id);
}
 
Makefile如下:
all:timeserv.exe timeclnt.exe
timeserv.exe:
 gcc timeserv.c -o timeserv.exe
timeclnt.exe:
 gcc timeclnt.c -o timeclnt.exe
运行结果:
$./timeserv&
$./timeclnt ComputerName 13000
wow ! got a call !
The time here is ..Tue Apr  4 16:38:50 2006
总的来说网络程序是由两个部分组成的--客户端和服务器端.它们的建立步骤一般是:

服务器端
socket-->bind-->listen-->accept

客户端
socket-->connect

掌握socket网络编程需要学习哪些基础知识 文章目录Linux网络编程篇之Socket 编程预备知识一. 客户机/服务器模型二. Socket套接字概念三. 套接字编程基础1. socket2. bind3. listen4. accept5. connect6. 网络字节顺序 Linux网络编程篇之Socket 编程预备知识 Linux系统的一大特点是它的网络编程能力十分强大, 学习它, 让我们真正体会网络的魅力! 一. 客户机/服务... 阅读详情

相关推荐

Linux 多进程通信开发(八): unix domain socket 之 TCP 通信

这会是一系列文章,讲解的内容也很简单,文章的目的是让自己的知识固话和文档化,以备自己不时的复习,同时也希望能够给予初学者一些帮助。 前面的文章一系列文章有介绍了 linux 下常见的 IPC 机制,如管道、消息队列、信号量、共享内存。 之前有讲到共享内存是最高效的 IPC 方式,但是在 linux 环境下,应用最广泛的可能是 Socket。 什么是 Unix Domain Socket ? S...

frank 的专栏 5670

调用接口时不时出现 Error: socket hang up

调用接口时不时出现 Error: socket hang up

fang0604631023的博客 1万+

【R语言-生存分析之观察生存率计算】

全人群肿瘤登记资料常用的统计分析指标包括发病率、死亡率、现患率以及生存率等,其中肿瘤生存率是评估肿瘤治疗效果和肿瘤负担的必要指标,其计算涉及肿瘤患者的发病、 死亡和随访三个方面的资料, 数据整理和计算过程均较为复杂, 如何及时、 准确地计算肿瘤生存率, 并使其可以在不同地区、 不同人群、不同时期间被客观公正地比较和评价,仍然是统计学家们一直在研究的主题。

weixin_46579654的博客 5440

AF_UNIX 地址系列

AF_UNIX 地址系列(使用 AF_UNIX 或 AF_UNIX_CCSID 地址系列的套接字)可以是面向连接的(类型 SOCK_STREAM),也可以是无连接的(类型 SOCK_DGRAM)。两种类型都很可靠,原因是没有连接两个进程的外部通信函数。 UNIX 域数据报套接字的运行方式与 UDP 数据报套接字有所不同。借助 UDP 数据报套接字,客户机程序就不必调用 bind() 函数

changli_90的专栏 853

深信服aCloud虚拟存储VS3.0实战:从数据分片到仲裁机制的全流程解析

本文深度解析了深信服aCloud虚拟存储VS3.0的核心架构与生产级实践。从数据分片、条带化写入、多副本机制到智能缓存分层,详细阐述了其如何实现高性能与高可靠性的平衡。同时,深入剖析了动态均衡、平滑扩容以及故障恢复与仲裁机制,为运维人员和技术决策者提供了在超融合基础架构(HCI)中部署和管理虚拟存储的实战指南。

net55的博客 588

【系统架构设计师-2024下半年真题】案例分析-参考答案及部分详解(完整回忆版)

根据h中描述,为了保证高可靠性,有ping/echo,心跳机制两种策略,从资源利用率问为啥心跳更好。王工觉得使用ping/echo好,但李工觉得从系统资源利用率来说,使用心跳机制好 1、针对质量属性可以使用ping/echo和心跳模式实现,分别简述ping/echo和心跳的实现原理。 2、张工认为心跳策略比较适合,简述为什么?

数据知道的博客 1万+

Linux上实现基于TCP和Unix domain Socket的本地IPC通信模型

功能:Linux上实现基于TCP和Unix domain Socket的本地IPC通信模型。类似安卓下的binder通信模式,可以自由定制service服务。 概念: server (服务器); service(服务); client(客户); 结构:采用CSS(client-server-service)模式,一个server负责管理client和service服务。可以在server上注册...

fanchenxinok的专栏 1696

AgentScope 实战训练营-构建元规划智能体(Meta Planner Agent)—— 从 0 到 1 完整实现

本文介绍了基于AgentScope框架开发的元规划智能体(Meta Planner Agent)系统。该系统通过任务拆解和子代理编排机制,实现复杂任务的自动化处理。核心架构分为用户层、规划器层和子代理层,其中规划器作为"项目经理"负责任务分解、创建子代理并协调执行流程。关键技术包括AgentScope多智能体框架、DashScope大语言模型、PlanNotebook计划管理工具等。

program哲学 359

Socket中的read方法阻塞问题

欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦: Markdown和扩展Markdown简洁的语法 代码块高亮 图片链接和图片上传 LaTex数学公式 UML序列图和流程图 离线写博客 导入导出Markdown文件 丰富的快捷键 快捷键 加粗 Ctrl + B 斜体 Ctrl + I 引用 Ctrl

Calvin's Blog 8918

【同等学力】01-逻辑符号表达

F(x): x是确诊者,G(x):x有症状F(x): x是老人,G(x):x是宠物,L(x,y): x喜欢y。

super_mochi1 1880

2026年医疗AI的可信革命全栈实现(上)

医疗AI可信化:贝叶斯网络与向量数据库的协同架构 本文探讨2026年医疗AI发展的关键转折点——从追求生成能力转向构建可信决策系统。核心观点认为,医疗AI下一阶段的竞争焦点在于不确定性量化和错误传播约束,而非单纯的问答流畅度。研究提出以Python为开发语言、结合向量数据库与贝叶斯网络的混合架构: 技术分层 语言层(LLM):处理自然语言交互与工具调用 证据层(Milvus/Qdrant):实现可审计的临床知识检索 概率层(pgmpy/PyMC):执行贝叶斯推理与风险路由 治理层:确保权限控制与人工复核机制

AllenLV的博客 1151

UNIX网络编程学习日志之(一)

        已经退伍了,脱掉绿色军装,说的悲壮一点,这叫解甲归田。这种生活是多少个军人日夜梦想的结果啊。从军保卫国家,捍卫和平。和平来了。于是军人可以回家享受生活。平淡的生活就够了。一直很忙,忙的没时间学习,早就想看看梦寐以求的几本书。 第一本就是UNIX网络编程。如果说计算机网络编程是本科时期网络方向的好教材。那么安德鲁·斯蒂文思的UNIX网络编程就是网络方向的圣经。 好像看完他老人

ITSM/ITIL/网络安全/IT运维 1319

YOLOv10改进目录一览 | 涉及卷积层、轻量化、注意力、损失函数、Backbone、SPPF、Neck、检测头等全方位改进

如何寻找创新点?为什么要使用这个模块?如何才能提升模型的精度?这是贯穿我们研究始终的问题。创新点在这个专栏中我已经整理好了,这已经省去了大部分时间,但是当我们使用这些新的模块去优化已有的模型,如何才能提升模型的精度,才是我们要达到的最终目标。当然我们可以使用传统的A+B+C的方法去堆积模块,然后是进行大量的实验去排列组合以实现最终的精度提升,这无可厚非。

Limiiiing的博客 1万+

C++教程网之Linux网络编程视频 Unix网络编程视频

教程非常不错,价值280元,绝对是干货 Linux网络编程(总共41集) 讲解Linux网络编程知识,分以下四个篇章。 Linux网络编程之TCP/IP基础篇 Linux网络编程之socket编程篇 Linux网络编程之进程间通信篇 Linux网络编程之线程篇 Linux网络编程之TCP/IP基础篇 01TCPIP基础(一) ISO/OSI参考模型 TCP/IP四层模型 基本概念(对等通信、封装、分用、端口) 02TCPIP基础(二) 最大传输单元(MTU)/路径MTU 以太网帧格式 ICMP ARP RA

m0_67401761的博客 148

数字电路逻辑与设计实验一 门电路逻辑功能及测试

(1)选二输入四异或门电路 74LS86,按图 1-8 接线,输入端 1、2、4、5 接逻辑开 关(S1~S4),输出端 A、B、Y 接电平显示发光二极管.用六反相器(非门)按图 1-11 接线,输入 80KHz 连续脉冲,用双踪示波器测输入, 输出相位差,计算每个门的平均传输延迟时间的 tpd 值。测试不同的输入组合:对门电路进行全面的测试,尝试不同的输入组合,包括各种可能的逻辑状态。检查门电路的输入:确认门电路的输入是否正确,并且输入信号的电平符合门电路的规格要求。确保输入信号的稳定性和准确性。

欢迎交流学习心得 2万+

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

【总结】【Unix网络编程】前言及基础知识

序言及基本知识刚刚买到《Unix网络编程》的时候,舍友们都被它的厚度吓到了,都说读这种又厚又专业的书简直煎熬,何况咱们还不是计算机专业的!但俗话说得好——大力粗奇迹嘛(脑补语气),干脆大力的去读肯定有收获!于是两个星期过去了进度过三成了。这本书好,真好,虽然厚但是易读易懂就是好。秉着做笔记的态度写日记的文笔,我将逐步将看过的内容进行分析总结,也希望这一系列文章能够解除一些读者对网络对编程的恐惧,更加

甭管多不多反正写了! 2014

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Linux 网络编程基础:构建你的第一个 TCP 服务器

在现代互联网应用中,网络编程是不可或缺的一部分。Linux作为强大的服务器平台,提供了丰富的网络编程接口,帮助开发者构建高效、可靠的网络应用。本文将带你走进 Linux 网络编程的世界,从最基础的 IO 概念入手,逐步学习 Socket 函数的使用,并通过构建一个简单的 TCP 服务器,让你体验网络编程的魅力。我们将深入探讨阻塞和非阻塞 IO 的区别,并解析如何利用这些知识构建出稳定的网络程序。准备好迎接挑战,开启你的 Linux 网络编程之旅吧!

Lion_Long的博客 1433

深度学习工具包 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")

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

一、Linux和Windows以及QT下的网络编程的TCP

一、Linux和Windows网络编程的思想 在 UNIX/Linux 系统中,为了统一对各种硬件的操作,简化接口,不同的硬件设备也都被看成一个文件。UNIX/Linux思想中的一切都是文件!UNIX/Linux 会给每个文件分配一个整数类型ID,这个ID被称为文件描述符(File Descriptor)。UNIX/Li...

Y0.0Y的博客 2029

Linux-网络编程学习笔记之tcp

Linux-网络编程学习笔记之tcp目录-网络编程学习笔记之tcp 目录 前言  预备知识  网络字节序 2 ip 地址转换函数 3 sockaddr 数据结构 Markdown及扩展 表格 定义列表 代码块 脚注 目录 数学公式 UML 图 离线写博客 浏览器兼容前言最近一段时间从网易游戏辞职在家,由于工作技术内容不match,并且诸事不顺,便辞职在家,有大段时间来研究一下linux下面的东西,之

逐梦科学 1262

Linux学习路线及网络编程经典书籍(转载)

linux学习资源整理:https://zhuanlan.zhihu.com/p/22654634 Linux初学者(学习资料):https://zhuanlan.zhihu.com/p/21723250 知乎 - 你是如何学习 Linux 编程的?:https://www.zhihu.com/question/20730157 如果让你推荐一本 Linux 书籍,你会推荐什么?:https://www.zhihu.com/question/20341603/answer/246718241 Linux+开

shuux666的博客 2313

Linux学习路线及网络编程经典书籍

linux学习资源整理:https://zhuanlan.zhihu.com/p/22654634 Linux初学者(学习资料):https://zhuanlan.zhihu.com/p/21723250 知乎 - 你是如何学习 Linux 编程的?:https://www.zhihu.com/question/20730157 如果让你推荐一本 Linux 书籍,你会推荐什么?:https...

freeking101的博客 2万+

柳大的Linux讲义·基础篇(4)网络编程基础

柳大的Linux游记·基础篇(4)网络编程基础Author: 柳大·PoechantBlog: Blog.youkuaiyun.com/PoechantEmail:zhongchao.usytc#gmail.com (#->@)Date:March 11th, 2012Copyright © 柳大·Poechant(钟超·Michael)回顾《柳大的Linux游记·基础篇(1)磁盘与文件系统》《柳大的Linu

麦克船长的技术笔记 6726

TCP IP网络编程

此结构体成员sa_data保存的地址信息中需包含IP地址和端口号,剩余部分应填充0,这也是bind函数要求的。实际编程中若要调用inet_addr函数,需将转换后的IP地址信息代入sockaddr_in结构体中声明的in_addr结构体变量。每次创建服务器端套接字都要输入IP地址会有些繁琐,所以采用常数INADDR_ANY分配服务器端的IP地址,可自动获取运行服务器端的计算机IP地址,不必亲自输入。大端序,这就叫做网络字节序。特点:可靠的,按序传递的,基于字节的面向连接的数据传输方式的套接字。

ccb1372098的博客 1832

Linux网络编程基础

Linux网络编程基础

weixin_57286892的博客 1320
上一篇: Makefile基础 -- Unix学习总结之二
下一篇: Linux网络编程基础之二--UDP --Unix学习总结之四
mayo
博客等级 码龄23年 5粉丝 7原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值