对于深度学习的coder来说,首先需要选择一个合适的深度学习框架,之前一直用的tensorflow,偶尔会用下keras和pytorch,在tf2.0推出之后集成了keras的api,因此打算记录一些keras框架中可能会遇到的一些坑。
1、RNN的stateful
对于RNN结构的网络有一个参数stateful
,如果设置为True
则每个batch_size的最后一个时刻的隐藏状态会被保存下来,作为新的batch的第一个时刻的隐藏状态的初始值。
2、MASK层
对于序列模型来说,输入通常都是不确定长度的,因此会采用补0或者截取的方式,把输入数据处理成统一长度再送入模型,在tf中,即使被处理为0的部分依旧会进行计算,而在keras中,有一个Masking层,该层会对为0的位置的值不做任何计算,因此其计算效率也会高一些。
但是Masking层也有一个巨坑,对于模型的其他layer,必须保证其支持mask操作,不然会抛出一个异常。
3、DropOut与SpatialDropoutXD区别
DropOut会对所有数据进行随机dropout,SpatialDropoutXD是对某个具体的维度进行dropout。
4、class_weight与sample_weight
- class_weight 是对loss的权重进行设置,当数据不平衡的时候可设置该参数,传入的是一个字典。例如{0:1,1:50}表明0类别的loss权重是1,1类别的loss权重是50
- sample_weight 是对输入数据进行加权,某些输入数据可能存在一定的不可信,则可以对这部分可信度低的数据进行加权,长度和输入数据长度需要保持一致。
持续更新中…