keras - 如何将 keras TimeSeriesGenerator 与 shuffle=True 一起使用?
问题描述
带有 shuffle=True 的 keras TimeseriesGenerator 提供一个随机标签,而不是与生成的时间序列匹配的标签。我想知道如何使用 TimeseriesGenerator 以便它生成标签与时间序列匹配的打乱批次。
例子:
# imports
from tensorflow.keras.preprocessing.sequence import TimeseriesGenerator
import pandas as pd
# prepare data
df2 = pd.DataFrame([[1,1,1,1,1],
[2,2,2,2,2],
[3,3,3,3,3],
[4,4,4,4,4],
[5,5,5,5,5]])
df2.columns=['f1','f2','f3','l1','l2']
X2 = df2.iloc[:,0:3] #
y2 = df2.iloc[:,3:]
x2:
f1 f2 f3
0 1 1 1
1 2 2 2
2 3 3 3
3 4 4 4
4 5 5 5
y2:
l1 l2
0 1 1
1 2 2
2 3 3
3 4 4
4 5 5
TimeseriesGenerator with shuffle=False:
data_gen2 = TimeseriesGenerator(X2.to_numpy(), y2.to_numpy(),
length=2, sampling_rate=1,stride=1,
batch_size=5,shuffle=False)
print('x values: data_gen2[0][0]:',data_gen2[0][0].shape)
print(data_gen2[0][0])
print('y values: data_gen2[0][1]:',data_gen2[0][1].shape)
print(data_gen2[0][1])
...产生:
x values: data_gen2[0][0]: (3, 2, 3)
[[[1 1 1]
[2 2 2]]
[[2 2 2]
[3 3 3]]
[[3 3 3]
[4 4 4]]]
y values: data_gen2[0][1]: (3, 2)
[[3 3]
[4 4]
[5 5]]
这是完美的。然而,使用 shuffle=True,我们得到:
x values: data_gen2[0][0]: (5, 2, 3)
[[[1 1 1]
[2 2 2]]
[[3 3 3]
[4 4 4]]
[[1 1 1]
[2 2 2]]
[[3 3 3]
[4 4 4]]
[[3 3 3]
[4 4 4]]]
y values: data_gen2[0][1]: (5, 2)
[[5 5]
[3 3]
[5 5]
[3 3]
[3 3]]
虽然 X2 正确打乱(即从不同起点开始的各种时间序列),但 y2 与 X2 的时间序列不匹配。
我在这里误解了什么吗?
解决方案
好的。解决了:
调用的问题:
data_gen2[0][0]
data_gen2[0][1]
...是这会更新生成器提供的数据两次。所以对 gen2[0][1] 的调用实际上更新了 gen2 中的数据并将目标返回到完全不同的一批样本。
为了更正,我们需要完整地收集 gen2[0],然后将元组拆分为 x 和 y:
x3,y3 = data_gen2[0]
print(x3)
print(y3)
现在,目标与样本匹配:
[[[2 2 2]
[3 3 3]]
[[3 3 3]
[4 4 4]]
[[2 2 2]
[3 3 3]]
[[2 2 2]
[3 3 3]]
[[1 1 1]
[2 2 2]]]
[[4 4]
[5 5]
[4 4]
[4 4]
[3 3]]
推荐阅读
- spring - Prometheus - prometheus.yml 无效目标
- javascript - javascript按钮头或尾没有给出正确的输出
- python - 如何降低透明度以在 Pillow 中排列?
- javascript - 随机化wordset javascript数组
- github - 使用不同版本(分支或提交)的 github 操作
- python - SDN Ryu 控制器向 AP 发送消息
- python - 如何将python中的列中的数组与json分开
- spring-kafka - Spring Kafka RetryableTopic 多次尝试
- c - 使用 gcc 链接将文件大小增加到 16 KB
- excel - 当某些值是随机的时,宏无法分离序列