{ "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 }
willcent
0 downloads
0 likes
on ModelScope
updated