繁体   English   中英

Keras 中 Conv1D 的输入层

[英]Input Layer for Conv1D in Keras

让我稍微解释一下我的问题和数据集。 在我的数据集中,我每小时测量一个变量x和另外 7 列代表该测量被视为虚拟变量的星期几。 所以,它是这样的:

DateTime          x   Mon Tue Wed Thur Fri Sat Sun
2017/01/01 00:00  10   0   0   0   0    0   0   1
2017/01/01 01:00  15   0   0   0   0    0   0   1
2017/01/01 02:00  21   0   0   0   0    0   0   1
             ...
2017/01/01 23:00  32   0   0   0   0    0   0   1
2017/01/02 00:00  17   1   0   0   0    0   0   0
2017/01/02 01:00  19   1   0   0   0    0   0   0
2017/01/02 02:00  48   0   0   0   0    0   0   1
             ...
2022/08/15 00:00  43   0   0   0   0    0   0   1

该数据集的形状为(49249, 8)

我使用 2017~2021 年的数据进行训练,只有 2022 年用于测试。

使用两天的数据( 48 rows ),我需要在第二天预测x 在将此数据集更改为看起来像监督学习后,我得到了一个形状为(1842, 55)的新训练数据集。 55是因为我使用了两天的数据( 24+24 )加上代表我要进行预测的那一天的虚拟变量( 7变量) 24+24+7 = 55

现在,根据Keras 文档InputShape层的Conv1D应该具有(batch_size, steps, input_dim)的形状。

所以我做了以下事情:

max_batch_size = 1824
steps = 48
input_dim = 55

所以,我试图重塑它:

dataset = dataset.reshape(max_batch_size, steps, input_dim)

我得到了这个错误:

ValueError: cannot reshape array of size 100320 into shape (1824,48,55)

我知道这已经被问了很多,但我仍然不明白,我在这里看到的答案都没有对我有用。 我应该如何设置我的InputLayer以与Conv1D层一起使用?

在这种情况下,您正在尝试解决序列问题,所以如果我做到了,您只需要 output 值,列出作为输出的值,然后按

dataset = tf.data.Dataset.from_tensor_slices(list_of_values)

取值列表,您说您需要两天时间来预测第二天; 因此,基于此,您应该将上述 function 的 output 与 window 大小为两天和一天,然后预测第二天的 48 值的 4 个值。 那么那么;

data = data.window(window_size = 48 + 24, drop_remainder = True)
#set drop_remainder to true to drop sequences that are not in the same length as the others

扁平 map 和随机数据如下

data = data.flat_map(lambda window : window.batch(48+24))
data = data.shuffle(shuffle_buffer)

现在您应该使用 map 数据来分离输入和输出,如下所示

data = data.map(window : (window[:48], window[48:])
#by this way you set window size 48 values as the input and the others 24 values as the outputs (forecast)

现在设置它的批量大小

data = data.batch(batch_size).prefetch()

现在您在窗口数据集中的数据可以输入到卷积一维中,对于输入层有两种方法; 您可以将输入形状设置为 (48,),然后使用 lambda 定义 lambda 层,该层重塑或扩展尺寸,甚至将输入形状设置为等于 (48,1),然后将其馈入 Conv1D 层

注意在您的情况下,通过这种方式,model 将获得 48 个任何格式的值,我的意思是从一天中的每个时间开始,但是如果您的 model 将从特定时间(例如上午 12 点)获取其输入,因此它需要定义在 window function 中的shift参数并将其设置为 24 以从上午 12 点开始每天取某些 24 个值

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM