当前位置:   article > 正文

天池时间序列竞赛——AI助力精准气象和海洋预测学习笔记其二:CNN baseline_航迹预测算法 天池大赛

航迹预测算法 天池大赛

逛论坛的时候发现对于这个题目,CNN似乎是个不错的解题思路。因为给出的数据是多维的,每条数据的维度是[year, month, lat, lon],在这四个维度下给出了SST、T300、Ua、Va四个指标的值。month的取值是36个月,lat是-55~60间隔5取值,即24个值,lon是0 ~180间隔5取值,即72个值。考虑到有四个指标,也就是说,数据的shape是[year, 36, 24, 72, 4]。目标是根据前12个月的数据预测后24个月的数据,因此取数据的前12个月作为训练集,后24个月作为目标值,训练数据的shape即为[year, 12, 24, 72, 4],其中每一个year(起始年),都是一条训练数据。将指标维度并入month维度,那么第二个维度的取值个数就变为12*4=48,训练数据的维度变为[year, 48, 24, 72],此时就可以参照着CNN模型的输入形状[N, C, H, W]。
PS:感谢论坛大佬提供的思路。

1. CNN baseline

我只在datawhale开源的baseline上做了两个修改。

  • 将四个指标的数据month维度上进行拼接
train_features = np.concatenate([soda_sst[:,:12,:,:], soda_t300[:,:12,:,:], soda_ua[:,:12,:,:], soda_va[:,:12,:,:]], axis=1)
  • 1
  • 构建cnn模型
def build_cnn(learning_rate):
    inp = tf.keras.layers.Input(shape=(48, 24, 72))
    
    x = Conv2D(48, (3, 3), activation='relu', padding='same')(inp)
    x = MaxPooling2D((2, 2))(x)
    x = Dropout(0.2)(x)
    x = Conv2D(48, (3, 3), activation='relu', padding='same')(x)
    x = MaxPooling2D((2, 2))(x)
    x = Dropout(0.2)(x)
    x = Conv2D(48, (3, 3), activation='relu', padding='same')(x)
    x = Flatten()(x)
    x = Dense(64, activation='relu')(x)
    output = Dense(24, activation='linear')(x)
    
    model = Model(inputs=inp, outputs=output)
    adam = tf.optimizers.Adam(lr=learning_rate)
    model.compile(optimizer = adam, loss = RMSE)
    
    return model
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

由于时间仓促,仅用了SODA数据进行训练,提交后的结果如下图所示,比之前的mlp模型分数高一些,不过依然是负分(笑)。
在这里插入图片描述

2. 后续提分策略

  • 首先依然是特征工程。虽然目前没来得及探索数据,但是我大致浏览了一下发现四个指标中都存在某些经度和维度下数值全为零的情况,这也许可以作为一个构建特征的思路。
  • 模型调参。可以尝试调整CNN每一层的节点个数或是使用其他的激活函数。
  • 多模型融合。尝试与LSTM等其他模型融合,或是训练多个CNN模型进行融合。
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/秋刀鱼在做梦/article/detail/889007
推荐阅读
相关标签
  

闽ICP备14008679号