标签: pytorch

为什么我们在pytorch中"打包"序列?

我试图复制如何使用包装为rnn的可变长度序列输入,但我想我首先需要理解为什么我们需要"打包"序列.

我理解为什么我们需要"填充"它们,但为什么要"打包"(通过pack_padded_sequence)必要?

任何高级别的解释将不胜感激!

deep-learning recurrent-neural-network pytorch tensor zero-padding

56
推荐指数
4
解决办法
1万
查看次数

PyTorch - 连续()

我在github上看到了这个LSTM语言模型的例子(链接).它一般来说对我来说非常清楚.但是我仍然在努力理解调用的内容contiguous(),这在代码中会多次发生.

例如,在代码输入的第74/75行中,创建LSTM的目标序列.数据(存储在其中ids)是二维的,其中第一维是批量大小.

for i in range(0, ids.size(1) - seq_length, seq_length):
    # Get batch inputs and targets
    inputs = Variable(ids[:, i:i+seq_length])
    targets = Variable(ids[:, (i+1):(i+1)+seq_length].contiguous())
Run Code Online (Sandbox Code Playgroud)

举个简单的例子,当使用批量大小为1和seq_length10时inputs,targets看起来像这样:

inputs Variable containing:
0     1     2     3     4     5     6     7     8     9
[torch.LongTensor of size 1x10]

targets Variable containing:
1     2     3     4     5     6     7     8     9    10
[torch.LongTensor of size 1x10]
Run Code Online (Sandbox Code Playgroud)

所以一般来说我的问题是,contiguous()我需要什么以及为什么需要它?

此外,我不明白为什么该方法被调用目标序列而不是输入序列,因为两个变量都包含相同的数据.

怎么可能targetsinputs不连续的,仍然是连续的? …

neural-network contiguous deep-learning lstm pytorch

52
推荐指数
6
解决办法
3万
查看次数

PyTorch 中“detach()”和“with torch.nograd()”的区别?

我知道两种从梯度计算中排除计算元素的方法 backward

方法一:使用with torch.no_grad()

with torch.no_grad():
    y = reward + gamma * torch.max(net.forward(x))
loss = criterion(net.forward(torch.from_numpy(o)), y)
loss.backward();
Run Code Online (Sandbox Code Playgroud)

方法二:使用.detach()

y = reward + gamma * torch.max(net.forward(x))
loss = criterion(net.forward(torch.from_numpy(o)), y.detach())
loss.backward();
Run Code Online (Sandbox Code Playgroud)

这两者有区别吗?两者都有好处/坏处吗?

python pytorch autograd

50
推荐指数
3
解决办法
4万
查看次数

PyTorch:如何将DataLoader用于自定义数据集

如何利用torch.utils.data.Datasettorch.utils.data.DataLoader你自己的数据(不只是torchvision.datasets)?

有没有办法使用DataLoaders他们使用的内置TorchVisionDatasets在任何数据集上使用?

python torch pytorch

48
推荐指数
3
解决办法
3万
查看次数

在pytorch中重塑和视图之间有什么区别?

在numpy中,我们ndarray.reshape()用于重塑数组.

我注意到在pytorch中,人们使用torch.view(...)同样的目的,但同时也torch.reshape(...)存在.

所以我想知道他们和我应该使用其中任何一个之间的差异是什么?

pytorch

46
推荐指数
4
解决办法
2万
查看次数

为什么我们需要显式调用zero_grad()?

为什么我们需要在PyTorch中明确归零渐变?loss.backward()调用时为什么渐变不能归零?通过在图表上保持渐变并要求用户明确归零渐变来实现什么样的场景?

neural-network gradient-descent deep-learning pytorch

45
推荐指数
3
解决办法
1万
查看次数

如何将 Pytorch (+ cuda) 与 A100 GPU 结合使用?

我试图将当前代码与 A100 GPU 一起使用,但出现此错误:

---> backend='nccl'
/home/miranda9/miniconda3/envs/metalearningpy1.7.1c10.2/lib/python3.8/site-packages/torch/cuda/__init__.py:104: UserWarning: 
A100-SXM4-40GB with CUDA capability sm_80 is not compatible with the current PyTorch installation.
The current PyTorch install supports CUDA capabilities sm_37 sm_50 sm_60 sm_61 sm_70 sm_75 compute_37.
If you want to use the A100-SXM4-40GB GPU with PyTorch, please check the instructions at https://pytorch.org/get-started/locally/
Run Code Online (Sandbox Code Playgroud)

这相当令人困惑,因为它指向通常的 pytorch 安装,但没有告诉我将 pytorch 版本 + cuda 版本的哪种组合用于我的特定硬件(A100)。为 A100 安装 pytorch 的正确方法是什么?


这些是我尝试过的一些版本:

# conda install -y pytorch==1.8.0 torchvision cudatoolkit=10.2 -c pytorch
# conda install -y pytorch torchvision cudatoolkit=10.2 …
Run Code Online (Sandbox Code Playgroud)

python machine-learning neural-network pytorch

45
推荐指数
2
解决办法
6万
查看次数

与相同的 Keras 模型(使用 Adam 优化器)相比,PyTorch 的误差高出 400%


总而言之

经过训练来预测函数的简单(单隐藏层)前馈 Pytorch 模型的性能y = sin(X1) + sin(X2) + ... sin(X10)明显低于使用 Keras 构建/训练的相同模型。为什么会这样?可以采取哪些措施来减轻性能差异?


在训练回归模型时,我注意到 PyTorch 的性能远远低于使用 Keras 构建的相同模型。

之前已经观察到并报道过这种现象

此前也已做出以下解释和建议

  1. 使用相同的十进制精度(32 与 64):1 , 2 ,

  2. 使用 CPU 而不是 GPU:1 , 2

  3. retain_graph=True计算 …

adam keras tensorflow pytorch

44
推荐指数
1
解决办法
3848
查看次数

如何向 PyTorch 张量添加新维度?

在 NumPy 中,我会做

a = np.zeros((4, 5, 6))
a = a[:, :, np.newaxis, :]
assert a.shape == (4, 5, 1, 6)
Run Code Online (Sandbox Code Playgroud)

如何在 PyTorch 中做同样的事情?

python pytorch

43
推荐指数
3
解决办法
7万
查看次数

PyTorch LSTM中"隐藏"和"输出"之间有什么区别?

我无法理解PyTorch的LSTM模块(以及类似的RNN和GRU)的文档.关于产出,它说:

输出:输出,(h_n,c_n)

  • output(seq_len,batch,hidden_​​size*num_directions):包含来自RNN最后一层的输出要素(h_t)的张量,每个t.如果已将torch.nn.utils.rnn.PackedSequence作为输入,则输出也将是打包序列.
  • h_n(num_layers*num_directions,batch,hidden_​​size):包含t = seq_len隐藏状态的张量
  • c_n(num_layers*num_directions,batch,hidden_​​size):包含t = seq_len的单元格状态的张量

似乎变量outputh_n两者都给出了隐藏状态的值.是否h_n只是冗余地提供已经包含的最后一个时间步骤output,或者还有什么比它更多的东西?

pytorch

42
推荐指数
3
解决办法
1万
查看次数