深度学习 循环神经网络 LSTM 示例
2023-09-11 14:19:20 时间
最近在网上找到了一个使用LSTM 网络解决 世界银行中各国 GDP预测的一个问题,感觉比较实用,毕竟这是找到的唯一一个可以正确运行的程序。
#encoding:UTF-8 import pandas as pd from pandas_datareader import wb import torch import torch.nn import torch.optim #读取数据 countries = ['BR', 'CA', 'CN', 'FR', 'DE', 'IN', 'IL', 'JP', 'SA', 'GB', 'US',] dat = wb.download(indicator='NY.GDP.PCAP.KD', country=countries, start=1970, end=2016) df = dat.unstack().T df.index = df.index.droplevel(0).astype(int) #print(df)
#搭建神经网络 class Net(torch.nn.Module): def __init__(self, input_size, hidden_size): super(Net, self).__init__() self.rnn = torch.nn.LSTM(input_size, hidden_size) self.fc = torch.nn.Linear(hidden_size, 1) def forward( self, x): x = x[:, :, None] x, _ = self.rnn(x) x = self.fc(x) x = x[:, :, 0] return x net = Net(input_size=1, hidden_size=5) #print(net) #训练神经网络 # 数据归一化 df_scaled = df / df.loc[2000] # 确定训练集和测试集 years = df.index train_seq_len = sum((years >= 1971) & (years <= 2000)) test_seq_len = sum(years > 2000) print ('训练集长度 = {}, 测试集长度 = {}'.format( train_seq_len, test_seq_len)) # 确定训练使用的特征和标签 inputs = torch.tensor(df_scaled.iloc[:-1].values, dtype=torch.float32) labels = torch.tensor(df_scaled.iloc[1:].values, dtype=torch.float32) # 训练网络 criterion = torch.nn.MSELoss() optimizer = torch.optim.Adam(net.parameters()) for step in range(10001): if step: optimizer.zero_grad() train_loss.backward() optimizer.step() preds = net(inputs) train_preds = preds[:train_seq_len] train_labels = labels[:train_seq_len] train_loss = criterion(train_preds, train_labels) test_preds = preds[-test_seq_len] test_labels = labels[-test_seq_len] test_loss = criterion(test_preds, test_labels) if step % 500 == 0: print ('第{}次迭代: loss (训练集) = {}, loss (测试集) = {}'.format( step, train_loss, test_loss)) preds = net(inputs) df_pred_scaled = pd.DataFrame(preds.detach().numpy(), index=years[1:], columns=df.columns) df_pred = df_pred_scaled * df.loc[2000] df_pred.loc[2001:]
相关文章
- [Python学习] 专题二.条件语句和循环语句的基础知识
- JAVA学习(四):Java流程控制语句(顺序结构、if条件语句、switch条件语句、循环语句与跳转语句)
- Python快速学习10: 循环的对象及设计 (生活的规律)
- Python快速学习04:循环 & 函数
- 【腾讯面试题目】非循环方式 计算一个32位整数中被置1的位数
- 机器学习笔记 - 将循环神经网络用于视频分类
- Python循环结构详解
- C# 循环的中断——Break、continue、return
- C++:C++编程语言学习之基本数据类型/流程控制(if else/switch/for/while循环语句)的简介、案例应用之详细攻略
- Python编程语言学习:列表与字典互转的几大方法集锦、从列表中按顺序循环抽走一个元素输出剩余元素之详细攻略
- JAVA中的循环结构语句
- C++11 for循环(基于范围的循环)详解
- Scala学习教程笔记一之基础语法,条件控制,循环控制,函数,数组,集合
- 用jquery写循环播放div的相关笔记 珍贵的总结 -1
- C语言使用技巧(二十二):算法技巧:while(1)与if循环的循环扣圈搜索与路径节点搜索
- seurat的 addmodule循环画图 等同于基因的叠加图 识别细胞类型 空转与单细胞得到的marker基因联合
- LCC编译器的源程序分析(31)do while循环语句
- python 循环高级用法 [expression for x in X [if condition] for y in Y [if condition] ... for n in N [if condition] ]按照从左至右的顺序,分别是外层循环到内层循环
- 水很深的深度学习-Task05循环神经网络RNN
- VB.net:VB.net编程语言学习之操作符(变量/常量/数据类型/声明)&逻辑控制语句(条件判断/循环语句)的简介、案例应用之详细攻略
- C++循环之continue-break
- vba程序用7重循环来计算24
- Python的学习心得和知识总结(四)|Python控制语句(选择结构、循环结构)
- Clojure 学习入门(14)- 循环控制
- Python语言基础学习之Python基础之列表介绍和循环遍历