PyTorch实战:常用卷积神经网络搭建结构速览
目录
前言
常用卷积神经网络
1.AlexNet
2.VGGNet
3.GoogLeNet
4.ResNet
总览
前言
PyTorch可以说是三大主流框架中最适合初学者学习的了,相较于其他主流框架,PyTorch的简单易用性使其成为初学者们的首选。这样我想要强调的一点是,框架可以类比为编程语言,仅为我们实现项目效果的工具,也就是我们造车使用的轮子,我们重点需要的是理解如何使用Torch去实现功能而不要过度在意轮子是要怎么做出来的,那样会牵扯我们太多学习时间。以后就出一系列专门细解深度学习框架的文章,但是那是较后期我们对深度学习的理论知识和实践操作都比较熟悉才好开始学习,现阶段我们最需要的是学会如何使用这些工具。
深度学习的内容不是那么好掌握的,包含大量的数学理论知识以及大量的计算公式原理需要推理。且如果不进行实际操作很难够理解我们写的代码究极在神经网络计算框架中代表什么作用。不过我会尽可能将知识简化,转换为我们比较熟悉的内容,我将尽力让大家了解并熟悉神经网络框架,保证能够理解通畅以及推演顺利的条件之下,尽量不使用过多的数学公式和专业理论知识。以一篇文章快速了解并实现该算法,以效率最高的方式熟练这些知识。
博主专注数据建模四年,参与过大大小小数十来次数学建模,理解各类模型原理以及每种模型的建模流程和各类题目分析方法。此专栏的目的就是为了让零基础快速使用各类数学模型、机器学习和深度学习以及代码,每一篇文章都包含实战项目以及可运行代码。博主紧跟各类数模比赛,每场数模竞赛博主都会将最新的思路和代码写进此专栏以及详细思路和完全代码。希望有需求的小伙伴不要错过笔者精心打造的专栏:
一文速学-数学建模常用模型https://blog.csdn.net/master_hunter/category_10967944.html
常用卷积神经网络
上篇文章我十分详细讲述了卷积神经网络的特点以及运算和结构搭建。强烈推荐读者多看几遍,以后搭建论文神经网络或者是面试卷积神经网络细节部分都能够有所联想记忆。那么根据上篇文章的学习,我们已经拥有了搭建卷积神经网络的能力,也就是拥有了造车的能力,可以根据数据和图片搭建自己想要的卷积神经网络,但是想要搭建一些已经验证能力的卷积神经网络还是有一定差距的。本篇文章主要带大家再次熟悉一下卷积神经网络的搭建过程,想靠一篇文章来学会卷积神经网络显然是异想天开的,我们需要更多的实践去使用才能掌握。
文章分为两部分,第一部分主要对常用的卷积神经网络简述介绍,第二部分将参考论文详细搭建每个卷积神经网络并且完成数据集的分类。
1.AlexNet
AlexNet是一个经典的卷积神经网络,它在2012年的ImageNet图像分类挑战中取得了第一名。ImageNet是自2010年以来,每年举办一次的全球性图片分类比赛。自从该竞赛举办开始,业界便视其为深度学习标准数据集。后续很多优秀的神经网络模型都是由此比赛诞生。
AlexNet出现后打破了原来众多学者的认知,它首次证明了学习到的特征可以超越手工设计的特征,从而越来越多的人开始重新审视深度学习算法并加入到研究的浪潮中。
有兴趣的可以阅读论文:
《ImageNet Classification with Deep Convolutional Neural Networks》http://www.cs.toronto.edu/~fritz/absps/imagenet.pdf
AlexNet是一个相对较深的神经网络,相比于以前的网络结构,它引入了更多的卷积层和全连接层。这使得网络可以学习更加复杂、抽象的特征,从而提升了图像分类的性能。
- ReLU激活函数:在AlexNet中,使用了ReLU(Rectified Linear Unit)作为激活函数,相比于传统的Sigmoid函数,ReLU能够更好地解决梯度消失的问题,加速了网络的收敛速度。
- 局部响应归一化(LRN)层:引入了LRN层,它在激活函数之前对神经元的输出进行归一化,使得响应相对较大的神经元被抑制,从而提升了网络的泛化能力。
- Dropout正则化:在全连接层之间引入了Dropout层,这有助于防止过拟合,提升了网络的泛化能力。
- 大尺寸卷积核和重叠池化:AlexNet使用了较大的卷积核和重叠的池化层,这使得网络能够捕捉到更大范围内的特征,并减小了特征图的大小。
- 数据增强和多尺度训练: 在训练阶段,AlexNet使用了数据增强技术,包括随机裁剪、水平翻转等,以及在不同尺度下训练多个模型,从而提升了网络的鲁棒性和性能。
AlexNet的网络结构:
从上图看,在网络设计上其实并非如上图所示,上图包含了GPU通信的部分。这是由当时GPU内存的限制引起的,作者使用两块GPU进行计算,因此分为了上下两部分。但是,以目前GPU的处理能力,单GPU足够了,因此其结构图可以如下所示:
2.VGGNet
VGGNet(Visual Geometry Group Network)是由牛津大学视觉几何组(Visual Geometry Group)提出的深度卷积神经网络架构,它在2014年的ImageNet图像分类挑战中取得了优异的成绩。VGGNet之所以著名,一方面是因为其简洁而高效的网络结构,另一方面是因为它通过深度堆叠的方式展示了深度卷积神经网络的强大能力。
VGGNet探索了卷积神经网络的深度与其性能之间的关系,成功地构筑了16~19层深的卷积神经网络,证明了增加网络的深度能够在一定程度上影响网络最终的性能,使错误率大幅下降,同时拓展性又很强,迁移到其它图片数据上的泛化性也非常好。到目前为止,VGG仍然被用来提取图像特征。
- 网络结构:VGGNet主要由卷积层和全连接层组成,整个网络采用了相对较小(3x3)的卷积核,以及较小的池化窗口(2x2的最大池化),从而保持了网络结构的简洁性。
- 深度和宽度: VGGNet的主要特点是通过深度和宽度的增加来提升网络性能。它通过不断加深网络结构,使得特征图能够在不同层次上学到越来越抽象的特征。同时,VGGNet采用了相对较大的卷积核,这使得网络具有更大的感受野,能够捕捉到更广阔的上下文信息。
- 卷积层的堆叠: VGGNet通过多次堆叠相同大小的卷积层和池化层,从而逐步减小特征图的大小,增加通道数,提升网络对图像特征的抽象能力。
- 全连接层: 在卷积层之后,VGGNet采用了多层的全连接层来实现分类任务。这些全连接层将高维的特征图映射到最终的类别得分。
- ReLU激活函数: 在每个卷积层和全连接层之后都采用了ReLU作为激活函数,这有助于缓解梯度消失的问题,提升网络的收敛速度。
- Dropout正则化: VGGNet在全连接层之间引入了Dropout层,以防止过拟合。
- Batch Normalization: 虽然VGGNet并没有采用Batch Normalization(BN)层,但后续的一些网络结构会在卷积层后面添加BN层来加速训练。
我们来看看VGGNet的网络结构:
VGGNet包含两种结构,分别为16层和19层。VGGNet结构中,所有卷积层的kernel都只有3*3。VGGNet中连续使用3组3*3kernel的原因是它与使用1个7*7kernel产生的效果相同,然而更深的网络结构还会学习到更复杂的非线性关系,从而使得模型的效果更好。该操作带来的另一个好处是参数数量的减少,因为对于一个包含了C个kernel的卷积层来说,原来的参数个数为7*7*C,而新的参数个数为3*(3*3*C)。
VGG16Net网络结构:
内存消耗主要来自早期的卷积,而参数量的激增则发生在后期的全连接层。
VGGNet的优点:
-
简单明了的结构: VGGNet的结构非常简单直观,由连续的卷积层和池化层组成,使得网络结构易于理解。
-
便于迁移学习: VGGNet的结构可以很容易地应用于其他任务,也使得它成为了迁移学习的一个良好基础。
-
较少的超参数: 相对于GoogLeNet,VGGNet的超参数较少,因此更容易调整和训练。
VGGNet的缺点:
-
较大的参数数量: 由于采用了大量的卷积层,导致VGGNet的参数数量较大,训练和推理过程需要更多的计算资源。
-
容易出现过拟合: 由于参数量较大,需要更多的数据来避免过拟合问题。
3.GoogLeNet
GoogLeNet,也被称为Inception V1,是谷歌团队在2014年提出的一个深度卷积神经网络架构,它在当年的ImageNet图像分类挑战中取得了领先地位。GoogLeNet的主要特点是采用了一种称为“Inception模块”的网络结构,通过多层次的特征抽取和组合,使得网络可以同时在不同尺度上提取特征,从而获得了非常强大的分类性能。
- Inception模块: GoogLeNet最大的特点就是采用了Inception模块,这是一种具有多个并行卷积操作的模块。这样的设计可以让网络同时学习到不同尺度和抽象级别的特征,从而提升了网络对图像的理解能力。
- 多尺度的特征提取: Inception模块通过使用不同大小的卷积核(1x1、3x3、5x5)和最大池化层来处理输入特征图,然后将它们合并在一起。这样可以让网络在不同尺度上获取信息,从而捕获到更丰富的图像特征。
- 1x1卷积核的作用: 1x1卷积核被称为逐点卷积(pointwise convolution),它可以用来降低通道数或者增加通道数。这使得网络能够在保持计算量相对较小的情况下,增加了网络的复杂性和表达能力。
- 全局平均池化: GoogLeNet不使用全连接层,而是采用了全局平均池化层,将特征图的每个通道的特征值求平均,然后直接连接到分类器中。这样的设计可以降低网络的参数量,减少过拟合的可能性。
- 辅助分类器: 除了主分类器外,GoogLeNet在中间层引入了两个辅助分类器。这两个辅助分类器在训练过程中会加入总损失中,有助于减轻梯度消失问题,加速网络的收敛。
- Inception的多次堆叠: GoogLeNet通过多次堆叠Inception模块,构建了一个深度的网络结构,从而获得了强大的特征抽取能力。
- Dropout和Batch Normalization: GoogLeNet在全连接层之间采用了Dropout层来防止过拟合,并在卷积层之后使用了Batch Normalization来加速训练。
GoogLeNet最初的想法很简单,就是若想要得到更好的预测效果,就要增加网络的复杂度,即从两个角度出发:网络深度和网络宽度。但是二者都需要付出一定的代价,首先更复杂的网络意味着更多的参数,就算是ILSVRC这种包含了1000类标签的数据也很容易过拟合。
再者是更复杂的网络会带来更大的计算资源的消耗,而且当kernel个数设计不合理时导致kernel中的参数没有被完全利用(多数权重都趋近于0)时,会导致大量计算资源的浪费。
GoogLeNet引入了inception结构来解决这个问题,其中涉及了大量的数学推导和原理,感兴趣的推荐阅读:Going Deeper with Convolutionshttps://arxiv.org/abs/1409.4842这里不作详解,不然都得另开篇文章,内容太多了。除了inception结构,GoogLetNet的另外一个特点是主干网络部分全部使用卷积网络,仅仅在最终分类部分使用全连接层。
GoogLeNet和VGGNet是两种非常成功的深度卷积神经网络架构,它们各自有着不同的优缺点:
GoogLeNet的优点:
-
更高的效率: GoogLeNet相比于VGGNet在同等性能下,拥有更少的参数量。这使得它在相同计算资源下,可以处理更大规模的任务。
-
更深的网络结构: GoogLeNet通过巧妙的Inception模块设计,使得可以构建非常深的网络,而不容易出现梯度消失或爆炸的问题。
-
多尺度特征提取: Inception模块可以同时在不同尺度上提取特征,使得网络能够捕获到丰富的图像信息。
-
全局平均池化: 使用全局平均池化代替全连接层,可以大幅减少参数数量,降低过拟合的风险。
GoogLeNet的缺点:
-
相对复杂的网络结构: 由于Inception模块的设计相对复杂,导致GoogLeNet的网络结构不太容易理解。
-
训练时间较长: 由于网络深度较大,训练GoogLeNet需要相对更长的时间。
-
难以可视化和解释: 由于网络结构的复杂性,GoogLeNet的内部工作原理相对难以可视化和解释,使得难以理解网络的决策过程。
GoogLeNet相对于VGGNet在网络结构设计上更加灵活和高效,适用于大规模任务。而VGGNet在结构上更为简单直观,容易理解和调整,适用于中小规模的任务,也便于迁移学习。选择合适的网络取决于任务的具体需求、计算资源和数据规模等因素。
4.ResNet
在ResNet提出之前,所有的神经网络都是通过卷积层和池化层的叠加组成的。
人们认为卷积层和池化层的层数越多,获取到的图片特征信息越全,学习效果也就越好。但是在实际的试验中发现,随着卷积层和池化层的叠加,不但没有出现学习效果越来越好的情况,反而两种问题:
- 1.梯度消失和梯度爆炸
- 梯度消失:若每一层的误差梯度小于1,反向传播时,网络越深,梯度越趋近于0
- 梯度爆炸:若每一层的误差梯度大于1,反向传播时,网络越深,梯度越来越大
- 2.退化问题
- 随着层数的增加,预测效果反而越来越差。
因此ResNet网络的主要特点和设计思想:
- 残差块(Residual Block): ResNet引入了残差块的概念,通过在网络中添加了“跳跃连接”(skip connection),使得网络可以直接学习残差(即原始输入与学习到的特征之间的差异),而不是直接学习原始特征。这样可以更容易地训练非常深的网络。
- 跳跃连接: 残差块中的跳跃连接允许信息在不同层之间直接传递,而不会受到梯度消失或爆炸的影响。这种设计保证了信息在网络中的流动,使得可以训练非常深的网络。
- Identity Mapping: 在残差块中,如果输入的特征维度与输出的特征维度相同,那么可以直接将输入特征传递给输出,形成一个恒等映射(identity mapping)。这样可以避免了在高维空间中进行不必要的非线性变换,减少了网络的复杂度。
- Bottleneck 结构: 为了减少计算量和参数数量,ResNet使用了“瓶颈结构”(bottleneck structure)来代替简单的卷积层,它包括了一个1x1卷积层、一个3x3卷积层和一个1x1卷积层,分别用于降维、卷积、升维,从而减少了计算量。
- 全局平均池化(Global Average Pooling): 在网络的最后一层使用了全局平均池化,将特征图的每个通道的所有值取平均,得到一个与通道数量相同的特征向量,作为最终的预测。
- Identity Shortcut 和 Projection Shortcut: ResNet根据输入输出的维度是否一致,分别使用了两种不同的跳跃连接方式,即Identity Shortcut(维度一致)和Projection Shortcut(维度不一致),保证了信息的顺利传递。
ResNet的设计思想在于引入了残差学习,通过跳跃连接解决了深度网络训练过程中的梯度问题。ResNet论文提出通过数据的预处理以及在网络中使用 BN(Batch Normalization)层来解决。为了解决深层网络中的退化问题,可以人为地让神经网络某些层跳过下一层神经元的连接,隔层相连,弱化每层之间的强联系。这种神经网络被称为 残差网络 (ResNets)。ResNet论文提出了 residual结构(残差结构)来减轻退化问题,下图是使用residual结构的卷积网络,可以看到随着网络的不断加深,效果并没有变差,而是变的更好了。
除了残差结果以外,ResNet还沿用了前人的一些可以提升网络性能的效果和设计,如堆叠式残差结构,每个残差模块又由多个小尺度kernel组成,整个ResNet除最后用于分类的全连接层以外都是全卷积的,这大大提升了计算速度。ResNet网络深度有34、50、101、152等多种,50层以上的ResNet也借鉴了类似GoogLeNet的思想,在细节上使用了bottleneck的设计方式。普通卷积层与残差卷基层:
ResNet网络结构缩略图:
总览
至此我们已经介绍了4种基础的网络结构和设计网络时涉及的主要思想。在ResNet之后,还有很多新的网络结构不断出现,但主要思想大体上都是基于以上4种类型做的一些改进,入Inception-v4的主要思想便是ResNet+Inception。
我们再来看看不同网络结构可以达到的算法精度以及其内存消耗情况:
如与其他模型相比,VGGNet占用最多的计算量并且消耗最大的内存,GoogLeNet是刚刚介绍的四个模型中计算量和内存消耗最小的模型,然而AlexNet虽然计算量不高,但也会占用较大内存且精度不高,而不同大小的ResNet模型性能差异也较大,具体情况需要根据应用场景选择合适的模型。
相关文章:
PyTorch实战:常用卷积神经网络搭建结构速览
目录 前言 常用卷积神经网络 1.AlexNet 2.VGGNet 3.GoogLeNet 4.ResNet 总览 前言 PyTorch可以说是三大主流框架中最适合初学者学习的了,相较于其他主流框架,PyTorch的简单易用性使其成为初学者们的首选。这样我想要强调的一点是,框架…...
排序算法之【快速排序】
📙作者简介: 清水加冰,目前大二在读,正在学习C/C、Python、操作系统、数据库等。 📘相关专栏:C语言初阶、C语言进阶、C语言刷题训练营、数据结构刷题训练营、有感兴趣的可以看一看。 欢迎点赞 👍…...
声明式调用 —— SpringCloud OpenFeign
Feign 简介 Spring Cloud Feign 是一个 HTTP 请求调用的轻量级框架,可以以 Java 接口注解的方式调用 HTTP 请求,而不用通过封装 HTTP 请求报文的方式直接调用 Feign 通过处理注解,将请求模板化,当实际调用的时候传入参数&#x…...
LuatOS-SOC接口文档(air780E)-- fota - 底层固件升级
fota.init(storge_location, len, param1)# 初始化fota流程 参数 传入值类型 解释 int/string fota数据存储的起始位置 如果是int,则是由芯片平台具体判断 如果是string,则存储在文件系统中 如果为nil,则由底层决定存储位置 int 数据存…...
第二章 Introduction
Armv8.4 架构引入了在安全状态下的虚拟化扩展。Arm SMMU v3.2 架构 [1] 增加了对安全流的第二阶段翻译的支持,以补充 Armv8.4 PE 中的安全 EL2 翻译体制。这些架构特性使得可以在安全状态下将彼此不信任的软件组件隔离开来。隔离是实现最小权限原则的机制࿱…...
WebGL 渲染三维图形作为纹理贴到另一个三维物体表面
目录 渲染到纹理 帧缓冲区对象和渲染缓冲区对象 帧缓冲区对象 帧缓冲区对象的结构 如何实现渲染到纹理 示例程序(FramebufferObject.js) 创建帧缓冲区对象(gl.createFramebuffer()) gl.createFra…...
国庆《乡村振兴战略下传统村落文化旅游设计》许少辉八一新书行将售罄
国庆《乡村振兴战略下传统村落文化旅游设计》许少辉八一新书行将售罄 国庆《乡村振兴战略下传统村落文化旅游设计》许少辉八一新书行将售罄...
Source Insight 工具栏图标功能介绍
这篇文章并不介绍 Source Insight 的具体使用方法,这类教程网上有很多,这里只分析 Souce Insight 工具栏图标的功能。 文章目录 Source Insight 简介Souce Insight 工具栏文件操作新建(CtrlN)打开(CtrlO)保…...
模板与泛型编程-函数模板
本专栏由于缺少函数模板专题,我本以为这个不用讲解,但由于某些同学基础比较薄弱,特地在此补充一下。 函数模板的定义一般都在头文件中。 一、如何定义一个模板函数 下面是一个求和函数 template<typename T,typename U> auto Add(T a, U b) {return a + b; }int...
了解ActiveMQ、RabbitMQ、RocketMQ和Kafka的特点
ActiveMQ ActiveMQ是一种基于JMS(Java消息服务)规范的消息中间件,由Apache基金会开发和维护 核心组件和特点: Broker(代理):ActiveMQ的核心组件是Broker,它负责接收、存储和路由消息…...
第七章 用户和组管理
7.1 Linux中的用户和组的分类 用户类别 超级用户(0) root 系统用户(1-999) 一般用户(1000-60000) 组类别 管理组 root 基本组(默认组/主组) 附加组(额外组) 7.2 用户管理 7.2.1 添加新用户 语法 useradd 【…...
给奶牛做直播之三
一、前言 上一篇给牛奶做直播之二 主要讲用RTMP搭建点播服务器,整了半天直播还没上场,今天不讲太多理论的玩意,奶牛今天放假了也不出场,就由本人亲自上场来个直播首秀,见下图,如果有兴趣的话࿰…...
【Java 进阶篇】MySQL 数据控制语言(DCL):管理用户权限
MySQL 是一个强大的关系型数据库管理系统,提供了丰富的功能和选项来管理数据库和用户。数据库管理员(DBA)通常使用数据控制语言(Data Control Language,简称 DCL)来管理用户的权限和访问。 本文将详细介绍…...
WPF 03
staticResource和dynamicResource的区别 首先看一个案例 MainWindow.xaml <Window x:Class"WpfDay03.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml&quo…...
Android 使用kotlin+注解+反射+泛型实现MVP架构
一,MVP模式的定义 ①Model:用于存储数据。它负责处理领域逻辑以及与数据库或网络层的通信。 ②View:UI层,提供数据可视化界面,并跟踪用户的操作,以便通知presenter。 ③Presenter:从Model层获…...
数据结构——堆(C语言)
本篇会解决一下几个问题: 1.堆是什么? 2.如何形成一个堆? 3.堆的应用场景 堆是什么? 堆总是一颗完全二叉树堆的某个节点总是不大于或不小于父亲节点 如图,在小堆中,父亲节点总是小于孩子节点的。 如图&a…...
B058-SpringBoot
目录 springboot概念与作用入门案例springboot运行方式热部署配置文件Profile多环境支持整合测试-springboot-testSpringboot-web1.返回json数据2.返回页面(模板技术)thymeleaf1.导入thymeleaf依赖2.模板文件3.controller4.启动类 SSM整合1.导包2.项目目…...
龙迅LT9611UXC 2PORT MIPICSI/DSI转HDMI(2.0)转换器+音频,内置MCU
龙迅LT9611UXC 1.描述: LT9611UXC是一个高性能的MIPI DSI/CSI到HDMI2.0转换器。MIPI DSI/CSI输入具有可配置的单 端口或双端口,1高速时钟通道和1~4高速数据通道,最大2Gbps/通道,可支持高达16Gbps的总带 宽。LT9611UXC支持突发…...
STM32存储左右互搏 I2C总线读写FRAM MB85RC1M
STM32存储左右互搏 I2C总线读写FRAM MB85RC1M 在较低容量存储领域,除了EEPROM的使用,还有铁电存储器FRAM的使用,相对于EEPROM, 同样是非易失性存储单元,FRAM支持更高的访问速度, 其主要优点为没有EEPROM持续写操作跨页…...
1340. 跳跃游戏 V;2039. 网络空闲的时刻;2767. 将字符串分割为最少的美丽子字符串
1340. 跳跃游戏 V 核心思想:动态规划记忆化搜索。定义dfs(i),表示从i开始最多可以访问多少个下标,然后统计往左跳和往右边跳的最大值,思路其实比较简单,但是代码我感觉还是不太好想。 2039. 网络空闲的时刻 核心思想…...
ElementUI之CUD+表单验证
目录 前言: 增删改查 表单验证 前言: 继上篇博客来写我们的增删改以及表单验证 增删改查 首先先定义接口 数据样式,我们可以去elementUI官网去copy我们喜欢的样式 <!-- 编辑窗体 --><el-dialog :title"title" :visib…...
Linux:nginx---web文件服务器
我这里使用的是centos7系统 nginx源码包安装 Linux:nginx基础搭建(源码包)_鲍海超-GNUBHCkalitarro的博客-CSDN博客https://blog.csdn.net/w14768855/article/details/131445878?ops_request_misc%257B%2522request%255Fid%2522%253A%25221…...
go 端口转发 代理V2 --chatGPT
问:broker(localPort, targetPort), 实现远程访问localPort的http代理转发到目标机器 gpt: 要实现一个简单的 HTTP 代理服务器,你可以使用 Go 的 net/http 包来处理 HTTP 请求和响应。以下是一个示例,演示如何创建一个 HTTP 代理服务器将本地…...
idea环境下如何打包可运行jar?
工作中有时候偶尔写一些工具类、小程序,可是java程序员制作一个可运行jar实在折腾,利用idea开发环境,可以快速打包自己的可运行jar。具体怎么操作呢? 创建一个空白的java项目并完成自己的程序开发 完成java代码: /**…...
基于FFmpeg的Android播放器
基于FFmpeg的Android播放器 文章目录 基于FFmpeg的Android播放器1. 前言2. 编译相关组件库3. 解码器4. 解码流程5. 音频输出6. 视频输出(需要优化) 1. 前言 FFmpeg是一个最有名的开源的编解码库,实现了通常的编解码逻辑。它还能够根据平台特…...
osgPBR(十五)镜面IBL--查看不同级别的HDR环境贴图
首先,设置可以使用Mipmap,启用三线性过滤,设置最大级别和最小级别 osg::ref_ptr<osg::TextureCubeMap> tcm new osg::TextureCubeMap; tcm->setTextureSize(128, 128);tcm->setFilter(osg::Texture::MIN_FILTER, osg::Texture:…...
Docker的学习记录
Docker是一个被广泛使用的开源容器引擎,基于Go语言,遵从Apache2.0协议开源。 docker的三个概念:容器、镜像和仓库。 镜像(Image):镜像是Docker中的一个模板。通过 Docker镜像 来创建 Docker容器ÿ…...
Android Jetpack组件架构:ViewModel的原理
Android Jetpack组件架构:ViewModel的原理 导言 本篇文章是关于介绍ViewModel的,由于ViewModel的使用还是挺简单的,这里就不再介绍其的基本应用,我们主要来分析ViewModel的原理。 ViewModel的生命周期 众所周知,一般…...
数据分析(python)学习笔记1.0
《利用Python进行数据分析》(原书第2版) 《利用Python进行数据分析》(原书第2版) 《利用Python进行数据分析》(原书第2版) 社区和会议 除了网络搜索,科学、数据相关的Python邮件列表对于解决问题也非常有帮助。可以看看下列邮件列表: pydata:与数据分析和pandas相…...
SW免安装的toolbox只读问题
把SOLIDWORKSDATA 整体复制到另外的目录,然后这里设置目录位置。不然原始位置有只读属性...
一个网站的建设流程有哪些资料/网站流量宝
2019独角兽企业重金招聘Python工程师标准>>> 1. lucene 简介 Apache Lucene 是一个全文检索引擎,它不是一个完整的应用程序,但它提交的API可以很容易的搭建一个具有检索能力的应用。DownLoad: http://www.apache.org/dyn/closer.lua/lucene…...
海西高端网站建设公司/浙江网站建设推广
单机 项目早期 单机运行 开发中涉及到一些状态都是本地内存存储 例如ConcurrentHashMap存储在线用户信息. 集群 后期业务增长单机慢慢不足以支持,这时候考虑到要弄集群了。 实时在线用户信息,之前是存在本地内存ConcurrentHashMap ,一旦部…...
购物网商城/seo站群优化技术
本文参考学习 https://blog.csdn.net/zxccaoya/article/details/54142523 而来。 这里介绍mfc 中改变按钮颜色的最简单方法。 使用CMFCButton类 在mfc 的Dialog 或者 Form 中添加一个按钮,但注意是MFCButton。 MFC自带的MFC Button Control控件等按钮可以修改颜…...
青岛做网站公司哪家好/企业内训机构
1.背景介绍 相信很多人手机上都收到过一些营销短信,短信里面有时候会附带一些网址,如下图 这些网址往往都是非常短,但是当我们打开之后,如果你仔细观察,中间会有跳转,最终浏览器地址栏显示的网址并不是你短…...
wordpress 访问优化/百度关键词排名十大排名
一:概述 什么是数据库引擎? MySQL提供了多种存储引擎,存储引擎一定程度上决定了表的能力。数据库引擎包括处理事务安全表的引擎和处理非事务安全表的的引擎。通俗点讲,所谓数据库引擎其实也就是存储数据到文件的技术。不同的技术…...
如何提高网站搜索排名/上海seo培训
python从入门到精通一个月就够了?答案是肯定的。要知道,一个月是一段很长的时间。如果每天坚持用 6-7 小时来做一件事,你会有意想不到的收获。 作为初学者,第一个月的月目标应该是这样的: 熟悉基本概念(变…...