当前位置:   article > 正文

speechbrain使用hyperpyyaml库的注意事项

hyperpyyaml

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

一 、 !new

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

  1. import torch
  2. from hyperpyyaml import load_hyperpyyaml
  3. yaml_string = """
  4. enc_lin: !new:speechbrain.nnet.linear.Linear
  5. input_size: 128
  6. n_neurons: 256
  7. bias: False
  8. """
  9. loaded_yaml = load_hyperpyyaml(yaml_string)
  10. model = loaded_yaml["enc_lin"]
  11. x = torch.rand(([8, 200, 128]))
  12. y = model(x)
  13. print(y.shape)
  14. result:
  15. (8,200,256)

相当于在程序中创建

  1. model = speechbrain.nnet.linear.Linear(
  2. input_size=128,
  3. n_neurons=256,
  4. bias=False
  5. )

效果是相同的。

二、!name

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

第一种:

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

  1. yaml_string = """
  2. activation: !name:torch.nn.LeakyReLU
  3. enc: !new:speechbrain.lobes.models.CRDNN.CRDNN
  4. activation: !ref <activation>
  5. """
'
运行

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

第二种:

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

  1. yaml_string="""
  2. compute_cost: !name:speechbrain.nnet.losses.transducer_loss
  3. use_torchaudio: True
  4. blank_index: !ref <blank_index>
  5. """
  6. """
  7. def transducer_loss(
  8. log_probs,
  9. blank_index,
  10. reduction="mean",
  11. use_torchaudio=True,
  12. ):
  13. pass
  14. """
  15. hparams = load_hyperpyyaml(yaml_string)
  16. log_probs = torch.rand((8, 200, 16))
  17. hparams["compute_cost"](log_probs)

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/秋刀鱼在做梦/article/detail/906836
推荐阅读
相关标签
  

闽ICP备14008679号