speechbrain使用hyperpyyaml库的注意事项

这篇博客翻译了speechbrain中关于hyperpyyaml中的官方帮助文档。大部分能理解,但是关于!new和!name的翻译解释不够清楚。

一 、 !new

!new是为了在加载yaml文件时,就创建文件中指定类的对象。比如

import torch
from hyperpyyaml import load_hyperpyyaml

yaml_string = """
enc_lin: !new:speechbrain.nnet.linear.Linear
    input_size: 128
    n_neurons: 256
    bias: False
"""
loaded_yaml = load_hyperpyyaml(yaml_string)
model = loaded_yaml["enc_lin"]

x = torch.rand(([8, 200, 128]))
y = model(x)
print(y.shape)
result:
(8,200,256)

相当于在程序中创建

model = speechbrain.nnet.linear.Linear(
    input_size=128,
    n_neurons=256,
    bias=False
)

效果是相同的。

二、!name

!name一般使用在以下两种情况下:

第一种:

!new相反,倘若不需要在加载文件时,自动创建对象,则使用!name,比如以下情况

yaml_string = """
activation: !name:torch.nn.LeakyReLU

enc: !new:speechbrain.lobes.models.CRDNN.CRDNN
    activation: !ref <activation>
"""

激活函数activation不需要在加载文件时创建,因为在模型enc中,会对这个激活函数activation类进行创建对象。

第二种:

只是对一些普通函数的使用,比如

yaml_string="""
compute_cost: !name:speechbrain.nnet.losses.transducer_loss
    use_torchaudio: True
    blank_index: !ref <blank_index>
"""

"""
def transducer_loss(
    log_probs,
    blank_index,
    reduction="mean",
    use_torchaudio=True,
):
    pass
"""


hparams = load_hyperpyyaml(yaml_string)
log_probs = torch.rand((8, 200, 16))

hparams["compute_cost"](log_probs)

transducer_loss只是由def定义的普通函数,不需要其他多余的操作,加载完毕后,直接使用即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值