【扩散模型】【网络结构探索】神经网络扩散:Neural Network Diffusion(论文解读)

news2024/11/18 21:34:20

项目地址:https://github.com/NUS-HPC-AI-Lab/Neural-Network-Diffusion


文章目录

  • 摘要
  • 一、前言
  • 二、Nerual Network Diffusion (神经网络扩散)
    • 2.1扩散模型(预备知识)
    • 2.2 总览
    • 2.3 参数自动编码器
    • 2.4 参数生成
  • 三、实验
    • 3.1 设置
    • 3.2 结果
    • 3.3 消融实验与分析
  • 四、P-diff只是记忆吗?
    • 4.1 问题和实验设计
    • 4.2 相似性指标
    • 4.3 预测的相似性
    • 4.4 潜在表示的比较
    • 4.5 p-diff过程的运动轨迹
    • 4.6 从记忆到生成新的参数
  • 五、相关工作
    • 1.引入库
    • 2.读入数据
  • 总结


摘要

  扩散模型在图像和视频生成方面取得了显著的成功。这项工作证明了,扩散模型也可以生成高性能的神经网络参数利用一个自动编码器和一个标准的潜在扩散模型。自动编码器提取训练后的网络参数子集的潜在表示。然后训练一个扩散模型,从随机噪声中合成这些潜在的参数表示。然后,它生成新的表示,通过自动编码器的解码器,其输出准备用作网络参数的新子集。

  在不同的架构和数据集上,我们的扩散过程始终以最小的额外成本生成与训练网络相比的性能相当或改进的模型。值得注意的是,我们根据经验发现,生成的模型与训练后的网络表现不同。


一、前言

  扩散模型的起源可以追溯到非平衡热力学。在(Sohl-Dickstein等人)中,首先利用扩散过程逐步去除输入中的噪声,并生成清晰的图像。后来的工作,如DDPM和DDIM,采用了以正向过程和反向过程为特征的训练范式,细化了扩散模型。

  当时,由扩散模型生成的图像的质量还没有达到预期的水平。Guided-Diffusion进行了消融,找到了更好的架构,这代表了将扩散模型超越基于GAN的方法的开创性努力。随后,GLIDE、Imagen、DALL·E2和SD实现了艺术家所采用的逼真图像。

  扩散模型在其他领域的潜力:本文展示了扩散模型在生成高性能模型参数方面的惊人能力,这是一项与传统的视觉生成有根本不同的任务。 参数生成的重点是创建能够在给定任务上表现良好的神经网络参数。从先验和概率建模方面进行了探索,即 随机神经网络 贝叶斯神经网络。然而,在参数生成中使用扩散模型还没有得到很好的探索。

  仔细研究神经网络训练和扩散模型,基于扩散的图像生成随机梯度下降(SGD)学习过程在以下几个方面有共同之处 (如图1,顶部为扩散过程;底部为ResNet-18在CIFAR-100训练过程中批归一化(BN)的参数分布。上半部分为BN权重,下半部分为 BN偏差。)

在这里插入图片描述

i)神经网络训练和扩散模型的反向过程都可以看作是从随机噪声/初始化到特定分布的过渡。
ii)高质量的图像和高性能的参数也可以通过多重噪声的添加而退化为简单的分布,如高斯分布。

  基于上述观察,我们引入了一种新的参数生成方法,即神经网络扩散 p-diff(p代表参数),该方法采用了一个标准的潜在扩散模型来合成一组新的参数。这是由于扩散模型有能力将给定的随机分布转换为特定的随机分布。首先,对于由SGD优化器训练的模型参数的一个子集,我们训练自动编码器来提取这些参数的潜在表示。然后,我们利用一个标准的潜在扩散模型来综合来自随机噪声的潜在表示。最后,将合成的潜在表示通过经过训练的自动编码器的解码器,得到新的高性能模型参数。

  我们的方法有以下特点:
i)它在几秒内跨多个数据集和架构实现相似甚至增强的性能,即由SGD优化器训练的模型。
ii)我们生成的模型,与训练好的模型有很大的差异,这说明我们的方法可以合成新的参数,而不是记忆训练样本。

二、Nerual Network Diffusion (神经网络扩散)

2.1扩散模型(预备知识)

  扩散模型通常由由 timesteps 索引的多步链中的正向和反向过程组成

前向过程

  给定一个样本 x0∼q (x),正向过程在T步中,逐步增加的高斯噪声,得到x1、x2、···、xT:

在这里插入图片描述
其中q和N表示前向过程,以及由 βt 参数化的高斯噪声,I 为单位矩阵。

反向过程

  反向过程的目的是训练一个去噪网络递归地去除 xt 中的噪声。当t从T减少到0时,它在多步链上向后移动。数学表述为:

在这里插入图片描述
  其中p表示反向过程,µθ(xt, t)Σθ(xt, t) 是由去噪网络参数θ估计的高斯均值和方差。去噪网络采用标准负对数似然法 进行优化(DKL(·||·) 为KL散度):

在这里插入图片描述
  训练扩散模型的目标是找到在每个时间步长t中,最大化 forward transitions的似然的 reverse transitions。在实践中,训练等价地由最小化变分上界构成。推理过程的目的,是通过优化去噪参数θ 和反向的多步链,从随机噪声中生成新的样本。

训练和推理程序

2.2 总览

  神经网络扩散 p-diff ,目的是从随机噪声中生成高性能的参数。如图2所示,方法由两个过程组成,即参数自动编码器和生成器

在这里插入图片描述

1.给定一组训练好的高性能模型,选择参数中的一个子集,并压平为一维向量。
2.引入一个编码器,从这些向量中提取潜在表示,并伴随着一个解码器,负责从潜在表示中重建参数。
3.训练一个标准的潜在扩散模型,从随机噪声中合成潜在表示。

  经过训练后,利用p-diff通过以下链生成新的参数:随机噪声→反向处理→训练的解码器→生成的参数

2.3 参数自动编码器

2.3.1数据准备
  收集自动编码器的训练数据,我们从头开始训练一个模型,并在最后一个epoch密集地保存权重(只通过SGD优化器更新参数子集,并修复模型的剩余参数)。利用保存的参数子集S=[s1…,sk,…,sK]来训练自动编码器,其中K是训练样本的数量。对于一些在大规模数据集上训练的大型架构,考虑到从头训练的成本,对预训练模型的参数子集进行微调,并将微调后的参数密集保存为训练样本。

2.3.2训练
  将参数S压缩成一维向量 V = [v1,…,vk,…,vK],其中 V∈RK×D ,D是子集参数的大小。然后,训练一个自动编码器来重构这些参数V。为了增强其鲁棒性和泛化性,在输入参数和潜在表示中同时引入了随机噪声增强。Encoder和Decoder过程:

在这里插入图片描述
其中,fencoder(·, σ)fdecoder(·, ρ) 分别表示由σ和ρ参数化的编码器和解码器。
Z为潜在表示,ξ为随机噪声,Z表示,V’ 为重构参数。默认使用一个一个4层编码器和解码器的自动编码器。将V’V之间的均方误差(MSE)损失最小化如下:

在这里插入图片描述

2.4 参数生成

  最直接的策略是,通过扩散模型直接生成新的参数。该操作的内存成本太重,特别是当V的维数超大时。在此基础上,我们将扩散过程默认应用于潜在表示Z,具体使用DDPM来优化:

在这里插入图片描述
其中t在1和T之间均匀采样,超参数 α ˉ \bar{α} αˉt 表示每一步的噪声强度,ϵ是添加的高斯噪声,ϵθ表示由θ参数化的去噪网络。训练完成后,直接利用随机噪声,逆扩散和解码,生成一组新的高性能参数。这些生成的参数与剩余的模型参数连接起来,形成新的模型进行评估。神经网络参数和图像像素在几个关键方面表现出显著的差异,包括数据类型、维度、范围和物理解释。与图像不同的是,神经网络参数大多没有空间相关性,因此我们在参数自编码器和参数生成过程中,用一维卷积代替二维卷积

三、实验

3.1 设置

3.1.1数据集和框架

  评估数据集,包括MNIST,CIFAR-10/100,ImageNet-1K,STL-10,Flowers,Pets和F-101。网络主要在ResNet-18/50、ViT-Tiny/Base和ConvNeXt-T/B上进行实验。

3.1.2训练细节

  自动编码器和潜在扩散模型都包括一个基于4层的一维CNN的Encoder和Decoder。默认所有框架接收200个训练数据。ResNet-18/50,从零开始训练。在最后一个阶段,我们继续训练最后两个BN层,并修复其他参数。在最后一个epoch保存了200个checkpoints。对于ViT-Tiny/Base和ConvNeXt-T/B,使用timm库中发布的模型的最后两个标准化参数进行了微调。ξV和ξZ为振幅分别为0.001和0.1的高斯噪声。自动编码器和潜扩散训练可以在单个Nvidia A100 40G GPU上在1到3小时内完成

3.1.3推理细节

  通过在潜在扩散模型和训练解码器中加入随机噪声,合成了100个新参数。然后将这些合成参数与上述固定参数连接起来,形成我们生成的模型。从这些生成的模型中,我们选择了在训练集上表现最好的模型。随后,我们在验证集上评估其准确性,并报告结果。这是考虑与使用SGD优化训练的模型进行公平比较的问题。

3.2 结果

  表1显示了与8个数据集和6个架构上的两个基线的结果比较。基于这些结果,我们有以下几个观察结果: i)在大多数情况下,我们的方法获得了比两个基线相似或更好的结果。这表明,我们的方法可以有效地学习高性能参数的分布,并从随机噪声中生成优越的模型。ii)我们的方法在各种数据集上始终表现良好,这表明我们的方法具有良好的通用性。
在这里插入图片描述

3.3 消融实验与分析

  消融实验默认在CIFAR-100上训练ResNet-18,并报告最好的、平均的和中等的准确性。

3.3.1训练模型的数量
  表2.(a)改变了训练数据的大小,即原始模型的数量。我们发现,不同数量的原始模型之间的最佳结果的性能差距很小。为了全面探讨不同数量的训练数据对性能稳定性的影响,采用平均值(avg.)和中位数(med.)准确性,作为我们生成的模型的稳定性的指标。值得注意的是, 由少量训练实例生成的模型的稳定性,比在较大的设置中观察到的要差得多 。这可以用扩散模型的学习原理来解释:如果只使用少量的输入样本进行训练,扩散过程可能很难很好地模拟目标分布。

在这里插入图片描述

3.3.2在哪里应用 p-diff
  我们默认是合成最后两个标准化层的参数。为了研究p-diff在其他归一化层深度上的有效性,我们还探讨了合成其他浅层参数的性能。为了保持相同数量的BN参数,我们对三组BN层实现了我们的方法,它们是在不同深度的层之间。如表2(b), 方法在所有BN层设置的深度上都比原始模型获得了更好的性能(最佳精度)。另一个发现是, 合成深层比生成浅层可以获得更好的精度。这是因为生成浅层参数比生成深层参数更容易在正向传播过程中积累误差。

3.3.3噪声增强
  噪声增强是为了增强训练自动编码器的鲁棒性和泛化性。我们分别降低了在输入参数和潜在表示中应用这种增强的有效性。消融结果见表2(c)

i)噪声增强在生成稳定和高性能的模型中起着至关重要的作用
ii)在潜在表示中应用噪声增强的性能增益,大于在输入参数中
iii)我们的默认设置,在参数和表示中联合使用噪声增强,获得了最佳的性能

3.3.4对整个模型参数的泛化
  以上评估了在综合模型参数的一个子集方面的有效性,即批处理归一化参数。为评估综合整个模型参数,将其扩展到两个小的架构,即MLP-3(三个线性层+ReLU激活)和ConvNet-3(三个卷积层+一个线性层)。与前面提到的训练数据收集策略不同,我们分别用200个不同的随机种子从头开始单独训练这些架构。我们以CIFAR-10为例,展示了两种框架的细节(卷积层:核大小×核大小,通道数量;线性层:输入维度,输出维度):

• ConvNet-3: conv1. 3×3, 32, conv2. 3×3, 32, conv3. 3×3,
32, linear layer. 2048, 10.

• MLP-3: linear layer1. 3072, 50, linear layer2. 50, 25,
linear layer3. 25, 10.

  我们在表3展示了本方法和两个基线(即原始和集成)之间的结果比较,证明了方法在综合整个模型参数方面的有效性和泛化,即在基线上实现相似甚至改进的性能。然而,受到GPU内存的限制,无法综合大型体系结构的整个参数,如ResNet、ViT和ConvNeXt系列。
在这里插入图片描述

3.3.5原始模型的参数模式
  实验结果和消融研究证明了我们的方法在生成神经网络参数方面的有效性。为了探究这背后的内在原因,我们使用3个随机种子从头开始训练ResNet-18模型,并可视化图3中的参数。我们通过最小-最大归一化,来可视化不同层的参数分布的热图。基于卷积层(Conv.-layer2)和全连接层(fc层18层)参数的可视化,这些层之间确实存在特定的参数模式 (specific parameter
patterns)。基于对这些模式的学习,我们的方法可以生成高性能的神经网络参数。

在这里插入图片描述

四、P-diff只是记忆吗?

  主要研究原始模型和生成模型之间的差异。我们首先提出了一个相似度度量方法。然后进行了几次比较和可视化来说明我们的方法的特点

4.1 问题和实验设计

  设计以下问题:

1)p-diff是否只是记住了从训练集中的原始模型中提取的样本?
2)在添加噪声或微调原始模型和由我们的方法生成的模型之间有什么区别?

  论文中,希望p-diff能够产生一些性能不同于原始模型的新参数。为了验证这一点,我们设计了一些实验,通过比较原始模型的预测和可视化结果,来研究原始模型、噪声添加模型、微调模型、p-diff模型和p-diff模型之间的差异。

4.2 相似性指标

  默认设置(使用ResNet-18对CIFAR-100进行实验)只生成最后两批归一化层的参数。我们通过计算两个模型错误预测的联合交集(IoU)来衡量两个模型之间的相似性。IoU可以表述如下:

在这里插入图片描述
  其中Pwrong 表示验证集上错误预测的指标。IoU越高,表明两种模型的预测相似性越大。为减轻实验中性能对比的影响,我们默认选择性能优于76.5%的模型。

4.3 预测的相似性

  对于每个模型,我们通过与其他模型的IoU平均来获得其相似性。

  我们引入了四个比较: 1)原始模型之间的相似性;2)p-diff模型之间的相似性;3)原始模型和p-diff模型之间的相似性;4)原始模型和p-diff模型之间的最大相似度(最近邻)。我们计算了上述四种比较中所有模型的iou,并在图4(a).中报告了它们的平均值我们可以发现, 生成的模型之间的差异远远大于原始模型之间的差异。另一个发现是,即使原始模型和生成模型之间的最大相似性也低于原始模型之间的相似性它显示了我们的p-diff可以生成新的参数

在这里插入图片描述

噪声消融
  随机选择一个生成的模型,并从原始模型中搜索其最近邻(即最大相似度)。然后,对最近邻的随机噪声进行微调和添加,得到相应的模型。然后,我们分别用微调模型和噪声添加模型计算原始模型的相似度。最后,我们重复此操作50次,并报告其平均iou进行分析。在这个实验中,我们还限制了所有模型的性能,即在这里只使用好的模型来减少可视化的偏差。我们根据经验设置了随机噪声的振幅,其范围为0.01到0.1,以防止性能的实质性下降。

  根据图4(b)中的结果,发现微调模型和噪声添加模型的性能很难优于原始模型。此外,微调模型或噪声添加模型与原始模型之间的相似性非常高,这表明这两种操作无法获得新的但高性能的模型

4.4 潜在表示的比较

  除了预测,我们使用t-SNE评估原始和生成模型的潜在表征分布。为了识别我们的方法和在原始模型的潜在表示中添加噪声的操作之间的差异,如图4©。添加的噪声振幅为0.1的随机高斯噪声。我们可以发现,p-diff可以产生新的潜在表示,而添加噪声只是围绕原始模型的潜在表示进行插值

4.5 p-diff过程的运动轨迹

  我们在推理阶段绘制不同时间步长的生成参数,形成轨迹,以探索其生成过程。5个轨迹(由5个随机噪声初始化)如图5(a).所示我们还绘制了原始模型的平均参数及其标准差(std)。随着时间步长的增加,生成的参数总体上接近于原始模型。虽然我们对可视化保持了一个较窄的性能范围约束,但轨迹的端点(橙色三角形)与平均参数(五角星)之间仍然有一定的距离。另一个发现是,这五种轨迹是不同的。

在这里插入图片描述

4.6 从记忆到生成新的参数

  为了研究原始模型的数量(K)对生成模型的多样性的影响,我们在图5(b).中可视化了具有不同K的原始模型和生成模型之间的最大相似性具体来说,我们不断地生成参数,直到50个模型在所有情况下都优于76.5%。当K=为1时,生成的模型几乎记忆了原始模型,相似度范围较窄,值较高。随着K的增加,这些生成的模型的相似性范围变大,这表明我们的方法可以生成与原始模型不同的参数。

五、相关工作

1.引入库

2.读入数据








d \sqrt{d} d 1 0.24 \frac {1}{0.24} 0.241 x ˉ \bar{x} xˉ x ^ \hat{x} x^ x ~ \tilde{x} x~ ϵ \epsilon ϵ
ϕ \phi ϕ


总结

提示:这里对文章进行总结:

例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1466802.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

harbor(docker仓库)仓库部署 - 高可用

harbor(docker仓库)仓库部署 - 高可用 1. harbor高可用1.1 方案说明1. 双主复制2. 多harbor实例共享后端存储 1.2 部署高可用(多harbor实例共享后端存储)1. 服务器划分2. 安装harbor(先部署一套Harbor,用于…

【LeetCode每日一题】 单调栈的案例84 柱状图中最大的矩形

84 柱状图中最大的矩形 给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。 求在该柱状图中,能够勾勒出来的矩形的最大面积。 示例 1: 输入:heights [2,1,5,6,2,3] 输出:10 解释…

unity ui界面优化

优化一个比较复杂的界面,里面有多个rt和组件。 在初次打开这个界面的时候会发生1s多的卡顿,还是非常严重的。 分析 通过profiler分析 1.打开界面时卡顿。 分析:除了update和dotween相关逻辑,主要在于打开时的lua function调用…

【Python笔记-设计模式】装饰器模式

一、说明 装饰器模式是一种结构型设计模式,旨在动态的给一个对象添加额外的职责。 (一) 解决问题 不改变原有对象结构的情况下,动态地给对象添加新的功能或职责,实现透明地对对象进行功能的扩展。 (二) 使用场景 如果用继承来扩展对象行…

多维时序 | Matlab实现CPO-BiTCN-BiGRU冠豪猪优化时间卷积神经网络双向门控循环单元多变量时间序列预测模型

多维时序 | Matlab实现CPO-BiTCN-BiGRU冠豪猪优化时间卷积神经网络双向门控循环单元多变量时间序列预测模型 目录 多维时序 | Matlab实现CPO-BiTCN-BiGRU冠豪猪优化时间卷积神经网络双向门控循环单元多变量时间序列预测模型预测效果基本介绍程序设计参考资料 预测效果 基本介绍…

JAVA--File类与IO流

目录 1. java.io.File类的使用 1.1 概述 1.2 构造器 1.3 常用方法 1、获取文件和目录基本信息 2、列出目录的下一级 3、File类的重命名功能 4、判断功能的方法 5、创建、删除功能 2. IO流原理及流的分类 2.1 Java IO原理 2.2 流的分类 2.3 流的API 3. 节点流之一…

Unity之PUN2插件实现多人联机射击游戏

目录 📖一、准备工作 📺二、UI界面处理 📱2.1 登录UI并连接PUN2服务器 📱2.2 游戏大厅界面UI 📱2.3 创建房间UI 📱2.4 进入房间UI 📱2.5 玩家准备状态 📱2.6 加载战斗场景…

SpringCloud-Gateway解决跨域问题

Spring Cloud Gateway是一个基于Spring Framework的微服务网关,用于构建可扩展的分布式系统。在处理跨域问题时,可以通过配置网关来实现跨域资源共享(CORS)。要解决跨域问题,首先需要在网关的配置文件中添加相关的跨域…

【EI会议征稿通知】2024年软件自动化与程序分析国际学术会议(SAPA 2024)

2024年软件自动化与程序分析国际学术会议(SAPA 2024) 2024 International Conference on Software Automation and Program Analysis 在当今科技社会中,软件产业呈快速发展趋势,软件自动化与程序分析技术在提高软件质量、降低开发成本、提升…

【Java】继承与抽象(实验三)

目录 一、实验目的 二、实验内容 三、实验小结 一、实验目的 了解继承的概念,掌握派生类的定义。掌握派生类构造方法的执行过程。掌握方法的重载与覆盖。掌握抽象类的概念及上转型对象的使用 二、实验内容 1、定义一个抽象类Shape,类中封装属性name…

详解AP3216C(三合一sensor: 光照、距离、照射强度)驱动开发

目录 概述 1 认识AP3216C 1.1 AP3216C特性 1.2 AP3216C内部结构 1.3 AP3216C 硬件电路 1.4 AP3216C工作时序 1.4.1 I2C 写数据协议 1.4.2 I2C 读数据协议 1.5 重要的寄存器 1.5.1 系统配置寄存器 1.5.2 和中断相关寄存器 1.5.3 IR数据寄存器 1.5.4 ALS 数据寄存器 …

C++之stack与queue的模拟实现

一、 stack的介绍和使用 1. stack的介绍 stack 的文档介绍 翻译: 1. stack 是一种容器适配器,专门用在具有后进先出操作的上下文环境中,其删除只能从容器的一端进行元素的插入与提取操作。 2. stack 是作为容器适配器被实现的&#xff…

C++的queue容器->基本概念、常用接口

#include<iostream> using namespace std; #include <queue> #include <string> //队列 queue class Person { public: Person(string name, int age) { this->m_Name name; this->m_Age age; } string m_Name; int…

.netcore 6.0/7.0项目迁移至.netcore 8.0 注意事项

1、SqlSugarCore 相关 1.1 主项目添加数据&#xff0c;否则会报数据库连接错误&#xff1a; <InvariantGlobalization>false</InvariantGlobalization> <PropertyGroup><TargetFramework>net8.0</TargetFramework><Nullable>enable</…

PostMan使用自带js库base64编码、sha256摘要、环境变量的使用

目录 1、环境变量的使用2、base64编码、sha256摘要、以及脚本的使用3、脚本代码 在请求调试接口的过程中&#xff0c;因为要使用大量相同的参数&#xff0c;使用变量的方式能很大程度上减轻接口调用的工作量 版本说明&#xff1a;Postman for Windows&#xff0c;Version&#…

【办公类-16-10-02】“2023下学期 6个中班 自主游戏观察记录(python 排班表系列)

背景需求&#xff1a; 已经制作了本学期的中4班自主游戏观察记录表 【办公类-16-10-01】“2023下学期 中4班 自主游戏观察记录&#xff08;python 排班表系列&#xff09;-CSDN博客文章浏览阅读398次&#xff0c;点赞10次&#xff0c;收藏3次。【办公类-16-10-01】“2023下学…

无人机竞赛常用目标检测方法--色块检测

本次开源计划主要针对大学生无人机相关竞赛的视觉算法开发。 开源代码仓库链接&#xff1a;https://github.com/zzhmx/Using-color-gamut-limitations-such-as-HSV-and-RGB-for-object-detection.git 主要使用传统算法&#xff0c;如果想要使用进阶版机器学习算法&#xff0c;请…

golang tun设备创建并监听

golang tun设备创建并监听 linux tun设备文件地址为/dev/net/tun.直接打开即可(关闭文件描述符创建的tun虚拟接口自动注销) fd,err:syscall.Open("/dev/net/tun",syscall.O_RDWR,0640)//关闭 syscall.Close(fd)初始化 配置ip地址启动虚拟网卡 ip addr add xxx.xx…

【数据分享】中国首套1公里高分辨率大气湿度指数数据集(6个指标\免费获取)

湿度数据是气象学和许多其他领域中至关重要的数据&#xff0c;可用于气象预测与气候研究。之前我们分享过Excel格式和GIS矢量格式&#xff08;均可查看之前的文章获悉详情&#xff09;的2000-2020年全国各城市逐日、逐月和逐年的湿度数据。 本次我们给大家带来的是中国首套1公…

【Linux网络】网络编程套接字(TCP)

目录 地址转换函数 字符串IP转整数IP 整数IP转字符串IP 关于inet_ntoa 简单的单执行流TCP网络程序 TCP socket API 详解及封装TCP socket 服务端创建套接字 服务端绑定 服务端监听 服务端获取连接 服务端处理请求 客户端创建套接字 客户端连接服务器 客户端…