模型调试过程中遇到的小错误
由于早先急着把模型跑出来,所以就没有细细看每个代码,现在要仔细看代码了,遇到了一些错误,进行一些简单的记录。第一个错误是自己搜到的解决方法,第二和第三个是通过向Y老师求助得到的解决的。
论文题目:A proposal for Multimodal Emotion Recognition using aural transformers and Action Units on RAVDESS dataset
错误1:早先没有 apex
这个库,后面使用了 pip
对其进行安装了,可是还是不可以使用,于是就放弃了。
解决方案:不能直接使用 pip
对其直接进行安装,详细的解决办法请看链接内容。
在 CSDN 上的某篇博客上解决了这个问题,很感谢这位博客大佬,在此附上这篇博客的连接,
解决python中的apex库安装方法
错误2描述:
AssertionError: Attempted unscale_ but _scale is None. This may indicate your script did not use scaler.scale(loss or outputs) earlier in the iteration.(如下图所示)
解决方案:经过Y老师一番查探,找到了错误的地方。先找到 main_FineTuneWav2Vec_CV.py 这个 python 文件,将其半精度改为 false (下图所示)。
错误3:新版本的 transformer
中的 Train
类没有 self.use_amp
这个变量,使用 self.use_amp
就会报错,如下图所示。
解决方案:要是想要使用这个变量的那个类中加入这个变量,在继承的类中往父类中添加一个变量,详细的原理请自行百度。(可以理解为:在对父类继承的时候,需要对父类进行改写。)
在此,简单记录一下我学到的一个小知识的用法。下面简单讲解一下 *args
和 **args
的用法
(部分内容参考博客:*args和**args的详细用法)
*args
和 **args
主要用于函数定义。
*args
:用来发送一个非键值对的可变数量的参数列表给一个函数。当传入的参数个数未知时,且不需要知道参数名称。
**args
:允许将不定长度的键值对作为参数传递给一个函数,传入的时键值对(eg. a=1,b=2。这种)
*args
和 **args
的区别:
*args
保存多余变量(没有变量名的值),保存方式是元组(tuple)
**args
保存带有变量名的多余变量,保存方式是字典(dict)