neural-network - 如何理解 Keras 1D Convolution 输入形状和过滤器

标签 neural-network time-series conv-neural-network forecasting

我花了一些时间才明白input_shape = (batch_size, steps, input_dim)在 Keras Conv1D 中,但到目前为止我无法取得任何进展。

更具体地说,我有 2 个数据集。

数据集1:一年中每天24小时的太阳能生产,所以我的数据集的大小是(364,24),天在行中,消耗在列中。

2天的例子:

day-1: [0   0   0   0   0   0   0   1.611   5.791   8.229   9.907   9.649   8.401   6.266   4.728   2.231   0.306   0.013   0   0   0   0   0   0] 
day-2: [0   0   0   0   0   0   0   1.732   5.839   9.909   12.593  14.242  12.744  9.596   5.808   2.019   0.241   0   0   0   0   0   0   0]`

我想用 CNN 做的是使用 6 天的数据来预测第 7 天。
出于这个原因,我像这样划分了我的数据集:
xtrain = dataset[0:6,0:24] # takes 24 hour of 6 days
ytrain = dataset[6,0:24] # takes 24 hour of 7th day
xtest = dataset[1:7,0:24] # takes 24 hours for 6 days (day2 to day7) to predict day 8

为了与 Keras 的输入形状兼容,我将训练数据 reshape 如下:
xtrain = xtrain.reshape(6,1,24)

样本数:6,时间维度:1,input_dimension:24

这是正确的想法吗?
model.add(Conv1D(**filters?**,kernel_size=4,activation='relu', **input_shape=?**)) 

在我的第二个数据集中:
Training Data: Xtrain: Day-1 Hour-1 to Hour-24, Day-2 Hour-1 to Hour-24 ... Day-6 Hour-1 to Hour-24
Ytrain: Day-7 Hour-1 to Hour-24

我创建了一个新的数据集,它在行中需要一天 24 小时,在列中需要 7 天,所以它是一个 (8616,7) 矩阵。
hour-1 day-1, day-2 ... day-7
hour-2 day-1, day-2 ... day-7
...
hour-24 day-1, day-2 ... day-7
...
hour-1 day-2, day-3 ... day-8
hour-2 day-2, day-3 ... day-8
...
hour-24 day-2, day-3 ... day-8
...
hour-1 day-359, day-360 ... day-365
hour-2 day-359, day-360 ... day-365
...
hour-24 day-359, day-360 ... day-365

凯拉斯代码:
xtrain = dataset[0:24,0:6] # takes 24 hour for 6 days
ytrain = dataset[24:48,6] # takes 24 hour of 7th day
xtest = dataset[24:48,0:6] # takes 24 hours for 6 days (day2 to day7) to predict day 7

xtrain = xtrain[newaxis,:, :]
ytrain = ytrain.reshape(1,24)

我真的不明白过滤器和 input_shape 应该是什么。

最佳答案

您应该以如下结构重新格式化数据集:
[365,6,24]
第一个维度设定了日期。
第二个维度设置时间步长(6 天的进展),因此您应该采用原始数据集的每一天 6:365,然后复制过去 6 天 24 小时。
第三维是每小时
假设您订购了 [1:365,1:24] 的原始数据集:

xtrain=np.array(np.tile(xtrain,[6 1]))

xtrain=np.reshape(xtrain,(365,6,24))


然后现在您拥有 conv1d 所需的 3D 格式(批处理、时间步长、 channel )

关于neural-network - 如何理解 Keras 1D Convolution 输入形状和过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46148098/

相关文章:

python - 深度学习YOLO目标检测: How to iterate over cells in a grid defined over the image

python - 神经网络模型精度超低

python - 使用具有奇怪输出的 Softmax 的神经网络

tensorflow - Keras - 在边界上填充带有值的张量

python - 优化前景对象的边缘

machine-learning - 时间序列预测: weekly vs daily predictions

machine-learning - TensorFlow - random_crop 在 Cifar10 示例中做什么?

r - 使用神经网络进行价格预测是否正确?

reactjs - 在 ESNet React-timeseries-charts 图表上启用缩放

r - 为什么 as.Date ("06/10/2013", "%m/%d/%y") 返回 2020 年?