标签: pytorch

在pytorch中执行卷积(非互相关)

我有一个网络(https://github.com/TheAbhiKumar/tensorflow-value-iteration-networks),我试图在pytorch中实现(我对pytorch很新,但是,根本不是机器学习的新手) .

简而言之,我似乎无法弄清楚如何在pytorch中实现"纯"卷积.在张量流中,它可以像这样完成:

def conv2d_flipkernel(x, k, name=None):
    return tf.nn.conv2d(x, flipkernel(k), name=name,
                        strides=(1, 1, 1, 1), padding='SAME')
Run Code Online (Sandbox Code Playgroud)

使用flipkernel函数:

def flipkernel(kern):
      return kern[(slice(None, None, -1),) * 2 + (slice(None), slice(None))]
Run Code Online (Sandbox Code Playgroud)

如何在pytorch中完成类似的事情?

convolution neural-network torch conv-neural-network pytorch

7
推荐指数
1
解决办法
2600
查看次数

我可以使用逻辑索引或索引列表来切片张量?

我正在尝试使用列上的逻辑索引切片PyTorch张量.我想要与索引向量中的1值对应的列.切片和逻辑索引都是可能的,但它们是否可以一起使用?如果是这样,怎么样?我的尝试一直在抛出无益的错误

TypeError:使用ByteTensor类型的对象索引张量.唯一支持的类型是整数,切片,numpy标量和torch.LongTensor或torch.ByteTensor作为唯一的参数.

MCVE

期望的输出

C = torch.LongTensor([[1, 3], [4, 6]])
# 1 3
# 4 6
Run Code Online (Sandbox Code Playgroud)

仅对列进行逻辑索引

import torch
A_log = torch.ByteTensor([1, 0, 1]) # the logical index
B = torch.LongTensor([[1, 2, 3], [4, 5, 6]])
C = B[:, A_log] # Throws error
Run Code Online (Sandbox Code Playgroud)

我也试过使用索引列表

import torch
A_idx = torch.LongTensor([0, 2]) # the index vector
B = torch.LongTensor([[1, 2, 3], [4, 5, 6]])
C = B[:, A_idx] # Throws error
Run Code Online (Sandbox Code Playgroud)

如果向量大小相同,则逻辑索引有效

import torch
A_log = torch.ByteTensor([1, 0, 1]) # the logical …
Run Code Online (Sandbox Code Playgroud)

python matrix-indexing pytorch

7
推荐指数
2
解决办法
8719
查看次数

ValueError:浮点图像RGB值必须在0..1范围内.而使用matplotlib

我想要可视化神经网络层的权重.我正在使用pytorch.

import torch
import torchvision.models as models
from matplotlib import pyplot as plt

def plot_kernels(tensor, num_cols=6):
    if not tensor.ndim==4:
        raise Exception("assumes a 4D tensor")
    if not tensor.shape[-1]==3:
        raise Exception("last dim needs to be 3 to plot")
    num_kernels = tensor.shape[0]
    num_rows = 1+ num_kernels // num_cols
    fig = plt.figure(figsize=(num_cols,num_rows))
    for i in range(tensor.shape[0]):
        ax1 = fig.add_subplot(num_rows,num_cols,i+1)
        ax1.imshow(tensor[i])
        ax1.axis('off')
        ax1.set_xticklabels([])
        ax1.set_yticklabels([])

    plt.subplots_adjust(wspace=0.1, hspace=0.1)
    plt.show()
vgg = models.vgg16(pretrained=True)
mm = vgg.double()
filters = mm.modules
body_model = [i for i in mm.children()][0]
layer1 = …
Run Code Online (Sandbox Code Playgroud)

matplotlib deep-learning pytorch

7
推荐指数
1
解决办法
5301
查看次数

如何在Pytorch中将1-d IntTensor转换为int

我得到了一维IntTensor,但我想将其转换为整数。我通过这种方法尝试:

print(dictionary[IntTensor.int()])
Run Code Online (Sandbox Code Playgroud)

但出现错误:

KeyError: Variable containing:
 423
[torch.IntTensor of size 1]
Run Code Online (Sandbox Code Playgroud)

谢谢〜

pytorch tensor

7
推荐指数
2
解决办法
1万
查看次数

如何重复使用经过培训的fastai模型?

如何使用PyTorch上的fastai实现加载预训练模型?就像在SkLearn中一样,我可以使用pickle将模型转储到文件中,然后加载并稍后使用.在声明像bellow这样的学习实例之后,我使用了.load()方法来加载以前保存的权重:

arch=resnet34
data = ImageClassifierData.from_paths(PATH, tfms=tfms_from_model(arch, sz))
learn = ConvLearner.pretrained(arch, data, precompute=False)
learn.load('resnet34_test')
Run Code Online (Sandbox Code Playgroud)

然后预测图像的类:

trn_tfms, val_tfms = tfms_from_model(arch,100)
img = open_image('circle/14.png')
im = val_tfms(img)
preds = learn.predict_array(im[None])
print(np.argmax(preds))
Run Code Online (Sandbox Code Playgroud)

但它让我错误:

ValueError: Expected more than 1 value per channel when training, got input size [1, 1024]
Run Code Online (Sandbox Code Playgroud)

如果我使用此代码learn.fit(0.01, 3)而不是learn.load().我真正想要的是避免在我的应用程序中的训练步骤.

python scikit-learn deep-learning resnet pytorch

7
推荐指数
1
解决办法
5042
查看次数

pytorch如何从张量中删除cuda()

我有TypeError: expected torch.LongTensor (got torch.cuda.FloatTensor).

我如何转换torch.cuda.FloatTensortorch.LongTensor

  Traceback (most recent call last):
  File "train_v2.py", line 110, in <module>
    main()
  File "train_v2.py", line 81, in main
    model.update(batch)
  File "/home/Desktop/squad_vteam/src/model.py", line 131, in update
    loss_adv = self.adversarial_loss(batch, loss, self.network.lexicon_encoder.embedding.weight, y)
  File "/home/Desktop/squad_vteam/src/model.py", line 94, in adversarial_loss
    adv_embedding = torch.LongTensor(adv_embedding)
TypeError: expected torch.LongTensor (got torch.cuda.FloatTensor)
Run Code Online (Sandbox Code Playgroud)

python type-conversion pytorch tensor

7
推荐指数
1
解决办法
3024
查看次数

PyTorch中的双向LSTM输出问题

嗨,我有一个问题,关于如何从BI-LSTM模块的输出中收集正确的结果。

假设我有一个10长度的序列输入到具有100个隐藏单元的单层LSTM模块中:

lstm = nn.LSTM(5, 100, 1, bidirectional=True)
Run Code Online (Sandbox Code Playgroud)

output 形状如下:

[10 (seq_length), 1 (batch),  200 (num_directions * hidden_size)]
# or according to the doc, can be viewed as
[10 (seq_length), 1 (batch),  2 (num_directions), 100 (hidden_size)]
Run Code Online (Sandbox Code Playgroud)

如果我想同时获得两个方向上的第三个(1-索引)输入输出(两个100维矢量),我该如何正确执行呢?

我知道output[2, 0]会给我一个200维的向量。这个200个暗淡的向量代表两个方向上的第三个输入的输出吗?

令我困扰的是,当进行反向进给时,从第8个(1-索引)输入计算出第三个(1-索引)输出矢量,对吗?

pytorch会自动处理此问题并考虑方向分组输出吗?

谢谢!

machine-learning neural-network deep-learning lstm pytorch

7
推荐指数
2
解决办法
3313
查看次数

如何有效地获取Torch张量中的最大值索引?

假定具有以下形状的火炬张量:

x = torch.rand(20, 1, 120, 120)
Run Code Online (Sandbox Code Playgroud)

我现在想要的是获取每个120x120矩阵的最大值的索引。为了简化问题,我将首先x.squeeze()使用shape [20, 120, 120]。然后,我想获取火炬张量,它是具有shape的索引列表[20, 2]

我该如何快速完成?

max indices pytorch

7
推荐指数
2
解决办法
6250
查看次数

如何在Google Colab上安装PyTorch v1.0.0 +?

PyTorch v1.0.0稳定版在7个月前宣布之后于2018年12月8日发布

我想为运行IPython内核的硬件优化版本。

如何在Google Colab上获取此版本?

pytorch google-colaboratory

7
推荐指数
2
解决办法
5904
查看次数

如何在PyTorch中清除Cuda内存

我正在尝试获取已经训练过的神经网络的输出。输入是大小为300x300的图像。我使用的批量大小为1,但是CUDA error: out of memory成功获取25张图像的输出后,仍然出现错误。

我在网上搜索了一些解决方案并遇到了torch.cuda.empty_cache()。但这似乎仍不能解决问题。

这是我正在使用的代码。

device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")

train_x = torch.tensor(train_x, dtype=torch.float32).view(-1, 1, 300, 300)
train_x = train_x.to(device)
dataloader = torch.utils.data.DataLoader(train_x, batch_size=1, shuffle=False)

right = []
for i, left in enumerate(dataloader):
    print(i)
    temp = model(left).view(-1, 1, 300, 300)
    right.append(temp.to('cpu'))
    del temp
    torch.cuda.empty_cache()
Run Code Online (Sandbox Code Playgroud)

这种for loop运行给内存错误之前为25次,每次时间。

每次,我都会在网络中发送一个新图像进行计算。因此,在循环中的每次迭代之后,我实际上都不需要将先前的计算结果存储在GPU中。有什么办法可以做到这一点?

任何帮助将不胜感激。谢谢。

python pytorch

7
推荐指数
2
解决办法
5137
查看次数