Pytorch 展平参数()的作用是什么?

Pytorch 展平参数()的作用是什么?,pytorch,Pytorch,我看到许多Pytork示例在RNN的forward函数中使用flatte_参数 self.rnn.flant\u参数() 我看到了,上面写着 重置参数数据指针,以便它们可以使用更快的代码路径 这是什么意思?这可能不是你问题的完整答案。但是,如果您查看一下的源代码,就会注意到它调用了 是完成这项工作的函数。您会发现它实际上是将模型的权重复制到向量中(检查参数arr声明): 还要注意的是,它们使用参数的新指针,通过执行中的就地操作.set(是它们就地操作的符号)来更新(或重置,正如它们在文档中明确指

我看到许多Pytork示例在RNN的forward函数中使用flatte_参数

self.rnn.flant\u参数()

我看到了,上面写着

重置参数数据指针,以便它们可以使用更快的代码路径


这是什么意思?

这可能不是你问题的完整答案。但是,如果您查看一下的源代码,就会注意到它调用了

是完成这项工作的函数。您会发现它实际上是将模型的权重复制到
向量中(检查
参数arr
声明):

还要注意的是,它们使用
参数
的新指针,通过执行
中的就地操作
.set
是它们就地操作的符号)来更新(或
重置
,正如它们在文档中明确指出的那样)

//更新存储
对于(尺寸i=0;i
根据

©ISO/IECN3092

23.3.6类模板向量


向量是支持随机访问迭代器的序列容器。此外,它还支持(摊销)固定时间插入和擦除操作;插入和擦除在中间取线性时间。存储管理是自动处理的,不过可以给出提示以提高效率向量的元素是连续存储的,这意味着如果
v
是一个向量
,其中
T
不是bool,那么它服从
标识&v[n]=&v[0]+n
对于所有
0,我认为它只是将所有权重压缩到一个连续的内存卡盘中
...
NoGradGuard no_grad;
torch::_cudnn_rnn_flatten_weight(...)
...
  // Slice off views into weight_buf
  std::vector<Tensor> params_arr;
  size_t params_stride0;
  std::tie(params_arr, params_stride0) = get_parameters(handle, rnn, rnn_desc, x_desc, w_desc, weight_buf);

  MatrixRef<Tensor> weight{weight_arr, static_cast<size_t>(weight_stride0)},
                    params{params_arr, params_stride0};
  // Copy weights
  _copyParams(weight, params);
  // Update the storage
  for (size_t i = 0; i < weight.size(0); i++) {
    for (auto orig_param_it = weight[i].begin(), new_param_it = params[i].begin();
         orig_param_it != weight[i].end() && new_param_it != params[i].end();
         orig_param_it++, new_param_it++) {
      auto orig_param = *orig_param_it, new_param = *new_param_it;
      orig_param.set_(new_param.view_as(orig_param));
    }
  }