Ale*_*rov 2 stateful lstm keras
是否有详细解释TimeDistributed,stateful和return_sequences如何工作?在这两种情况下我都要设置shuffle = False吗?它是否适用于窗户(1-11,2-12,3-13等)或是否应批量使用(1-11,12-22,13-33等)
我对LSTM图层特别感兴趣.
Dan*_*ler 15
这不会影响图层的工作方式.这样做的目的是增加一个"时间"(也可能不是时间)维度.考虑到该时间维度,将包裹的层应用于输入张量的每个切片.
例如,如果一个图层期望具有3个维度的输入形状(batch, length, features),那么使用TimeDistributed包装器将使其期望4个维度:(batch, timeDimension, length, features)
然后,该层将被"复制"并同等地应用于时间维度中的每个元素.
使用LSTM层,它的工作原理相同.虽然LSTM层已经在其输入形状中预期了时间维度:(batch, timeSteps, features),您可以使用它TimeDistributed来添加另一个"时间"维度(这可能意味着任何事情,而不是确切时间),并使此LSTM层可以重新用于此新元素中的每个元素时间维度.
LSTM - 期待投入 (batch, timeSteps, features) TimeDistributed(LSTM()) - 期待投入 (batch, superSteps, timeSteps, features) 在任何情况下,LSTM遗嘱实际上只会在timeSteps维度中执行其重复计算.另一个时间维度只是多次复制该图层.
TimeDistributed + Dense:
该Dense层(可能还有其他一些)已经支持3D输入,尽管标准是2D : (batch, inputFeatures).
使用TimeDistributed或不使用Dense图层是可选的,结果是相同的:如果您的数据是3D,则将为第二维重复Dense图层.
这在文档中有很好的解释.
对于循环图层,keras将使用timeSteps维度来执行其重复执行的步骤.对于每个步骤,它自然会有一个输出.
您可以选择获取所有步骤(return_sequences=True)的输出或仅获取最后一个输出(return_sequences=False)
考虑输入形状(batch, timeSteps, inputFeatures)和带有outputFeatures单位的图层:
return_sequences=True,输出形状为(batch, timeSteps, outputFeatures) return_sequences=False,输出形状为(batch, outputFeatures) 在任何情况下,如果使用TimeDistributed包装器,则superSteps维度将在输入和输出中保持不变.
通常,如果您可以将所有序列的所有步骤放在输入数组中,那么一切都很好,您不需要stateful=True图层.
Keras为批次中的每个序列创建"状态".批量维度等于序列数.当keras完成处理批处理时,它会自动重置状态,这意味着:我们到达序列的结尾(最后一步),从第一步开始带来新的序列.
使用时stateful=True,这些状态不会被重置.这意味着将另一批次发送到模型不会被解释为一组新的序列,而是之前处理的序列的附加步骤.然后,您必须model.reset_states()手动告诉模型您已到达序列的最后一步,或者您将开始新的序列.
唯一需要的shuffle=False是这种stateful=True情况.因为对于每个批次,输入许多序列.在每个批次中,这些序列必须保持相同的顺序,以便每个序列的状态不会混合.
有状态层适用于:
到目前为止,我可以使用Windows的唯一方法是复制数据.
输入数组应该在窗口中组织.每个窗口步骤一个序列.TimeDistributed如果要将所有窗口步骤保持为单个批处理条目,则可以选择利用包装器.但是你也可以将所有步骤都作为单独的序列.
stateful=True由于状态,该图层不能与窗口一起使用.如果您批量输入1到12的步骤,则下一批将期望步骤13作为保持连接的第一步.
| 归档时间: |
|
| 查看次数: |
3491 次 |
| 最近记录: |