当前位置: 首页 > news >正文

[文献阅读] EnCodec - High Fidelity Neural Audio Compression

[文献信息]:[2210.13438] High Fidelity Neural Audio Compression facebook团队提出的一个用于高质量音频高效压缩的模型,称为EnCodec。Encodec是VALL-E的重要前置工作,正是Encodec的压缩量化使得VALL-E能够出现,把语音领域带向大模型时代。

摘要

随着互联网流量的增长,音频压缩是一个越来越重要的问题。传统上,这是通过用信号处理变换分解输入并权衡不太可能影响感知的分量的质量来实现的。

该文介绍了一个最先进的实时,高保真,音频编解码器,Encodec。它包括一个流编码器-解码器(streaming encoder-decoder)架构,具有以端到端方式训练的量化潜在空间。

在结构上,Encodec在编码器和解码器之间加入了残差量化层RVQ,使得中间离散特征进一步量化,并且不损失大部分信息。为了加快解码速度,还设计了一个轻量级的Transformer模型来进一步预测下一步的量化特征,从而加快量化的速度。

训练上引入了一种新的损失平衡器机制来稳定训练:损失的权重现在定义了它应该代表的整体梯度的分数,从而将这个超参数的选择与损失的典型规模解耦。

Encodec结构

论文的核心思想是使用神经网络来实现数据的压缩、音频数据的压缩。当遇到这种压缩问题的时候,我们最先想到的模型是AutoEncoder(自编码器)。AutoEncoder包含两个部分:Encoder和Decoder。Encoder负责将原始数据映射到低维度的潜空间,Decoder负责将潜空间中的变量映射成原始的数据。

为了进一步减少音频数据的大小,有利于数字存储和传输,模型中还需要包含量化的过程,将连续的音频信号转换为离散的数值。当然,量化过程也会导致一部分的信息损失。因此,设计的量化算法在减小文件大小的同时也要尽量减少对音质的影响。

基于上述两点的考虑,论文中设计的神经网络采样了典型的编解码器架构,带有一个Encoder和一个Decoder。为了实现量化的过程,Encoder和Decoder之间插入了一个Quantizer(量化器)。

在这里插入图片描述

持续时间为d的音频信号可以由序列 $x∈[−1,1]^{C_a×T} $表示,其中Ca是音频通道的数量, T = d ⋅ f s r T=d⋅f_{sr} T=dfsr 是给定采样率 f s r f_{sr} fsr 下的音频样本的数量。

EnCodec模型由三个主要组成部分组成:

  1. 编码器网络E输入音频提取并输出潜在表示 z ;
  2. 量化层Q使用矢量量化产生压缩表示 z q z_q zq ;
  3. 最后,解码器网络G从压缩的潜在表示 z q z_q zq 重建时域信号 x ^ \hat x x^

Encoder和Decoder

在这里插入图片描述

编码器模型E包括具有C个通道,kernel_size=7的1D卷积,其后是B个卷积块。 每个卷积块由单个残差单元组成,该残差单元之后是下采样层,该下采样层由步长卷积组成,其核大小K是步长S的两倍。 剩余单元包含两个核大小为3的卷积和一个跳跃连接。 每当发生下采样时,通道的数量就会加倍。 卷积块之后是用于序列建模的两层LSTM和具有7个核大小和D个输出通道的最终1D卷积层。

Encoder模型由1D卷积层和B个卷积块组成。1D卷积层的核大小为7,通道数为C。每个卷积块包含一个残差单元(residual unit)和一个步幅卷积的下采样层(downsampling layer consisting in a strided convolution)。核的大小是步幅的两倍。残差单元包括两个核大小为3的卷积和一个skip connection。每次下采样,通道数都会翻倍。卷积块后还会接一个两层LSTM进行序列建模。最后还会接一个1D卷积层。这个卷积层的核大小也是7,输出通道数为D。参照SoundStream的参数设置,1D卷积层的通道数C=32,卷积块的个数B=4,这4个卷积块的步幅(stride)分别是2、4、5、8。

Decoder与Encoder是对称的设计,将Encoder中卷积下采样改为上采样就可以了。

Non-streamable 在不可流处理的设置中,我们为每个卷积使用一个总的填充K − S,在第一个时间步长之前和最后一个时间步长之后平均分配(如果K − S是奇数,则在之前再分配一个)。 我们进一步将输入分割为1秒的块,重叠10 ms以避免点击,并在将每个块馈送到模型之前对其进行归一化,在解码器的输出上应用逆运算,增加可忽略的带宽开销以传输比例。 我们使用层标准化(Ba等人, 2016),计算还包括时间维度的统计量,以便保持相对尺度信息。

Streamable 对于流式设置,所有填充都放在第一个时间步长之前。 对于步长为s的转置卷积,我们输出s个第一个时间步,并将剩余的s个步骤保存在内存中,以便在下一帧可用时完成,或者在流结束时丢弃它。 由于这种填充方案,一旦接收到前320个样本(13 ms),模型就可以输出320个样本(13 ms)。 我们将层归一化替换为在时间维度上计算的统计数据,并使用权重归一化(Salimans & Kingma,2016),因为前者不适合流媒体设置。 我们注意到,通过保持一种形式的标准化,客观指标会有一个小的增益,如表A.3所示

考虑到音频流式实时传输的需求,模型有两种变体:流式变体和非流式变体。二者的区别仅仅在于填充的位置和归一化的方式。在流式变体中,所有的填充都会放在第一个时间步之前。模型可以在接收到第一批320个样本(13毫秒)后立即输出。除了这个,流式变体还使用weight normalization(权重归一化)来代替对时间维度进行统计的layer normalization(层归一化)。

在这里,我们需要解释一下为什么说第一批样本是320个,为什么它的持续时间是13ms?

解答:编码器中包含四个卷积块,这四个卷积块的步幅分别为2、4、5、8。也就是说,通过这四个卷积块后生成的一个数据点原来实际对应的是: 2×4×5×8=320 个数据点。所以说,流式变体的模型接收到了320个样本之后,就可以开始输出了。持续时间是13ms这个结论,是针对24kHz的音频来说的。对于24kHz的音频,一秒有24k个样本点。那如果数据仅有320个样本点的话,对应的时间就应该是: 秒毫秒320/24000=0.0133秒=13.3毫秒 。13.3毫秒其实就是一帧的持续时间。

残差向量量化RVQ

在这里插入图片描述

图来自VALL-E https://arxiv.org/abs/2301.02111。

对于一层量化,从Encoder输出的向量会与码本codebook中的向量进行对比,找到最相似的那个向量,记录它的下标。

**残差量化:**但是一层的量化损失太多信息,于是将原始向量与量化向量做差,对差值向量进一步量化,通过8层的残差量化,既能减少codebook的大小,又能减少信息的损失。

第一个block包含最重要的信息,后续的block则负责精确还原语音时的细节信息

同时,多层的残差量化让模型有了更多的选择性,训练时可以随机采样出前面k个block进行训练,保证在丢弃后若干个不重要的block时,模型仍然能够保持一定的精度。此时,模型可以在低比特率时选择性地丢弃后面的blocks,实现了对比特率的动态适应。

RVQ的训练策略:

  • codebook的更新策略:在训练过程中,每当codebook中的一个entry被选中用来代表一个输入向量时,这个entry就会根据输入数据进行更新。更新是通过计算entry的新值和旧值的指数移动平均来实现的。指数移动平均的衰减系数 β=0.99 。如果某个codebook的entry在当前批次数据中没有被任何输入向量选择,那么它可能被替换。替换通常是通过在当前批次数据中随机选择一个输入向量来完成的。
  • 梯度计算:使用Straight-Through Estimator(直通估计器)计算量化步骤对应的梯度。在STE中,即便量化步骤是不可微的(选择最近的codebook entry),我们仍然可以“假装”这个步骤是恒等操作,从而可以通过它传递梯度。
  • 损失函数:quantizer的输入与输出之间的均方误差,梯度只对其输入计算,这个损失会被添加到总的训练损失中

训练

总损失由以下构成:

重建损失项(Reconstruction Loss),感知损失项(Discriminative Loss)(通过鉴别器)和RVQ commitment 损失(RVQ commitment Loss)

重构损失包含时域重构损失和频域重构损失。

频域重构损失计算的是mel-spectrogram之间的差异。损失函数采用的是重构语音和目标语音在多个时间尺度上计算出的L1损失和L2损失的线性组合。

在这里插入图片描述

为了进一步提高所生成样本的质量,引入了一个基于多尺度STFT(MS-STFT)鉴别器的感知损失项

生成器的对抗性损失(adversarial loss)构造如下:

在这里插入图片描述

残差量化器损失

在这里插入图片描述

为了稳定训练,特别是来自鉴别器的梯度的变化尺度,引入了损失平衡器

在这里插入图片描述

结果

在这里插入图片描述

实验

huggingface上用于音频编码解码模型Encodec的官方示例 Encodec (编码) — EnCodec

加载模型,和预处理器processor

processor 对音频数据进行预处理。将音频数据的采样率设置为与处理器一致(24kHz)。

选取一个样本。

from datasets import load_dataset, Audio
from transformers import EncodecModel, AutoProcessor
librispeech_dummy = load_dataset("hf-internal-testing/librispeech_asr_dummy", "clean", split="validation")model = EncodecModel.from_pretrained("facebook/encodec_24khz")
processor = AutoProcessor.from_pretrained("facebook/encodec_24khz")librispeech_dummy = librispeech_dummy.cast_column("audio", Audio(sampling_rate=processor.sampling_rate))
audio_sample = librispeech_dummy[-1]["audio"]["array"]
inputs = processor(raw_audio=audio_sample, sampling_rate=processor.sampling_rate, return_tensors="pt")

对inputs编码,编码为离散特征


# 编码
encoder_outputs = model.encode(inputs["input_values"], inputs["padding_mask"])print(encoder_outputs)

对编码的中间特征解码,还原回音频数据。

# 解码
audio_values = model.decode(encoder_outputs.audio_codes, encoder_outputs.audio_scales, inputs["padding_mask"])[0]print(audio_values)

相关文章:

[文献阅读] EnCodec - High Fidelity Neural Audio Compression

[文献信息]:[2210.13438] High Fidelity Neural Audio Compression facebook团队提出的一个用于高质量音频高效压缩的模型,称为EnCodec。Encodec是VALL-E的重要前置工作,正是Encodec的压缩量化使得VALL-E能够出现,把语音领域带向大…...

JavaSpring 中使用 Redis

创建项目 配置 Redis 服务地址 创建 Controller 类 由于当前只是些简单的测试代码,所以就不进行分层了,只创建一个 Controller 来实现 jedis 通过 jedis 对象里的各种方法来操作 Redis 此处通过 StringRedisTemplate 来操作 Redis 最原始提供的类是 Re…...

B端可视化像企业数据的透视镜,看清关键信息

在数字化时代,数据已成为企业最宝贵的资产之一。然而,数据的价值不仅取决于其数量,更在于企业能否快速、准确地提取关键信息并据此做出决策。B端可视化技术的出现,为企业提供了一种强大的工具,它如同企业的“透视镜”&…...

【愚公系列】《Python网络爬虫从入门到精通》055-Scrapy_Redis分布式爬虫(安装Redis数据库)

🌟【技术大咖愚公搬代码:全栈专家的成长之路,你关注的宝藏博主在这里!】🌟 📣开发者圈持续输出高质量干货的"愚公精神"践行者——全网百万开发者都在追更的顶级技术博主! &#x1f…...

【MySQL】SQL语句在MySQL中的执行过程?主要存储引擎区别?

MySQL SQL语句执行过程详解 作为面试官,我来详细剖析一条SQL语句在MySQL中的完整执行过程,这是每个后端开发者都应该掌握的核心知识。 一、连接阶段 建立连接 客户端通过TCP/IP协议与MySQL服务器建立连接(默认3306端口)服务器验证用户名、密码和权限…...

致远OA——数据回填表单

文章目录 :apple: 业务需求描述:pineapple: 业务分析和实现 🍎 业务需求描述 测试案例: https://pan.quark.cn/s/3f58972f0a27 官网地址: https://open.seeyoncloud.com/v5devCAP/94/355/359/399/405/406.html 需求描述: 点…...

MongoDB导出和导入数据

安装mongodump工具 参考文章mongodump工具安装及使用详解_mongodump安装-CSDN博客 MongoDB导入导出和备份的命令工具从4.4版本开始不再自动跟随数据库一起安装,而是需要自己手动安装。 官方网站下载链接:Download MongoDB Command Line Database Tools …...

蓝桥杯之递归二

1.数的划分 题目描述 将整数 nn 分成 kk 份,且每份不能为空,任意两份不能相同(不考虑顺序)。 例如:n7,k3n7,k3,下面三种分法被认为是相同的。 1,1,5;1,5,…...

【大疆dji】ESDK开发环境搭建(软件准备篇)

接上一篇【大疆dji】ESDK开发环境搭建(硬件准备篇) 1. 编译环境 ESDK 提供 x86_64/aarch64 基于 Linux 平台 Ubuntu 发行版操作系统构建的静态库,运行 demo 先正确安装所需的依赖包。arm32位就不支持了。建议使用编译安装的方式,…...

Android TTY设备调用流程和简单分析

Linux TTY系统中ioctl的调用流程详解:从应用层到MSM GENI Serial驱动 本文档详细分析Linux系统中从用户空间应用程序发起TTY ioctl请求到特定驱动(例如msm_geni_serial_ioctl)的完整调用流程,包括32位应用与64位内核之间的兼容性问题分析。 1. 总体调用路径概览 以下是完…...

数字孪生赋能管理系统,降本增效立竿见影

1. 数字孪生基础概念及其在管理系统中的应用前景 数字孪生是一种集成多学科、多物理量、多尺度、多概率的仿真过程,在虚拟空间中完成映射,从而反映相对应的实体装备的全生命周期过程。其核心在于将现实世界中的物理对象或系统与其数字化模型相结合&…...

Java学习手册:Web 应用架构概述

一、Web 应用架构的演变 在互联网发展的初期阶段,Web 应用普遍采用客户端 / 服务器(C/S)架构模式。客户端应用程序与服务器端应用程序直接建立连接,进行数据交互和业务处理。然而,这种架构存在诸多局限性。由于客户端…...

企业网站安装 SSL安装的必要性

能够带来安全的加密和快速的访问体验,防止中间人的流量劫持,保障用户隐私信息的安全,帮助用户识别钓鱼网站,提升网站在搜索引擎的排名。 能够防止黑客盗走客户银行卡账号的机密信息,保证信息的机密性,防止…...

【CF】Day38——Codeforces Round 965 (Div. 2) B

B. Minimize Equal Sum Subarrays 题目: 思路: 直觉题 我们可以这样构造,将整个数列左移一位即可,为什么呢? 因为这样我们能尽可能地保证数列的数字尽可能多的同时 且 有一个数不同 这里介绍一个rorate函数&#xf…...

leetcode 300. Longest Increasing Subsequence

目录 题目描述 第一步,明确并理解dp数组及下标的含义 第二步,分析明确并理解递推公式 第三步,理解dp数组如何初始化 第四步,理解遍历顺序 代码 题目描述 这是动态规划解决子序列问题的例子。 第一步,明确并理解…...

解密大模型背后的秘密:训练、优化与挑战

解密大模型背后的秘密:训练、优化与挑战 在当今的人工智能领域,大模型(Large Language Models, LLMs)已经成为了一个不可忽视的存在。从自然语言处理到图像生成,再到推荐系统,大模型以其强大的泛化能力和创…...

第33讲|遥感大模型在地学分类中的初探与实战

目录 🧠 一、什么是“遥感大模型”? 📚 二、遥感大模型在地学分类中的优势 📍三、案例:使用 Segment Anything Model (SAM) 进行遥感地物分割 📦 1. 安装与依赖配置(PyTorch) 🖼 2. 读取遥感图像(可用 Sentinel-2 伪彩色图) 🔧 3. SAM 模型载入 💡 …...

LeetCode 438 找到字符串中所有字母异位词

给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词 的子串,返回这些子串的起始索引。不考虑答案输出的顺序。 示例 1: 输入: s "cbaebabacd", p "abc" 输出: [0,6] 解释: 起始索引等于 0 的子串是 "cba", 它是 "…...

【25软考网工笔记】第二章(6)脉冲编码调制PCM、通信和交换方式

目录 一、脉冲编码调制PCM 1. 脉冲编码调制的数字化过程 1)采样 2)量化 3)编码 2. PCM计算 3. 应用案例 1)例题1 2)例题1 3)例题3 知识小结 二、通信和交换方式 1.数据通信方式分类 1&#x…...

JSON学习笔记

文章目录 1. JSON是什么2. JSON的特点与结构3. JSON的使用4. JSON文件读取 1. JSON是什么 JSON(JavaScript Object Notation,JavaScript对象表示法)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和…...

高阶指南:动态定价下eBay利润率控制的4维财务模型

在eBay平台上,动态定价(Dynamic Pricing)早已不是新鲜概念。随着市场供需的瞬时波动、竞争产品的变化,以及跨境电商红海局势的加剧,卖家若想在残酷的价格战中保住利润、稳住运营基本盘,仅靠经验主义已经远远…...

【NLP 66、实践 ⑰ 基于Agent + Prompt Engineering文章阅读】

你用什么擦干我的眼泪 莎士比亚全集 工业纸巾 还是你同样泛红的眼睛 —— 4.19 一、⭐【核心函数】定义大模型调用函数 call_large_model prompt:用户传入的提示词(如 “请分析这篇作文的主题”),指导模型执行任务 client&…...

Keil MDK中禁用半主机(No Semihosting)

在 ARM 编译器(如 Keil MDK) 中禁用半主机(Semihosting)并实现标准库的基本功能,需要以下步骤: 1. 禁用半主机 #pragma import(__use_no_semihosting) // 禁用半主机模式作用:防止标准库函数&…...

QML中的3D功能--纹理应用

Qt 3D 提供了强大的纹理支持,可以实现各种复杂的材质效果。以下是 Qt 3D 纹理开发的全面技术方案。 一、纹理处理的流程图 纹理处理关键步骤说明: 资源准备阶段 支持格式:PNG/JPG/KTX/DDS等 尺寸要求:建议2的幂次方(非强制) 纹理加载路径 qml Texture2D {source: "…...

LeetCode[459]重复的子字符串(KMP解法)

思路: 最近迷上了KMP算法,所以这道题也是来搞一下KMP算法,总所周知KMP是需要维护一个前缀表,KMP算法不是比较一个字符串包不包含另一个字符串的吗,这个重复字符串的题也能用?猫爷:毋庸置疑&…...

数据驱动未来:大数据在智能网联汽车中的深度应用

数据驱动未来:大数据在智能网联汽车中的深度应用 引言 随着智能网联汽车(Intelligent Connected Vehicles,ICV)的快速发展,数据已成为其核心驱动力。从实时交通数据到车辆传感器信息,大数据的深度应用正在让智能汽车更安全、更高效、更智能化。那么,大数据如何赋能智能…...

基于MCP的RAG系统实战:用Cursor+GroundX构建复杂文档问答引擎

在AI与文档处理的融合趋势下,基于MCP协议的RAG(Retrieval-Augmented Generation)系统为复杂文档的智能问答提供了全新解决方案。本文将详细解析如何通过Cursor编辑器(MCP客户端)与GroundX(MCP服务器)的组合,构建一个可处理科研文献、企业知识库的端到端问答系统,并提供…...

DSA数据结构与算法 4

第2章 排序技术 2.1 排序简介 排序是将数据按照特定顺序(升序或降序)排列的过程,它不仅是计算机科学中的基础操作,也是日常生活中不可或缺的工具。举个例子,想象一个图书馆里的书籍,如果这些书籍没有按照作…...

23种设计模式全解析及其在自动驾驶开发中的应用

一、创建型模式(5种) 目标:解耦对象创建过程,提升系统灵活性 模式名称核心思想典型场景自动驾驶应用示例工厂方法子类决定实例化对象类型日志系统、数据库连接器创建激光雷达/摄像头等传感器实例抽象工厂创建相关对象家族GUI组件…...

基于WiFi的智能教室数据监测系统的设计与实现

标题:基于WiFi的智能教室数据监测系统的设计与实现 内容:1.摘要 随着教育信息化的发展,对教室环境及设备数据监测的智能化需求日益增长。本文的目的是设计并实现一种基于WiFi的智能教室数据监测系统。方法上,采用WiFi模块实现数据的无线传输&#xff0c…...

Linux操作系统--环境变量

目录 基本概念: 常见环境变量: 查看环境变量的方法: 测试PATH 测试HOME 和环境变量相关的命令 环境变量的组织方式:​编辑 通过代码如何获取环境变量 通过系统调用获取或设置环境变量 环境变量通常具有全局属性 基本概念…...

备份jenkins

jenkins用熟了很爽,jenkins用熟了很香,jenkins用熟了可以起飞…… 但~你们是否有过这种经历? 庚子年四月初一 路人甲小手一抖,不小心把配置删了,然后只能重新配置,再然后发现鬼记得太古时代都做了哪些配置…...

纯FPGA实现AD9361控制的思路和实现 UART实现AXI_MASTER

这里用一个串口接收PC机传过来的读写寄存器的控制指令,对地址地址的AXI_sLAVE进行读写后返回其结果。 串口收发器用的代码还是经典的FPGA4FUN上的。fpga4fun.com - Serial interface (RS-232) 我做了极小修改,直接贴出来代码: // RS-232 RX…...

计算机网络期中复习笔记(自用)

复习大纲 –第一章 概述 计算机网络的组成 网络边缘:主机和网络应用程序(又称为“端系统”) 端系统中运行的程序之间的通信方式可划分为两大类: 客户/服务器方式(C/S方式) 对等方式(P2P方式…...

MFC文件-屏幕录像

下载本文件 本文件将获取屏幕图像数据的所有代码整合到两个文件中(ScreenRecorder.h和ScreenRecorder.cpp),使获取屏幕图像数据变得简单。输出IYUV视频流。还可以获取系统播放的声音,输出PCM音频流。由于使用了MFC类,本…...

JAVA的泛型

为什么引入泛型 有两个作用: 适用于多种数据类型执行相同的代码(代码复用)泛型中的类型在使用时指定,不需要强制类型转换(类型安全,编译器会检查类型)消除强制类型转换兼容性与类型擦除更灵活…...

【UniApp】Vue2 scss 预编译器默认已由 node-sass 更换为 dart-sass

从 HBuilderX 4.56 ,vue2 项目也将默认使用 dart-sass 预编译器。 vue2开发者sass预处理注意: sass的预处理器,早年使用node-sass,也就是vue2最初默认的编译器。 sass官方推出了dart-sass来替代。node-sass已经停维很久了。 另…...

【sylar-webserver】8 HOOK模块

文章目录 知识点HOOK实现方式非侵入式hook侵入式hook ⭐⭐⭐ 覆盖系统调用接口获取被全局符号介入机制覆盖的系统调用接口 具体实现 在写之前模块的时候,我一直在困惑 协程是如何高效工作的,毕竟协程阻塞线程也就阻塞了。 HOOK模块解开了我的困惑。&…...

【今日三题】判断是不是平衡二叉树(递归) / 最大子矩阵(二维前缀和) / 小葱的01串(滑动窗口)

⭐️个人主页:小羊 ⭐️所属专栏:每日两三题 很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~ 目录 判断是不是平衡二叉树(递归)最大子矩阵(二维前缀和)小葱的01串(滑动窗口) 判断是不是平衡二叉树(递归) 判断是不是平衡二叉…...

交易系统的构建与实战法则

Ⅰ 交易哲学:理解市场本质 时间的艺术:鳄鱼法则的启示80%的交易时间应用于观察和等待日均有效交易机会不超过3次(以A股为例)杰西利弗莫尔的棉花合约案例(1907年等待11周)波动率与交易频率的黄金分割比例Ⅱ 形态识别系统:双轨交易模型 A. 趋势引擎 三级趋势验证体系: 均…...

C++高并发内存池ConcurrenMemoPool

一、介绍高并发内存池 本项目的原型是Google的开源项目tcmalloc,即线程缓存的malloc,相较于系统的内存分配函数malloc,free,本项目能达到高效的多线程内存管理 旨在学习其核心框架,借鉴其实现方式来模拟实现出一个我们…...

ubuntu下gcc/g++安装及不同版本切换

1. 查看当前gcc版本 $ gcc --version# 查看当前系统中已安装版本 $ ls /usr/bin/gcc*2. 安装新版本gcc $ sudo apt-get update# 这里以版本12为依据(也可以通过源码方式安装,请自行Google!) $ sudo apt-get install -y gcc-12 g…...

React-在使用map循环数组渲染列表时须指定唯一且稳定值的key

在渲染列表的时候,我们须给组件或者元素分配一个唯一值的key, key是一个特殊的属性,不会最终加在元素上面,也无法通过props.key来获取,仅在react内部使用。react中的key本质是服务于diff算法, 它的默认值是null, 在diff算法过程中…...

(03)Vue的常用指令

文章目录 第3章 Vue的常用指令3.1 v-text与v-html3.2 v-for3.3 v-if与v-show3.4 MVVM双向绑定3.4.1 v-bind3.4.2 v-model 第3章 Vue的常用指令 3.1 v-text与v-html v-text&#xff1a;不会渲染字符串里面的HTML内容v-html&#xff1a;会渲染字符串里面的HTML内容 <body s…...

从代码学习深度学习 - 优化算法 PyTorch 版

文章目录 前言一、小批量梯度下降(Mini-batch Gradient Descent)1.1 公式1.2 PyTorch 实现二、动量法(Momentum)2.1 公式2.2 PyTorch 实现三、AdaGrad 算法3.1 公式3.2 PyTorch 实现四、RMSProp 算法4.1 公式4.2 PyTorch 实现五、Adadelta 算法5.1 公式5.2 PyTorch 实现六、…...

JAVA设计模式——(1)适配器模式

JAVA设计模式——&#xff08;1&#xff09;适配器模式 目的理解实现优势 目的 将一个类的接口变换成客户端所期待的另一种接口&#xff0c;从而使原本因接口不匹配而无法一起工作的两个类能够在一起工作。 理解 可以想象成一个国标的插头&#xff0c;结果插座是德标的&…...

深入Docker核心技术:从Namespace到容器逃逸防御

深入Docker核心技术&#xff1a;从Namespace到容器逃逸防御 引言&#xff1a;容器技术的本质突破 Docker作为容器技术的代表&#xff0c;其革命性不仅在于轻量级虚拟化&#xff0c;更在于重新定义了应用交付的标准范式。本文将穿透表象&#xff0c;深入剖析Docker的核心技术实…...

面向对象设计中的类的分类:实体类、控制类和边界类

目录 前言1. 实体类&#xff08;Entity Class&#xff09;1.1 定义和作用1.2 实体类的特点1.3 实体类的示例 2. 控制类&#xff08;Control Class&#xff09;2.1 定义和作用2.2 控制类的特点2.3 控制类的示例 3. 边界类&#xff08;Boundary Class&#xff09;3.1 定义和作用3…...

【MySQL】004.MySQL数据类型

文章目录 1. 数据类型分类2. 数值类型2.1 tinyint类型2.2 bit类型2.3 小数类型2.3.1 float2.3.2 decimal 2.4 字符串类型2.4.1 char2.4.2 varchar2.4.3 char和varchar比较 2.5 日期和时间类型2.6 enum和set2.7 enum和set类型查找 1. 数据类型分类 2. 数值类型 2.1 tinyint类型 …...

使用docker在manjaro linux系统上运行windows和ubuntu

因为最近项目必须要使用指定版本的solidworks和maxwell&#xff08;都只能在win系统上使用&#xff09;, 且目前的ubuntu容器是没有桌面的&#xff0c;导致我运行不了一些带图形的ros2功能。无奈之下&#xff0c;决定使用docker-compose写一下配置文件&#xff0c;彻底解决问题…...