SpatialDropout1D() 对 Keras 中 Embedding() 的输出有什么作用?

数据挖掘 深度学习 喀拉斯 张量流 lstm 辍学
2021-09-14 23:34:22

Keras 模型看起来像这样

inp = Input(shape=(maxlen, ))
x = Embedding(max_features, embed_size, weights=[embedding_matrix], trainable=False)(inp)
x = SpatialDropout1D(dropout)(x)
x = Bidirectional(LSTM(num_filters, return_sequences=True))(x)
max_pool = GlobalMaxPooling1D()(x)
x = concatenate([x_h, max_pool])
outp = Dense(6, activation="sigmoid")(x)

根据文档,输出形状=输入形状,即(样本、时间步长、通道)

问题

  1. SpatialDropout1D() 对 Embedding() 的输出真正做了什么?我知道 LSTM Embedding 的输出是维度(batch_size、steps、features)。
  2. SpatialDropout1D() 是否只是将每个单词的一些单词嵌入值随机替换为 0?
  3. SpatialDropout1D() 与 Keras 中的 Dropout() 有何不同?
1个回答

基本上,它会从所有通道中删除一行中的所有像素。例如: take [[1,1,1], [2,4,5]],在 2 个通道中有 3 个点的值,通过 SpatialDropout1D 将整行归零,即一个点的所有属性都设置为 0;喜欢[[1,1,0], [2,4,0]]

这种选择的数量将是 3C0 + 3C1+ 3C2 + 3C3 = 8

这背后的直觉是,在许多情况下,相邻像素是相关的,因此隐藏其中一个并没有多大帮助,而是隐藏整行,这必须有所作为。参考资料