当前位置: 首页 > news >正文

李沐--动手学深度学习--GRU

1.GRU从零开始实现

#9.1.2GRU从零开始实现
import torch
from torch import nn
from d2l import torch as d2l#首先读取 8.5节中使用的时间机器数据集
batch_size,num_steps = 32,35
train_iter,vocab = d2l.load_data_time_machine(batch_size,num_steps)
#初始化模型参数
def get_params(vocab_size,num_hiddens,device):num_inputs = num_outputs = vocab_sizedef normal(shape):return torch.randn(size=shape,device=device)*0.01def three():return (normal((num_inputs,num_hiddens)),normal((num_hiddens,num_hiddens)),torch.zeros(num_hiddens,device=device))W_xz,W_hz,b_z = three()  #更新门参数W_xr,W_hr,b_r = three()  #重置门参数W_xh,W_hh,b_h = three()  #候选隐状态参数#输出层参数W_hq = normal((num_hiddens,num_outputs))b_q = torch.zeros(num_outputs,device=device)#附加梯度params = [W_xz,W_hz,b_z,W_xr,W_hr,b_r,W_xh,W_hh,b_h,W_hq,b_q]for param in params:param.requires_grad_(True)return params
#定义隐状态的初始化函数init_gru_state
def init_gru_state(batch_size,num_hiddens,device):return (torch.zeros((batch_size,num_hiddens),device=device),)
#门控循环单元模型
def gru(inputs,state,params):W_xz,W_hz,b_z,W_xr,W_hr,b_r,W_xh,W_hh,b_h,W_hq,b_q = paramsH, = stateoutputs = []for X in inputs:Z = torch.sigmoid((X @ W_xz)+(H @ W_hz) + b_z)R = torch.sigmoid((X @ W_xr)+(H @ W_hr) + b_r)H_tilda = torch.tanh((X @ W_xh)+((R*H) @ W_hh) + b_h)H = Z * H + (1-Z) * H_tildaY = H @ W_hq + b_qoutputs.append(Y)return torch.cat(outputs,dim=0),(H,)
#训练与预测:打印输出训练集的困惑度,以及前缀“time traveler”和“traveler”的预测序列上的困惑度。
vocab_size,num_hiddens,device = len(vocab),256,d2l.try_gpu()
num_epochs,lr = 500,1
model = d2l.RNNModelScratch(len(vocab),num_hiddens,device,get_params,init_gru_state,gru)
print(d2l.train_ch8(model,train_iter,vocab,lr,num_epochs,device))
d2l.plt.show()

2.GRU简洁实现

#9.1.3简洁实现
import torch
from torch import nn
from d2l import torch as d2l
#首先读取 8.5节中使用的时间机器数据集
batch_size,num_steps = 32,35
train_iter,vocab = d2l.load_data_time_machine(batch_size,num_steps)vocab_size,num_hiddens,device = len(vocab),256,d2l.try_gpu()
num_epochs,lr = 500,1num_inputs = vocab_size
gru_layer = nn.GRU(num_inputs,num_hiddens)
model = d2l.RNNModel(gru_layer,len(vocab))
model = model.to(device)
print(d2l.train_ch8(model,train_iter,vocab,lr,num_epochs,device))
d2l.plt.show()

相关文章:

  • 让 Kubernetes (K8s) 集群 使用 GPU
  • 树莓派超全系列教程文档--(60)树莓派摄像头操作命令及使用其一
  • 算法刷题-回溯
  • Mac flutter环境搭建
  • 用 FFmpeg 实现 RTMP 推流直播
  • 使用centos服务器和Let‘s Encypted配置SpingBoot项目的https证书
  • 『uniapp』消息推送 unipush的对接 支持通知消息内容客户端自定义(保姆级图文)
  • 数字孪生+AR/VR的融合创新
  • RocketMQ 客户端负载均衡机制详解及最佳实践
  • Centos 7 服务器部署多网站
  • 关于uniapp展示PDF的解决方案
  • 相机Camera日志实例分析之一:相机Camx【前置慢动作分辨率切换720P、1080P录制】单帧流程日志详解
  • AirSim/Cosys-AirSim 游戏开发(四)外部固定位置监控相机
  • 相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解
  • 三维GIS开发cesium智慧地铁教程(5)Cesium相机控制
  • ArcGIS Pro+ArcGIS给你的地图加上北回归线!
  • 相机从app启动流程
  • Qt 窗口
  • STA(Station)模式与AP(Access Point)模式
  • VSCode 使用CMake 构建 Qt 5 窗口程序
  • 网站建设合同服务事项/优化seo可以从以下几个方面进行
  • wordpress自动加内链/网站seo课设
  • 企业网站百度认证/百度代理查询
  • 联通营业厅做网站维护/网络推广是指什么
  • 关于建设殡葬网站的报告范文/营销型网站建设总结
  • 做网站上怎么推广呢/软文营销策划