精准气象和海洋预测笔记

引言

赛题介绍

什么是ENSO?引用自wiki:

厄尔尼诺现象(香港作厄尔尼诺现象,台湾作圣婴现象),是指东太平洋海水每隔数年就会异常升温的现象,是厄尔尼诺-南方振荡现象(El Niño-Southern Oscillation,简称ENSO)中,东太平洋升温的阶段。它与中太平洋和东太平洋(约在国际换日线及西经120度)赤道位置产生的温暖海流有关。厄尔尼诺-南方振荡现象是指中太平洋和东太平洋赤道位置海面温度的高低温循环。厄尔尼诺现象是因为西太平洋的高气压及东太平洋的低气压所造成。厄尔尼诺-南方振荡现象中的低温阶段称为拉尼娜现象(也称为反圣婴现象),是指东太平洋的海面温度高于平均值,以及西太平洋的气压较低及东太平洋的气压较高所造成。包括厄尔尼诺现象及反厄尔尼诺现象在内的厄尔尼诺-南方振荡现象会造成全球性的温度及降雨变化。例如当厄尔尼诺现象发生时,南美洲地区会出现暴雨,而东南亚、澳大利亚则出现干旱。

赛题简介

本次比赛使用的数据包括CMIP5/6模式的历史模拟数据和美国SODA模式重建的近100多年历史观测同化数据。每个样本包含以下气象及时空变量:海表温度异常(SST),热含量异常(T300),纬向风异常(Ua),经向风异常(Va),数据维度为(year,month,lat,lon)。对于训练数据提供对应月份的Nino3.4 index标签数据。

https://tianchi.aliyun.com/competition/entrance/531871/information

评估指标

规则公式没看懂,但是图大概懂了,还是不变的相关系数和均方根。
在这里插入图片描述

数据处理说明

数据介绍

根据赛题解压文件的日志以及里面的readme可以大致知道数据是什么样的:

Archive:  enso_round1_train_20210201.zip
 Length   Method    Size  Cmpr    Date    Time   CRC-32   Name
--------  ------  ------- ---- ---------- ----- --------  ----
       0  Stored        0   0% 2021-01-25 19:12 00000000  enso_round1_train_20210201/
9246636414  Defl:N 4282415484  54% 2021-01-11 12:33 e0da2886  enso_round1_train_20210201/CMIP_train.nc
    6148  Defl:N      178  97% 2021-01-25 18:51 6d88006a  enso_round1_train_20210201/.DS_Store
     726  Defl:N      406  44% 2021-01-25 19:12 d05d941d  enso_round1_train_20210201/readme.txt
149310874  Defl:N 91379918  39% 2021-01-07 10:20 b99c0d6e  enso_round1_train_20210201/SODA_train.nc
   37536  Defl:N     7164  81% 2021-01-07 10:19 2c600d55  enso_round1_train_20210201/SODA_label.nc
 1364676  Defl:N   277603  80% 2021-01-07 10:19 d040d038  enso_round1_train_20210201/CMIP_label.nc
--------          -------  ---                            -------
9397356374         4374080753  54%                            7 files

readme为:

CMIP_train.nc, CMIP模式数据,包含sst t300 ua va ,分别代表海温,热含量,表面风的东西分量(纬向风),表面风的南北分量(经向风)
CMIP_label.nc,为对应逐月nino3.4指数标签数据
SODA_train.nc,观测数据,包含sst t300 ua va ,分别代表海温,热含量,表面风的东西分量(纬向风),表面风的南北分量(经向风)
SODA_label.nc,为对应逐月nino3.4指数标签数据
是否允许使用外部数据:否
是否允许使用预训练权重:否

赛题baseline

由于本次时间比较仓促,大部分时间在玩另一个赛题。本题研究了一个下午没看懂,另外关于nature在去年对ENSO的相关模型报道,知道了目前能达到的准确率是78%,但是代码看了作用不大,所以这里引用的是baseline:

import tensorflow as tf
import tensorflow.keras.backend as K
from tensorflow.keras.layers import *
from tensorflow.keras.models import *
from tensorflow.keras.optimizers import *
from tensorflow.keras.callbacks import *
from tensorflow.keras.layers import Input 
import numpy as np
import os
import zipfile

def RMSE(y_true, y_pred):
    return tf.sqrt(tf.reduce_mean(tf.square(y_true - y_pred)))

def build_model():  
    inp    = Input(shape=(12,24,72,4))  
    
    x_4    = Dense(1, activation='relu')(inp)   
    x_3    = Dense(1, activation='relu')(tf.reshape(x_4,[-1,12,24,72]))
    x_2    = Dense(1, activation='relu')(tf.reshape(x_3,[-1,12,24]))
    x_1    = Dense(1, activation='relu')(tf.reshape(x_2,[-1,12]))
     
    x = Dense(64, activation='relu')(x_1)  
    x = Dropout(0.25)(x) 
    x = Dense(32, activation='relu')(x)   
    x = Dropout(0.25)(x)  
    output = Dense(24, activation='linear')(x)   
    model  = Model(inputs=inp, outputs=output)

    adam = tf.optimizers.Adam(lr=1e-3,beta_1=0.99,beta_2 = 0.99) 
    model.compile(optimizer=adam, loss=RMSE)

    return model 

model = build_model()
model.load_weights('./user_data/model_data/model_mlp_baseline.h5')

test_path = './tcdata/enso_round1_test_20210201/'

### 1. 测试数据读取
files = os.listdir(test_path)
test_feas_dict = {}
for file in files:
    test_feas_dict[file] = np.load(test_path + file)
    
### 2. 结果预测
test_predicts_dict = {}
for file_name,val in test_feas_dict.items():
    test_predicts_dict[file_name] = model.predict(val).reshape(-1,)
#     test_predicts_dict[file_name] = model.predict(val.reshape([-1,12])[0,:])

### 3.存储预测结果
for file_name,val in test_predicts_dict.items(): 
    np.save('./result/' + file_name,val)

#打包目录为zip文件(未压缩)
def make_zip(source_dir='./result/', output_filename = 'result.zip'):
    zipf = zipfile.ZipFile(output_filename, 'w')
    pre_len = len(os.path.dirname(source_dir))
    source_dirs = os.walk(source_dir)
    print(source_dirs)
    for parent, dirnames, filenames in source_dirs:
        print(parent, dirnames)
        for filename in filenames:
            if '.npy' not in filename:
                continue
            pathfile = os.path.join(parent, filename)
            arcname = pathfile[pre_len:].strip(os.path.sep)   #相对路径
            zipf.write(pathfile, arcname)
    zipf.close()
make_zip()

然后就能docker提交了,dockerfile为:

# Base Images
## 从天池基础镜像构建
# FROM registry.cn-shanghai.aliyuncs.com/tcc-public/python:3
FROM registry.cn-shanghai.aliyuncs.com/tcc-public/tensorflow:latest-cuda10.0-py3

## 把当前文件夹里的文件构建到镜像的根目录下(.后面有空格,不能直接跟/)
ADD . /

## 指定默认工作目录为根目录(需要把run.sh和生成的结果文件都放在该文件夹下,提交后才能运行)
WORKDIR /

## Install Requirements(requirements.txt包含python包的版本)
## 这里使用清华镜像加速安装
RUN pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --upgrade pip
RUN pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt
#RUN pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt

## 镜像启动后统一执行 sh run.sh
CMD ["sh", "run.sh"]

关于命令的解释,可以看docker学习笔记(3):Dockerfile详解

关于上传阿里云的代码为下三句:

docker build -t submarineas/test_for_tianchi_submit:v1.0 .

sudo docker tag e4a98cf5ad64 registry.cn-shenzhen.aliyuncs.com/submarineas/qqq:v1.0

sudo docker push registry.cn-shenzhen.aliyuncs.com/submarineas/qqq:v1.0

首先build完,因为file只有6句话,所以build的步骤为6步:
在这里插入图片描述
有提示successful就是已经完成,那么docker images可以看到该镜像:
在这里插入图片描述
然后我们再按照阿里云的要求,对镜像名进行重新打标签,再push上去,然后就能提交了:
在这里插入图片描述

在这里插入图片描述

模型优化更新(2/24——)

现在是4月。。。emmm,后续没有更新了,除了换了个网络,由mlp换成了lstm,但发现效果也不理想,感觉是数据清洗的问题。果然,比赛过后看了发的帖子发现,很多自己没关注到的trick,这里就不补充了,因为确实没有花多少时间玩。。。之后的比赛有机会一定会准备得更充分点再上路。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

submarineas

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值