如何理解 Keras 1D 卷积输入形状和滤波器
How to understand Keras 1D Convolution input shape and filter
我花了一些时间来理解input_shape = (batch_size, steps, input_dim)
在Keras Conv1D中,但到目前为止我没有取得任何进展。
更具体地说,我有 2 个数据集。
Dataset-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 的输入形状,我对训练数据进行了如下整形:
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
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)
我真的不明白过滤器和 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 格式(批处理、时间步长、通道)
我花了一些时间来理解input_shape = (batch_size, steps, input_dim)
在Keras Conv1D中,但到目前为止我没有取得任何进展。
更具体地说,我有 2 个数据集。
Dataset-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 的输入形状,我对训练数据进行了如下整形:
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
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)
我真的不明白过滤器和 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 格式(批处理、时间步长、通道)