Pytorch:为什么batch是默认LSTM中的第二个维度?
Pytorch: Why batch is the second dimension in the default LSTM?
在 PyTorch LSTM 文档中写道:
batch_first – If True, then the input and output tensors are provided
as (batch, seq, feature). Default: False
我想知道为什么他们选择默认批次维度作为第二个而不是第一个。对我来说,将我的数据成像为 [batch, seq, feature]
比 [seq, batch, feature]
更容易。第一个对我来说更直观,第二个是违反直觉的。
我想问问这背后是否有任何原因,您是否可以帮助我对此有所了解。
据我所知,没有一个非常合理的答案。如今,它不同于其他框架,正如您所说,形状更直观,例如 Keras,但仅出于与旧版本兼容的原因,更改修改向量维度的默认参数可能会破坏一半如果他们的维护者更新到更新的 PyTorch 版本,模型就在那里。
可能一开始的想法是先设置时间维度来简化随时间的迭代过程,所以你可以做一个
for t, out_t in enumerate(my_tensor)
而不是必须做更少的视觉工作,例如使用 my_tensor[:, i]
访问和必须在 range(time)
中迭代。
在另一个问题的 中写道:
There is an argument in favor of not using batch_first
, which states
that the underlying API provided by Nvidia CUDA runs considerably
faster using batch as secondary.
但是不知道这个说法对不对
在 PyTorch LSTM 文档中写道:
batch_first – If True, then the input and output tensors are provided as (batch, seq, feature). Default: False
我想知道为什么他们选择默认批次维度作为第二个而不是第一个。对我来说,将我的数据成像为 [batch, seq, feature]
比 [seq, batch, feature]
更容易。第一个对我来说更直观,第二个是违反直觉的。
我想问问这背后是否有任何原因,您是否可以帮助我对此有所了解。
据我所知,没有一个非常合理的答案。如今,它不同于其他框架,正如您所说,形状更直观,例如 Keras,但仅出于与旧版本兼容的原因,更改修改向量维度的默认参数可能会破坏一半如果他们的维护者更新到更新的 PyTorch 版本,模型就在那里。
可能一开始的想法是先设置时间维度来简化随时间的迭代过程,所以你可以做一个
for t, out_t in enumerate(my_tensor)
而不是必须做更少的视觉工作,例如使用 my_tensor[:, i]
访问和必须在 range(time)
中迭代。
在另一个问题的
There is an argument in favor of not using
batch_first
, which states that the underlying API provided by Nvidia CUDA runs considerably faster using batch as secondary.
但是不知道这个说法对不对