gpt4 book ai didi

keras - keras 中二维元素的填充序列

转载 作者:行者123 更新时间:2023-12-04 01:43:12 26 4
gpt4 key购买 nike

我有一组样本,每个样本都是一组属性的序列(例如,一个样本可以包含 10 个序列,每个序列具有 5 个属性)。属性的数量总是固定的,但序列的数量(时间戳)可能因样本而异。我想使用这个样本集在 Keras 中训练 LSTM 网络来解决分类问题,因此我应该将所有批次样本的输入大小填充为相同。但是pad_sequences keras 中的处理器获取固定数量的具有可变属性的序列并填充每个序列中缺失的属性,而我需要为每个样本添加更多具有固定属性长度的序列。所以我想我不能使用它,因此我单独填充了我的样本并制作了一个统一的数据集,然后用它来馈送我的网络。但是 Keras 函数有没有捷径可以做到这一点?

我还听说过在学习期间屏蔽填充的输入数据,但我不确定我是否真的需要它,因为我的分类器在处理整个样本序列后分配了一个类标签。我需要吗?如果是的话,你能帮我举一个简单的例子来说明如何做到这一点吗?

最佳答案

不幸的是,documentation相当误导,但 pad_sequences做你想要的。例如,这段代码

length3 = np.random.uniform(0, 1, size=(3,2))
length4 = np.random.uniform(0, 1, size=(4,2))
pad_sequences([length3, length4], dtype='float32', padding='post')

结果是
[[[0.0385175  0.4333343 ]
[0.332416 0.16542904]
[0.69798684 0.45242336]
[0. 0. ]]

[[0.6518417 0.87938637]
[0.1491589 0.44784057]
[0.27607143 0.02688376]
[0.34607577 0.3605469 ]]]

因此,这里我们有两个不同长度的序列,每个时间步长都有两个特征,结果是一个 numpy 数组,其中两个序列中较短的一个填充了零。

关于您的另一个问题:根据我的经验,屏蔽是一个棘手的话题。但是 LSTM 应该没问题。只需使用 Masking() 作为您的第一个图层。默认情况下,它会使 LSTM 忽略所有零,因此在您的情况下正是您通过填充添加的那些。但是您可以使用任何值进行掩码,就像您可以使用任何值进行填充一样。如果可能,请选择一个不会出现在您的数据集中的值。

如果您不使用掩码,则会产生这样的危险,即您的 LSTM 了解到填充值确实具有某些意义,而实际上它们没有。

例如,如果在训练期间您输入序列
[[1,2],
[2,1],
[0,0],
[0,0],
[0,0]]

后来在训练有素的网络上,你只输入
[[1,2],
[2,1]]

你可能会得到意想不到的结果(虽然不一定)。屏蔽通过从训练中排除屏蔽值来避免这种情况。

关于keras - keras 中二维元素的填充序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56533868/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com