YAML YAML Ain’t a Markup Language
Yet Another Markup Language
YAML是”YAML Ain’t a Markup Language”(YAML不是一种标记语言)的递归缩写。在开发的这种语言时,YAML的意思其实是:”Yet Another Markup Language”(仍是一种标记语言),但为了强调这种语言以数据为中心,而不是以标记语言为重点,而用反向缩略语重命名。YAML (wikipedia.org)
YAML特点是使用空格来表达层次结构,特别适合用来表达或编辑数据结构 、各种配置文件 ,其文件一般以 .yaml
为后缀。
基本语法
以 k: v
的形式来表示键值对的关系
只支持单行注释,注释符号:#
大小写敏感
通过缩进来表示层级关系
缩排中空格的数目不重要,只要相同阶层的元素左侧对齐就可以了
缩进只能使用空格,不能使用 tab
缩进
字符串可以不用双引号
一个文件中可以包含多个文件的内容
用---
即三个破折号 表示一份内容的开始
用...
即三个小数点 表示一份内容的结束 (非必需)
数据结构与类型 对象 以键值对 key: value
形式组织数据
1. 使用**冒号+空格**来分开键与值
1. 支持多层嵌套(**用缩进表示层级关系**)
1 2 3 4 5 6 7 8 9 10 11 12 model: base_learning_rate: 4.5e-6 target: ldm.models.autoencoder.AutoencoderKL params: monitor: "val/rec_loss" embed_dim: 64 lossconfig: target: ldm.modules.losses.LPIPSWithDiscriminator params: disc_start: 50001 kl_weight: 0.000001 disc_weight: 0.5
支持流式风格(Flow style) 的语法:用花括号包裹,用逗号加空格分隔
1 key: {child-key1: value1 , child-key2: value2 }
数组
一组以区块格式 (“破折号+空格”)开头的数据组成一个数组
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 unet_config: target: ldm.modules.diffusionmodules.openaimodel.UNetModel params: image_size: 64 in_channels: 3 out_channels: 3 model_channels: 224 attention_resolutions: - 8 - 4 - 2 num_res_blocks: 2 channel_mult: - 1 - 2 - 3 - 4 num_head_channels: 32
也支持内联格式 来表达(用方括号包裹,逗号加空格分隔)
1 2 3 4 5 6 7 8 9 10 11 ddconfig: double_z: True z_channels: 64 resolution: 256 in_channels: 3 out_ch: 3 ch: 128 ch_mult: [1 , 1 , 2 , 2 , 4 , 4 ] num_res_blocks: 2 attn_resolutions: [16 , 8 ] dropout: 0.0
支持多维数组(用缩进表示层级关系 )
1 2 3 4 5 6 7 values: - - 1 - 2 - - 3 - 4 values: [[1 , 2 ], [3 , 4 ]]
字符串
字符串一般不需要用引号包裹
字符串换行视为一个空格
单引号可以屏蔽转义
字符串中需要使用转义字符\
就必须使用双引号包裹
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 strings: - Hello world - Hello world - '字符串\n换行\n演示' - "字符串\n换行\n演示" - Hello world - Hello world - 字符串\n换行\n演示 - '字符串 换行 演示'
保留换行:使用竖线符“ | ” 来表示该语法,每行的缩进和行尾空白都会被去掉,而额外的缩进会被保留
1 2 3 4 5 6 7 8 9 lines: | 我是第一行 我是第二行 我是吴彦祖 我是第四行 我是第五行 "我是第一行\n我是第二行\n 我是吴彦祖\n 我是第四行\n我是第五行\n"
折叠换行:使用右尖括号“ > ” 来表示该语法,只有空白行才会被识别为换行,原来的换行符都会被转换成空格
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 lines: > 我是第一行 我也是第一行 我仍是第一行 我依旧是第一行 我是第二行 这么巧我也是第二行 lines2: '我是第一行 我也是第一行 我仍是第一行 我依旧是第一行 我是第二行 这么巧我也是第二行 '
布尔值
“true”、“True”、“TRUE”、“yes”、“Yes”和“YES”皆为真
“false”、“False”、“FALSE”、“no”、“No”和“NO”皆为假
整数
1 2 3 4 5 6 7 int: - 666 - 0001_0000 int: - 666 - 4096
浮点数
1 2 3 4 5 6 7 float: - 3.14 - 6.8523015e+5 float: - 3.14 - 685230.15
空 Null null
、Null
、~
和不指定值都表示空
1 2 3 4 5 6 7 8 9 10 11 nulls: - null - Null - ~ - nulls: - null - null - null - null
强制类型转换 双感叹号+目标类型 来强制转换类型
1 2 3 4 5 6 7 8 9 10 11 12 13 14 a: !!float '666' b: !!int '666' c: !!str 666 d: !!str 666.66 e: !!str true f: !!bool 'yes' a: 666.0 b: 666 c: '666' d: '666.66' e: 'true' f: true
数据复用与合并 数据复用 在key的冒号后,使用锚点符号 &
设定锚点,使用引用符号 *
引用锚点
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 model: &all_parm base_learning_rate: 2.0e-06 target: ldm.models.diffusion.ddpm.LatentDiffusion params: &model_parm linear_start: 0.0015 linear_end: 0.0195 num_timesteps_cond: 1 log_every_t: 200 timesteps: 1000 first_stage_key: image image_size: 64 channels: 3 monitor: val/loss_simple_ema new_model: *all_parm new_params: *model_parm new_model: base_learning_rate: 2.0e-06 target: ldm.models.diffusion.ddpm.LatentDiffusion params: linear_start: 0.0015 linear_end: 0.0195 num_timesteps_cond: 1 log_every_t: 200 timesteps: 1000 first_stage_key: image image_size: 64 channels: 3 monitor: val/loss_simple_ema new_params: linear_start: 0.0015 linear_end: 0.0195 num_timesteps_cond: 1 log_every_t: 200 timesteps: 1000 first_stage_key: image image_size: 64 channels: 3 monitor: val/loss_simple_ema
数据合并 合并标签符号“<<” 配合锚点符号和引用符号使用可以与任意数据进行合并,可以视为面向对象中的继承
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 model_location: &loc target: ldm.models.diffusion.ddpm.LatentDiffusion model_params: ¶ms params: linear_start: 0.0015 linear_end: 0.0195 num_timesteps_cond: 1 log_every_t: 200 timesteps: 1000 first_stage_key: image image_size: 64 channels: 3 monitor: val/loss_simple_ema new_model: base_learning_rate: 2.0e-06 <<: *loc <<: *params new_model: target: ldm.models.diffusion.ddpm.LatentDiffusion params: linear_start: 0.0015 linear_end: 0.0195 num_timesteps_cond: 1 log_every_t: 200 timesteps: 1000 first_stage_key: image image_size: 64 channels: 3 monitor: val/loss_simple_ema base_learning_rate: 2.0e-06
参考 一文看懂 YAML - 知乎 (zhihu.com)