如何理解Keras的1D卷积输入形状和滤波器

4
我花了一些时间来理解Keras Conv1D中的,但是到目前为止我还没有取得任何进展。
具体来说,我有两个数据集。 数据集-1:每天24小时的太阳能产量,持续一年,因此我的数据集大小为(364, 24),行代表天数,列代表能耗。
以下是两天的示例:
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)来预测第七天的数据,需要用到六天的数据。为此,我将数据集划分如下:

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的输入格式兼容,我按如下方式重新调整了训练数据的形状:
xtrain = xtrain.reshape(6,1,24)

样本数:6,时间维度:1,输入维度: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

Keras 代码:

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)

我真的不理解filters和input_shape应该是什么。

1个回答

0

你应该将数据集重新格式化为以下结构:

[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格式(批次、时间步长、通道)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接