如何在shuffle=True的情况下使用keras TimeSeriesGenerator?
shuffle=True的keras TimeseriesGenerator提供了一个随机标签,而不是与生成的时间序列匹配的标签。我想知道如何使用TimeseriesGenerator来生成标签与timeseries匹配的无序批 例如:如何在shuffle=True的情况下使用keras TimeSeriesGenerator?,keras,generator,Keras,Generator,shuffle=True的keras TimeseriesGenerator提供了一个随机标签,而不是与生成的时间序列匹配的标签。我想知道如何使用TimeseriesGenerator来生成标签与timeseries匹配的无序批 例如: # imports from tensorflow.keras.preprocessing.sequence import TimeseriesGenerator import pandas as pd # prepare data df2 = pd.Data
# 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:
y2:
随机播放的TimeseriesGenerator=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]]
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]]