keras mask流程,base_layer.py看Layer的实现__call__函数:
上一层的mask传递到下一层的过程
1.support_masking=True
当前层的support_masking=True,则说明当前层支持mask。
1)调用_collect_previous_mask(inputs)查看输入的mask(即上一层的mask)
2)mask作为参数传入call函数
3)计算输入的mask,mask为previou_mask
注:Dense支持mask,但只传递,并不利用mask计算,可以在call函数中定义操作。Dense有bias,还是会有影响。
2.support_masking=False
1)调用_collect_previous_mask(inputs)查看输入的mask(即上一层的mask)
2)mask作为参数传入call函数
3)计算输入的mask:如果previous_mask为None,则输出None;如果previous_mask不为None,则报错:does not support masking, but was passed an input_mask
注:Conv1d不支持Mask,执行过程中也没有使用Mask,可以实例后将support_masking置为True,起到传递Mask的作用。
对应的函数的定义内容
def call(self,inputs,mask=None,**kwargs):
这里的mask不需要特定的传入什么参数,它会自动地调用上一层的mask对应内容