天池时间序列竞赛——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)
  • 构建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

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

2. 后续提分策略

  • 首先依然是特征工程。虽然目前没来得及探索数据,但是我大致浏览了一下发现四个指标中都存在某些经度和维度下数值全为零的情况,这也许可以作为一个构建特征的思路。
  • 模型调参。可以尝试调整CNN每一层的节点个数或是使用其他的激活函数。
  • 多模型融合。尝试与LSTM等其他模型融合,或是训练多个CNN模型进行融合。
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值