【多模态大模型】系列1:Transformer Encoder——ViLT、ALBEF、VLMO
目录
- 1 ViLT
- 2 ALBEF
- 3 VLMO
1 ViLT
ViLT: Vision-and-Language Transformer Without Convolution or Region Supervision
图文多模态任务,关键是提取视觉特征和文本特征,然后对齐。在之前的多模态研究工作中,视觉侧通常需要一个目标检测器来确定图像中物体所在的区域,再提取各区域的特征。ViT 将 Transformer 迁移到视觉领域之后,人们意识到,直接使用 patch projection 来处理图像输入也是可行的。由此,ViLT 首次使用 patch projcetion 来直接提取图像特征,摆脱了笨重的目标检测器。
ViLT 引言部分的示意图(如下图所示)将当时已有的多模态工作归纳地很清晰,并突出了 ViLT 减轻视觉侧推理负担的优势。VE(视觉嵌入)、TE(文本嵌入)和 MI(模态交互)分别表示不同的网络组件,他们在途中模块的大小表示对应网络的复杂度。在图 1 所示的四种结构中,(a)、(b)、© 三种方法中,由于使用目标检测器确定图像的区域,因此视觉端(Visual Embed)都是一个复杂的网络。在 (d) 中,也就是 ViLT 中,使用简单的线性映射,实现了视觉端处理。ViLT 将网络的大部分复杂度放在多模态任务中重要的模态交互部分。
下图展示了 ViLT 的模型结构。模型结构上,ViLT 首先分别使用词嵌入和可学习的线性映射来提取文本和视觉嵌入,然后通过一个 Transformer 来进行特征交互。损失函数上,ViLT 共使用了三个损失,分别是图文匹配 ITM、掩膜语言模型 MLM 和文本图像块对齐 WPA。ITM 判断输入的文本与图像是否匹配,本质上是一个二分类问题。MLM 即 BERT 提出的”完形填空“,预测输入的文本中被挖去的单词。WPA 则是要对齐输入文本与图像块。
ViLT 仍旧存在两个局限:
- 虽然 ViLT 通过改用线性映射,降低了视觉端嵌入网络的复杂度。但是性能有所下降,综合当时的多模态研究工作来看,视觉端的嵌入网络相较于文本端,的确需要更复杂一些。原因是文本端的 tokenizer 已经有一定语义理解能力了,而视觉端的 patch embedding 是随机初始化的。
- 虽然 ViLT 的推理很快,但是训练时间并不短。
可以考虑一些常用的loss: ,下面前三个loss是比较好用的。
- Image text contrastive loss(CLIP模型训练方式)
- Image text matching loss(BERT训练方式)
- Masked language modelling loss(ViLBERT和ViLT使用过)
- Word patch alignment (这个在vilt中用到,但是计算很慢)
2 ALBEF
Align before Fuse: Vision and Language Representation Learning with Momentum Distillation
- 贡献1(出发点):在multimodal interaction之前我们要align好text and image token,以便于multimodal encoder学习。ALBEF 提出在进行多模态交互之前,先通过一个对比损失(其实就是 CLIP 中的 ITC 损失)来对齐图像和文本数据。
- 贡献2:不同的损失函数其实是在为同一个图像文本对,生成不同的视角,变相地做data augmentation,达到semantic preserving的目的。
模型结构如下:
在这张图中,满足了我们两个假设,文本编码器比图像编码器小且模态融合也大。同时也用了我们提到的三个loss去训练模型:Image-text contrastive loss(ITC)、Image text matching loss(ITM)和Masked language modelling loss(MLM)。
目标函数:
通过对比学习可知,只要定义一个正样本对和多个负样本对,就可以进行对比了。我们希望正样本对之间的距离越来越近,正负样本对之间的距离越来越远。首先要做的就是去出去这种全局特征,在特征之间去做embedding space上的拉近和拉远。
- ITC loss, image-text contrastive loss。图像和文本分别通过encoder tokenise, CLS token是一个全局特征(图中绿色方块旁边的黄色方块), down sample和normalisation(786x1 => 256x1),然后进行正负样本的对比学习(预先存了很65536个负样本q,没有gradient,由Momentum Model产生),这一步就是align。
- ITM loss, image text matching loss。在multimodal encoder的输出之后加一个二分类头(FC层),这里很特别的是,每个batch里我拿一个图片和batch里除了配对文本之外的所有的文本做cosine similarity (借助之前ITC的那个模块),挑一个相似度最高的作为负样本 (hard negative) 来训练,来加大难度。
- MLM, masked language modeling。类似BERT的完形填空,mask一个词语,去预测mask的词语,但是融合了图像的信息。
其他细节:
- 上图右侧的 Momentum Model,就是用于进行自训练学习的动量模型,根据主模型进行动量更新,类似 MoCo 。
- ITM 损失需要模型判断出输入图像和文本是否匹配,即一个二分类问题。直接与当前批次中所有的样本进行比对过于简单,对模态交互训练的帮助不大。ALBEF 中通过 ITC 损失计算得到的各样本间的余弦相似度,为 ITM 损失进行难负样本挖掘,取除正样本外相似度最高的作为负样本。
- 在计算 ITC 和 ITM 两种损失时,模型的输入是原始图像和原始文本,而在计算 MLM 损失时,模型的输入则是原始图像和经过 mask 的文本。因此,ALBEF 训练时的每一轮迭代需要经过两次前向传播的过程。多模态学习的方法通常训练时长较长,就是因为需要进行多次前向传播,计算不同的损失。
做动量蒸馏(Momentum Distillation)的动机:从网上爬下来的图像文本对通常weakly-correlated,即文本并没有很好地描述图像,从而产生了noise。这种弱关联的训练样本中可能出现某些负样本的图文匹配程度,比 GT 中正样本的 one-hot 标签的匹配程度更高的情况,不利于 ITC 和 MLM 两种任务的训练。
ALBEF 中除了梯度更新的主模型之外,还有一个动量模型,用于为主模型的训练生成 multi-hot 的伪标签。动量模型通过滑动指数平均(EMA)的方式,根据主模型进行动量更新。这样,除了Ground Truth(GT,真实标签)中的 one-hot 标签,我们就又得到了multi-hot的伪标签(pseudo-targets),用于 ITC 和 MLM 任务的损失计算。补充一句,对于 ITM 任务,由于其本身就是基于 GT 的二分类任务,并且通过 ITC 中计算的相似度结果进行了难负例挖掘,因此无需进行动量计算。
ALBEF中为MLM(第一行)和ITC(第二行)生成的伪标签示例如下图所示:
3 VLMO
VLMo Unified Vision-Language Pre-Training with Mixture-of-Modality-Experts
贡献1:dual-encoder (双塔模型,如CLIP) 解决了检索问题,而fusion encoder,也叫单塔模型,解决了不同模态之间的交互问题,VLMo就把2种的好处都结合了起来,一个模型,想当双塔和单塔 (论文命名为vision-language expert, language expert, vision expert,其实就是不共享参数的FC层) 用都可以。
贡献2:分阶段模型训练的改进(stage-wise pre-training), 简单来说就是多模态的数据集不够大,那我就先预训练单独的一个模态。
为什么提出MoME(Mixture of Multi Expert):双编码器模型(dual-encoder)的优点是在进行检索等任务时,可以预先对数据库中的数据进行特征提取,运行效率高。缺点是模态交互部分只有一个简单的余弦相似度的计算,过于简单。在视觉推理等模态交互复杂的任务上表现较差。与之相反的,融合编码器模型(fusion-encoder)的优点是模态交互充分,缺点是无法预先进行特征提取,效率稍差。为了解决这种冲突,VLMo 提出了 MoME(Mixture of Multi Expert),由不同的 “专家” 来处理不同类型(文本/图像)的输入数据。简单来说,就是在每个 Tranformer 块中:自注意力层权重在不同类型输入间共享,而 FFN 层权重则根据输入类型的不同而不同。
VLMo的目标函数和ALBEF一样也是ITC、ITM和MLM。因为在NLP使用Transformer时,数据集越大训练效果越好,在做多模态时也希望如此,但是在当时还没有开源的大规模数据集。曲线救国:所以VLMo的作者想到可以用文本和视觉各自领域的超大规模数据集先分别对 “文本专家” 和 “视觉专家” 进行预训练(stage-wise pre-training),然后再在多模态数据集上进行预训练。
模型总览图如下所示:
在预训练任务的选择上,VLMo 与 ALBEF 一致,同样使用 ITC、ITM 和 MLM 三种,并且同样借助 ITC 为 ITM 进行hard negtives。在进行不同的任务时,会使用 MoME 结构中不同的 FFN 层参数进行训练:
- ITC:在计算 ITC 损失时,VLMo 的模型是一种 “dual encoder” 模型,以双塔的结构分别对文本和图像进行嵌入。
- ITM、MLM:在计算 ITM、MLM 损失时,VLMo 模型又成了一种 “fusion encoder” 模型,分别提取图像文本的特征之后,再用 F FF 层 Transformer Block 进行模态融合。
MoME 结构最大的优势就是灵活。在训练时,对应不同的任务时使用不同结构计算损失函数,并更新对应参数。这样的训练有一个缺点是需要做多次模型前向。
VLMO采用了分阶段的训练方式,如下图所示:首先,VLMo 先在单独的图像数据上训练自注意力层和视觉 FFN ;然后,在单独的文本数据上训练文本 FFN ;最后,在多模态数据上训练自注意力层和三种 FFN 专家。这里特别有趣的点是在单独的文本数据上进行训练时,自注意力层是冻结的。也就是说,通过图像数据训练出的自注意力层,在文本数据上甚至连微调都不需要,就能工作得很好。
相关文章:
【多模态大模型】系列1:Transformer Encoder——ViLT、ALBEF、VLMO
目录 1 ViLT2 ALBEF3 VLMO 1 ViLT ViLT: Vision-and-Language Transformer Without Convolution or Region Supervision 图文多模态任务,关键是提取视觉特征和文本特征,然后对齐。在之前的多模态研究工作中,视觉侧通常需要一个目标检测器来…...
2.4 测试数据与初始化
测试数据与初始化 在 Spring Test 中,合理管理测试数据的初始化和清理是保证测试可靠性的关键。本章将介绍多种数据准备方式,涵盖 SQL 脚本执行、编程式初始化 和 动态数据生成,并提供最佳实践示例。 1. 使用 Sql 执行 SQL 脚本 作用 在测…...
DataBase【MySQL基础夯实使用说明(中)】
MySQL数据库 🏆当领导问你忙不忙,您怎么回复? 🔔要让领导知道你很忙,但是你的事情紧急,我可以优先处理! 文章目录 MySQL数据库前言一、SQL(Structured Query Language)1…...
Unity3D Shader 简析:变体与缓存详解
引言 在 Unity3D 中,Shader 是渲染管线的核心部分,负责控制物体的外观和材质表现。Shader 的变体(Variants)和缓存机制是优化渲染性能的关键。本文将深入探讨 Unity3D 中 Shader 变体的概念、缓存机制以及如何通过代码实现和管理…...
vuex基础介绍
/store/index.js import Vue from vue import Vuex from vuexVue.use(Vuex)/*** 创建并导出一个 Vuex 仓库实例* 仓库是一个存储应用所有状态的容器,并且提供了修改和获取状态的方法*/ export default new Vuex.Store({// state 是一个对象,用于存储应…...
OpenWRT中常说的LuCI是什么——LuCI介绍(一)
我相信每个玩openwrt的小伙伴都或多或少看到过luci这个东西,但luci到底是什么东西,可能还不够清楚,今天就趁机来介绍下,openwrt中的luci,到底是个什么东西。 什么是LuCI? 首先,LuCI是OpenWRT中…...
singleTaskAndroid的Activity启动模式知识点总结
一. 前提知识 1.1. 任务栈知识 二. Activity启动模式的学习 2.1 standard 2.2 singleTop 2.3.singleTask 2.4.singleInstance 引言: Activity作为四大组件之一,也可以说Activity是其中最重要的一个组件,其负责调节APP的视图ÿ…...
DeepSeek-V3 技术报告
1.摘要 为了减少开源模型与闭源模型的能力差距,我们提出了DeepSeek-V3,一个大的混合专家模型(Mixture-of-Experts (MoE) ),有6710亿参数,每个token会激活370亿参数。 DeepSeek-V3采用多头隐注意力…...
Vue 3 30天精进之旅:Day 22 - 构建和部署
欢迎回来!在我们的Vue 3学习旅程的第22天,我们将探讨应用的构建和部署。在完成了我们的应用开发后,下一步就是如何将其部署到服务器,使得用户可以访问。 1. 构建Vue应用 构建Vue应用是将我们在本地开发的代码打包成生产环境可用…...
Ansible中Playbook的逻辑控制语句-when
playbook的逻辑控制语句 when 条件判断语句,类似if loop 循环语句,类似loop block 将几个任务组成一个代码块,便于针对一组操作的异常进行处理 when的基本用法 when的运算符操作 when关键字可以配合各种运算符进行操作,如下&…...
制造业物联网的十大用例
预计到 2026 年,物联网制造市场价值将达到 4000 亿美元。实时收集和分析来自联网物联网设备与传感器的数据,这一能力为制造商提供了对生产流程前所未有的深入洞察。物联网(IoT)有潜力彻底改变制造业,使工厂能够更高效地…...
InfiniBand与IP over InfiniBand(IPOIB):实现高性能网络通信的底层机制
在现代高性能计算(HPC)和数据中心环境中,网络通信的效率和性能至关重要。InfiniBand(IB)作为一种高性能的串行计算机总线架构,以其低延迟、高带宽和高可靠性而广泛应用于集群计算和数据中心。IP over InfiniBand(IPOIB)则是在InfiniBand网络上实现IP协议的一种方式,它…...
【通俗易懂说模型】一篇弄懂几个经典CNN图像模型(AlexNet、VGGNet、ResNet)
🌈 个人主页:十二月的猫-CSDN博客 🔥 系列专栏: 🏀深度学习_十二月的猫的博客-CSDN博客 💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光 目录 1. 前言 2. …...
机器学习 | scikit-learn中分块拟合vs一次性拟合所有数据
Scikit-learn是一个广泛使用的机器学习Python库,提供了一系列分类、回归、聚类等算法。机器学习的关键挑战之一是处理无法一次性放入内存的大型数据集。本文探讨了使用scikit-learn将数据分块拟合与一次性拟合的策略,讨论了每种方法的优点和局限性。 大…...
两个同一对象targetList和 sourceList 去重
我现在需要解决的问题是从一个Java的源列表`sourceList`中移除所有在目标列表`targetList`中存在的数据,并且还要去除`targetList`中的重复数据。让我先理清楚这两个问题的思路。 首先,如何快速从`sourceList`中移除含有`targetList`的数据。这里的“含有”应该是指两个列表中…...
小游戏源码开发之可跨app软件对接是如何设计和开发的
专业小游戏开发的团队往往会面临跨领域和不同平台客户需要追加同一款游戏的需求,所以就要设计和开发一款可任意对接不同 App 软件的小游戏,那么针对这类需求小游戏开发团队早已有了成熟的解决方案,针对设计和开发可跨平台游戏对接大概流程简单…...
掌握正则表达式_模式匹配的艺术
当然,以下是《掌握正则表达式:模式匹配的艺术》文章内容,使用 Java 正则表达式,并包含丰富的代码示例: 1. 引言 1.1 正则表达式的定义与历史 正则表达式(Regular Expression,简称 regex 或 regexp)是一种用于描述文本模式的强大工具。它最初由数学家 Stephen Kleene…...
FacePoke详细使用指南:如何利用开源AI工具优化照片人物表情
文章目录 前言1. 本地使用FacePoke1.1 整合包方式安装1.2 Docker方式部署 2. FacePoke功能演示3. 公网使用FacePoke3.1 创建远程连接公网地址 4. 固定远程访问公网地址 前言 在数字创意的世界里,一款名为FacePoke的工具正以其风趣而强大的功能吸引着无数创作者的目…...
本地部署【LLM-deepseek】大模型 ollama+deepseek/conda(python)+openwebui/docker+openwebui
通过ollama本地部署deepseek 总共两步 1.模型部署 2.[web页面] 参考官网 ollama:模型部署 https://ollama.com/ open-webui:web页面 https://github.com/open-webui/open-webui 设备参考 Mac M 芯片 windows未知 蒸馏模型版本:deepseek-r1:14b 运行情况macminim2 24256 本地…...
分发饼干(力扣455)
从这道题开始我们就进入贪心算法的学习了。这个算法没有固定的套路,甚至题目之间的联系也很少,基本上每一道题都要当新题来写。我们能做的只有见多识广,这样才有机会在考试中根据以往经验解决贪心的题目。贪心的本质上就是找到局部最优解&…...
信息收集-主机服务器系统识别IP资产反查技术端口扫描协议探针角色定性
知识点: 1、信息收集-服务器系统-操作系统&IP资产 2、信息收集-服务器系统-端口扫描&服务定性 一、演示案例-应用服务器-操作系统&IP资产 操作系统 1、Web大小写(windows不区分大小写,linux区分大小写) 2、端口服务特征(22就是linux上的服…...
建筑兔零基础自学python记录18|实战人脸识别项目——视频检测07
本次要学视频检测,我们先回顾一下图片的人脸检测建筑兔零基础自学python记录16|实战人脸识别项目——人脸检测05-CSDN博客 我们先把上文中代码复制出来,保留红框的部分。 然后我们来看一下源代码: import cv2 as cvdef face_detect_demo(…...
vue-点击生成动态值,动态渲染回显输入框
1.前言 动态点击生成数值,回显输入框,并绑定。 2.实现 <template><div style"display:flex;align-items: center;flex-direction:row"><a-input:key"inputKey"v-model"uploadData[peo.field]"placehold…...
Idea 插件 Quickly-Code-Toolkit
使用说明 (一)全局设置 Paging Wrapper Setting(分页设置) 功能:主要用于在方法写入时,为返回参数提供分页包装类。设置方式:需准确填写分页包装类的全限定名,例如:com…...
fun-transformer学习笔记-Task1——Transformer、Seq2Seq、Encoder-Decoder、Attention之间的关系
Transformer、Seq2Seq、Encoder-Decoder、Attention由这四者之间的关系可以从模型架构的发展脉络来理解: Seq2Seq 与 Encoder–Decoder 模型 “Seq2Seq”(sequence‐to‐sequence)是一类用于将一个变长序列映射为另一个变长序列的任务&#x…...
使用瑞芯微RK3588的NPU进行模型转换和推理
使用边缘设备进行算法落地时,通常要考虑模型推理速度,NVIDA系列平台可以使用TensorRT和CUDA加速,瑞芯微RK3588的板子上都是Arm的手机GPU,虽然没有类似CUDA的加速计算方式,但是提供了NPU进行加速推理,本文说…...
mysql读写分离与proxysql的结合
上一篇文章介绍了mysql如何设置成主从复制模式,而主从复制的目的,是为了读写分离。 读写分离,拿spring boot项目来说,可以有2种方式: 1)设置2个数据源,读和写分开使用 2)使用中间件…...
Vue笔记(九)
一、文章分类架子--PageContainer 学习PageContainer组件的封装,这一组件用于搭建页面基础结构,为后续内容展示提供统一布局。它可能包含通用的页面样式、导航栏、侧边栏等基础元素的结构搭建。 在Vue组件中, <template> 标签内定义基础…...
YOLO11框架使用
YOLO11 1. Frame Understanding2. What can YOLO11 do?3.如何训练自己数据集?3.1 配置环境3.2 制作自己数据集3.3 配置文件3.3.1 数据集配置文件3.3.2 网络模块配置文件4.修改训练参数配置文件5. 训练脚本编写6.结果展示1. Frame Understanding 2. What can YOLO11 do? Ult…...
RK3588视觉控制器与AI 算法:开启工业视觉检测新境界
在实际应用中,工业相机拍摄产品的图像,RK3588 迅速接收并进行预处理。AI 算法随即对图像进行深入分析,提取特征并与预设的标准进行对比,从而准确判断是否存在缺陷。 例如,在电子元件生产线上,RK3588 和 AI…...
C语言基础入门:2.5基础输入输出
【C语言基础】输入输出完全指南:从printf到缓冲区安全 文章目录 【C语言基础】输入输出完全指南:从printf到缓冲区安全一、格式化输出艺术:printf函数详解二、scanf输入安全与缓冲区处理三、字符级交互:getchar与putchar实战程序员…...
压缩stl文件大小
1、MeshLab下载界面,从MeshLab下载适合自己系统的最新版本。 2、打开 MeshLab软件,将stl文件拖入其中。 3、 4、Percentage reduction参数即为缩放比例,根据自身想要将文件压缩到多大来。 然后点击apply 5、CtrlE弹出窗口保存文件后&…...
二、交换机的vlan子设备接入
一、交换机的vlan设置-CSDN博客 二、交换机的vlan子设备接入-CSDN博客 接上篇的文章,本文接入了子设备 网络结构如下: 用路由器A和POE交换机B代替第一篇中的笔记本电脑,路由器A和交换机B都关闭DHCP服务,并分别接入一个IPC&#…...
KEPServerEX 的接口类型与连接方式的详细说明
目录 一、KEPServerEX 核心架构 二、KEPServerEX 支持的接口类型 三、KEPServerEX 支持的连接类型 1. 通用工业协议 2. 品牌专属协议 3. 行业专用协议 4. 数据库与文件接口 四、配置示例 1. 接口配置(以OPC UA为例) 2. 连接配置(以…...
Stack(栈)
定义:在Java编程语言中,栈(Stack)是一种非常重要的数据结构,具有后进先出的特性,即最后入栈的元素最先出栈。栈通常用于存储临时性的数据,如方法调用过程中的局部遍历、操作数栈等。 图像理解: 我们在这里要…...
【Vue3 Computed 与 Watch 维护对比】
让我们从开发体验和维护性的角度深入对比 computed 和 watch,通过具体场景分析它们的差异: 一、维护成本对比 1. 依赖管理差异 // 原始代码 const productFilter computed(() > {return products.value.filter((p) > p.price > minPrice.val…...
在node.js环境中使用web服务器http-server运行html静态文件
http-server http-server是一个超轻量级web服务器,它可以将任何一个文件夹当作服务器的目录供自己使用。 当我们想要在服务器运行一些代码,但是又不会配置服务器的时候,就可以使用http-server就可以搞定了。 使用方法 因为http-server需要…...
详解电子邮箱工作原理|SMTP、POP3、IMAP、SPF、MIME
写在前面 电子邮件(Email)是一种通过互联网进行异步通信的技术,工作原理涉及多个协议、服务器和客户端协同工作。 接下来我们来介绍一下电子邮箱的工作原理 1. 电子邮件的核心组成部分 邮件客户端:用户直接交互的软件…...
算法学习笔记之并查集
简介 问题描述:将编号为1-N的N个对象划分为不相交集合,在每个集合中,选择其中的某个元素代表所在集合。 常见两种操作: 1.合并两个集合 2.查找某元素属于哪个集合 实现方法1 用编号最小的元素标记所在集合; 定义…...
【开源项目】ShowDoc适合IT团队的在线API文档、技术文档工具
1. 介绍 通过showdoc,可以方便地使用markdown语法来书写出美观的API文档、数据字典文档、技术文档、在线excel文档等等。还可以利用showdoc的自动化能力,从程序注释中自动生成API文档,或者从搭配的RunApi客户端(类似postman的api…...
Tomcat添加到Windows系统服务中,服务名称带空格
要将Tomcat添加到Windows系统服务中,可以通过Tomcat安装目录中“\bin\service.bat”来完成,如果目录中没有service.bat,则需要使用其它方法。 打到CMD命令行窗口,通过cd命令跳转到Tomcat安装目录的“\bin\”目录,然后执…...
SQL最佳实践(笔记)
写在前面: 之前baeldung的Java Weekly Reviews里面推荐了一篇关于SQL优化的文章,正好最近在学习数据库相关知识,记一些学习笔记 原文地址:SQL Best Practices Every Java Engineer Must Know 1. 使用索引 使用索引…...
历史性突破!DeepSeek双模型GitHub热度超OpenAI,展现中国AI力量
在2025年2月7日,中国AI领域传来了一则振奋人心的消息:DeepSeek旗下的两大开源项目在GitHub平台上实现了历史性突破,其Star数成功超越了OpenAI的明星项目。这一成就不仅标志着DeepSeek在技术研发和市场影响力上的重大飞跃,也为中国…...
deepseek+kimi一键生成PPT
1、deepseek生成大纲内容 访问deepseek官方网站:https://www.deepseek.com/ 将你想要编写的PPT内容输入到对话框,点击【蓝色】发送按钮,让deepseek生成内容大纲,并以markdown形式输出。 等待deepseek生成内容完毕后,…...
Java学习
一、赋值 赋值表达式,左边一定是变量,右边是变量或者数值,变量与数值都有类型,(数值里整数默认int,小数默认double) 类型由小转大,存储空间变大,数据不会丢失,是安全的,在需要时编译…...
Shell-基本命令与运算符
1.为什么要进行shell编程? 在Linux系统中,虽然有各种各样的图形化接口工具,但是shell仍然是一个非常灵活的 工具。 Shell不仅仅是命令的收集,而且是一门非常棒的编程语言。 您可以通过使用shell使大量的任务自动化, 因此&#…...
JUnit 5 自定义注解:方法级 JSON 参数注入
JUnit 5 自定义注解:方法级 JSON 参数注入 为了实现 在测试方法上使用注解,并通过注解属性指定参数名称和 JSON 字符串(转换为 Java 对象),以下是基于 JUnit 5 正确扩展接口的解决方案: 一、实现步骤 1. …...
anolis os 8.9安装jenkins
一、系统版本 # cat /etc/anolis-release Anolis OS release 8.9 二、安装 # dnf install -y epel-release # wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo # rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.…...
【CXX】0 Rust与C 互操作利器:CXX库介绍与示例
CXX库是一个非常强大的工具,它使得Rust和C之间的互操作性变得既安全又高效。本专栏将展示如何使用CXX库来桥接Rust和C代码,同时保持两者语言的特性和惯用法。 一、关键概念回顾 类型安全:CXX库通过静态分析类型和函数签名来保护Rust和C的不…...
tensorflow环境中已安装库
1. 深度学习课前准备工作 Anaconda3、TensorFlow和keras安装方法 1 下载Anaconda: Anaconda3-5.2.0-Windows-x86_64.exe 双击安装,选定环境变量 2 开始菜单打开Anaconda Prompt:(2、3、4有链接科学上网) 创建环境&am…...