Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
与Keras和LSTM/GRU单元一起使用辍学_Keras_Lstm_Dropout - Fatal编程技术网

与Keras和LSTM/GRU单元一起使用辍学

与Keras和LSTM/GRU单元一起使用辍学,keras,lstm,dropout,Keras,Lstm,Dropout,在Keras中,您可以像这样指定一个退出层: model.add(辍学(0.5)) 但是,对于GRU单元,您可以在构造函数中将辍学指定为参数: model.add(GRU(单位=512, return_sequences=True, 辍学率=0.5, 输入形状=(无,特征大小) 有什么区别?一个比另一个好吗 在其中,它将其添加为一个单独的退出层(请参见“使用LSTM进行序列分类”)重复层反复执行相同的重复操作 在每个时间步中,它需要两个输入: 您的输入(序列的一个步骤) 内部输入(例如,可

在Keras中,您可以像这样指定一个退出层:

model.add(辍学(0.5))
但是,对于GRU单元,您可以在构造函数中将辍学指定为参数:

model.add(GRU(单位=512,
return_sequences=True,
辍学率=0.5,
输入形状=(无,特征大小)
有什么区别?一个比另一个好吗


在其中,它将其添加为一个单独的退出层(请参见“使用LSTM进行序列分类”)

重复层反复执行相同的重复操作

在每个时间步中,它需要两个输入:

  • 您的输入(序列的一个步骤)
  • 内部输入(例如,可以是前一步的状态和输出)
请注意,输入和输出的维度可能不匹配,这意味着“您的输入”维度将与“重复输入(上一步/状态)”维度不匹配

然后,在每个循环时间步中,有两个具有两个不同内核的操作:

  • 一个内核应用于“您的输入”,以在兼容维度中处理和转换它
  • 另一个(keras称为递归内核)应用于前一步的输入
因此,keras还在重复层中使用两个退出操作。(将应用于每个步骤的退出)

  • 第一次转换输入时的辍学
  • 递归核应用中的一个辍学
因此,实际上RNN层中有两个退出参数:

  • 退出
    ,应用于输入的第一次操作
  • 经常性_辍学
    ,应用于经常性输入的其他操作(以前的输出和/或状态)
您可以在中的
GRUCell
LSTMCell
中看到此描述


什么是正确的

这对创造力是开放的

您可以使用
退出(…)
层,这不是“错误”,但它也可能会删除“timesteps”!(除非您正确设置了
噪波_形
,或使用了
空间衰减1d
,目前尚未记录该值)

也许你想要,也许你不想要。如果使用重复层中的参数,则将仅对其他尺寸标注应用辍学,而不会删除单个步骤。这对于重复出现的层来说似乎是健康的,除非您希望您的网络学习如何处理包含间隙的序列(最后一句是补充)


此外,使用dropout参数,您将真正删除内核的一部分,因为操作“在每一步”都会被删除,而使用单独的层将让您的RNN在内部执行未删除的操作,因为您的dropout只会影响最终的输出

谢谢Daniel,你对辍学的解释与这里给出的答案是一致的:是的,显然,设置单元格构造函数意味着我也可以指定反复辍学,所以我想我会将其设置为构造函数的一部分。另外一个问题;有人假设,当我开始做评估和预测时,Keras会自动将辍学概率设置为零?我以前用TensorFlow编码,需要自己指定,但我假设Keras会为我这样做…?是的,Keras在其代码中的某个地方使用了一个条件
K。在训练阶段(表达式表示训练,表达式表示非训练)
。辍学只适用于培训阶段。请参阅Brilliant,非常感谢您的帮助Daniel,非常感谢。如果您将辍学()用于RNN/LSTM/GRU后面的
return\u sequences=True
和新的RNN/LSTM/etc.层之前,这与设置下一层的辍学相同。对的