趋近智
在深度学习 (deep learning)框架中使用循环神经网络 (neural network) (RNN)时,常见的一个错误来源是提供张量形状不正确的数据。RNN 层旨在处理序列,它们期望输入数据采用特定的 3D 格式。正确处理这一点对构建和训练模型非常重要。
让我们分析一下大多数 RNN 层(如 SimpleRNN、LSTM 或 GRU)在 TensorFlow/Keras 和 PyTorch(使用 batch_first=True 时)等框架中预期的典型输入形状。标准输入是一个 3D 张量,维度为:
(batch_size, time_steps, features)
batch_size:此维度表示您在一次前向/反向传播 (backpropagation)中同时处理的独立序列的数量。分批训练是深度学习 (deep learning)中提高计算效率和梯度稳定性的标准做法。例如,如果您一次处理 128 个不同的文本评论,您的 batch_size 将是 128。如果您要处理单个序列进行预测,batch_size 将是 1。
time_steps(序列长度):这是批次中每个序列的长度。对于文本数据,它可能是填充或截断后句子中的单词(或字符)数量。对于时间序列数据,它可能是特定时间窗口内的观测值数量。尤其重要的是,在单个批次中,所有序列通常需要具有相同的长度。像填充这样的技术用于实现这种统一长度,我们将在第 8 章中讨论。如果您的序列有 50 个时间步,此维度将是 50。
features(输入维度):此维度指定序列中每个时间步可用的特征数量。
可以将输入张量视为矩阵的集合(batch_size),其中每个矩阵具有 time_steps 行和 features 列。
这是一个小图示,展示了 2 个序列批次的输入张量结构,每个序列有 3 个时间步和 4 个特征:
一个形状为 (2, 3, 4) 的 RNN 输入张量表示,显示两个序列,每个序列有三个时间步和每个时间步四个特征。
RNN 层输出的张量形状取决于一个配置参数 (parameter),通常在 Keras/TensorFlow 中称为 return_sequences,或在 PyTorch 中通过您使用输出的方式隐式决定。设 为 batch_size, 为 time_steps, 为输入 features 的数量,而 为创建 RNN 层时指定的隐藏单元(或神经元)数量。
返回完整序列的输出:如果您将层配置为返回每个时间步的隐藏状态(例如,return_sequences=True),输出张量形状将是:
(batch_size, time_steps, hidden_units) 或
这在以下情况是必需的:
TimeDistributed 包装器,或某些类型的注意力机制 (attention mechanism))。仅返回最终输出:如果您将层配置为仅返回最后一个时间步的隐藏状态(例如,return_sequences=False,Keras 中的默认设置),输出张量形状将是:
(batch_size, hidden_units) 或
这通常在以下情况使用:
hidden_units () 的数量是您在定义 RNN 层时选择的一个超参数 (hyperparameter)。它决定了内部隐藏状态的维度,从而也决定了输出向量的维度。
(batch_size, time_steps, features) 输入惯例很常见,但输出形状 (return_sequences) 和批次维度放置 (batch_first) 的默认设置可能有所不同。例如,PyTorch 的 RNN 层默认 batch_first=False,预期 (time_steps, batch_size, features),除非您指定 batch_first=True。Keras 层通常默认输入 (batch_size, time_steps, features),输出 return_sequences=False。.shape 属性以及 RNN 层预期的输入形状。理解并正确管理这些张量形状是实现 RNN 的实际必要条件。当您在后续章节中构建模型时,请记住这种 (batch_size, time_steps, features) 的输入结构,并注意您是需要完整序列的输出还是仅需要循环层的最终输出。
这部分内容有帮助吗?
return_sequences 参数及其他配置细节的说明。batch_first 参数的作用。© 2026 ApX Machine Learning用心打造