元组

概念

元组(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,)
posted @ 2025-04-26 22:08  rdcamelot  阅读(16)  评论(0)    收藏  举报