元组
概念
元组(tuple)是一种不可变序列类型,与列表类似,但是一旦创建就不能修改
元组使用圆括号 ( ) 来定义,元素之间用 , 分隔
特点:
- 有序集合
- 不可修改
- 可以包含任何其他类型元素
- 可以嵌套包含其他符合数据类型
使用
在李沐老师的动手学习深度学习 从零实现循环神经网络一节中,元组主要用于隐藏状态的封闭和传递
之所以要使用元组,主要基于下面的原因:
- 更复杂的RNN变体(如LSTM、GRU)往往有多个状态张量,使用元组可以提供一个统一的接口。
- 并且元组允许未来扩展到多状态模型,也就是利于后续隐状态包含多个变量的情况
- 元组的不可变性能够确保状态在传递过程中不会被意外修改
如在rnn参数的初始化中:
def init_rnn_state(batch_size, num_hiddens, device):
return (torch.zeros((batch_size, num_hiddens), device=device), )
这段代码将创建并返回一个元组,其中包含一个全零张量
并且结尾的逗号(tensor, )是必需的,这告诉Python这是一个单元素元组,而不是简单的括号表达式
封装之后自然需要解包:
H, = state
这行代码从state元组中解包出隐藏状态张量。因为元组只有一个元素,所以使用H,这种模式(带逗号)来接收这个元素。这是Python中的一种解包语法
特别地,如果元组有多个元素,解包可以写作
# 假设state包含两个元素
h, c = state # 将两个元素分别赋值给h和c
以及重新封装为元组进行返回:
return torch.cat(outputs, dim=0), (H,)

浙公网安备 33010602011771号