---
title: willcent
canonical_url: "https://www.modelscope.cn/models/Jakoy813/willcent"
md_url: "https://www.modelscope.cn/models/Jakoy813/willcent.md"
repository: Jakoy813/willcent
last_updated: 2025-10-31
library_name:
  - pytorch
frameworks:
  - Pytorch
downloads: 0
stars: 0
---

# willcent

> willcent - Jakoy813 在 ModelScope 开源的模型。{ "cells": [ { "celltype": "markdown", "id": "listed-organ", "metadata": {}, "source": [ "#### 导入所需库\n", "#### 其中netCDF4为气象数据专用库，用以读取本项目所需数据" ] }, { "celltype": "code", "executioncount": null, "id": "threaded-kingdom",…

- **Repository**: Jakoy813/willcent
- **Downloads**: 0
- **Stars**: 0
- **Last updated**: 2025-10-31

Source: https://www.modelscope.cn/models/Jakoy813/willcent

---

{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "listed-organ",
   "metadata": {},
   "source": [
    "#### 导入所需库\n",
    "#### 其中netCDF4为气象数据专用库，用以读取本项目所需数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "threaded-kingdom",
   "metadata": {},
   "outputs": [],
   "source": [
    "import os\n",
    "import numpy as np\n",
    "import netCDF4\n",
    "from netCDF4 import Dataset"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "direct-supervisor",
   "metadata": {},
   "outputs": [],
   "source": [
    "import torch\n",
    "from torchvision.datasets import mnist\n",
    "import torchvision.transforms as transforms\n",
    "from torch.utils.data import DataLoader\n",
    "import torch.nn.functional as F\n",
    "import torch.optim as optim\n",
    "from torch import nn"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "excessive-texas",
   "metadata": {},
   "outputs": [],
   "source": [
    "train_info=Dataset(\"data/CMIP_train.nc\")\n",
    "label_info=Dataset(\"data/CMIP_label.nc\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "compatible-garden",
   "metadata": {},
   "source": [
    "导入项目数据并制作成dataloader格式"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "union-piece",
   "metadata": {},
   "outputs": [],
   "source": [
    "trans=transforms.ToTensor()\n",
    "device = torch.device(\"cuda:0\" if torch.cuda.is_available() else \"cpu\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "executed-investigator",
   "metadata": {},
   "outputs": [],
   "source": [
    "dataloader=[]\n",
    "for i in range(4645):\n",
    "    temp=[]\n",
    "    for j in range(36):\n",
    "        data1=np.array(train_info['sst'][i][j])\n",
    "        data1[np.isnan(data1)]=0\n",
    "        data2=np.array(train_info['t300'][i][j])\n",
    "        data2[np.isnan(data2)]=0\n",
    "        data3=np.array(train_info['ua'][i][j])\n",
    "        data3[np.isnan(data3)]=0\n",
    "        data4=np.array(train_info['va'][i][j])\n",
    "        data4[np.isnan(data4)]=0\n",
    "        temp.append((trans(data1),trans(data2),trans(data3),trans(data4),np.array([label_info['nino'][i][j]])))\n",
    "    dataloader.append(DataLoader(dataset=temp,batch_size=36,shuffle=False))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "color-belle",
   "metadata": {},
   "source": [
    "搭建LSTM网络"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "abroad-province",
   "metadata": {},
   "outputs": [],
   "source": [
    "class Rnn(nn.Module):\n",
    "    def __init__(self,in_dim,hidden_dim,out_dim):\n",
    "        super(Rnn, self).__init__()\n",
    "        self.hidden_dim = hidden_dim\n",
    "        self.lstm1=nn.LSTM(in_dim,hidden_dim,batch_first=True)\n",
    "        self.lstm2=nn.LSTM(in_dim,hidden_dim,batch_first=True)\n",
    "        self.lstm3=nn.LSTM(in_dim,hidden_dim,batch_first=True)\n",
    "        self.lstm4=nn.LSTM(in_dim,hidden_dim,batch_first=True)\n",
    "        self.linear1=nn.Linear(hidden_dim,out_dim)\n",
    "        self.linear2=nn.Linear(hidden_dim,out_dim)\n",
    "        self.linear3=nn.Linear(hidden_dim,out_dim)\n",
    "        self.linear4=nn.Linear(hidden_dim,out_dim)\n",
    "        self.relu=nn.ReLU()\n",
    "        self.linear=nn.Linear(4*out_dim,1)\n",
    "\n",
    "    def forward(self,input1,input2,input3,input4):\n",
    "        output1,_=self.lstm1(input1.flatten(start_dim=2))\n",
    "        output1=output1.squeeze(1)\n",
    "        output1=self.relu(self.linear1(output1))\n",
    "        output2,_=self.lstm2(input2.flatten(start_dim=2))\n",
    "        output2=output2.squeeze(1)\n",
    "        output2=self.relu(self.linear2(output2))\n",
    "        output3,_=self.lstm3(input3.flatten(start_dim=2))\n",
    "        output3=output3.squeeze(1)\n",
    "        output3=self.relu(self.linear3(output3))\n",
    "        output4,_=self.lstm4(input4.flatten(start_dim=2))\n",
    "        output4=output4.squeeze(1)\n",
    "        output4=self.relu(self.linear4(output4))\n",
    "        out=torch.cat([output1,output2,output3,output4],1)\n",
    "        out=self.linear(out)\n",
    "        return out"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "gothic-surge",
   "metadata": {},
   "outputs": [],
   "source": [
    "lstm_model=Rnn(1728,300,10).to(device)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "acoustic-nylon",
   "metadata": {},
   "source": [
    "导入训练程序并进行训练"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "transsexual-network",
   "metadata": {},
   "outputs": [],
   "source": [
    "from util import train"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "noticed-proposal",
   "metadata": {},
   "outputs": [],
   "source": [
    "train.method3(model=lstm_model,dataset=dataloader,epoches=20)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.12"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
