标签: pytorch

怎样才能解开PyTorch?

我没有找到任何卸载和删除所有PyTorch依赖项的命令.甚至来自pytorch.org.

我安装了PyTorch

conda install pytorch torchvision cuda80 -c soumith
Run Code Online (Sandbox Code Playgroud)

python ubuntu anaconda pytorch

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

获取pytorch数据集的子集

我有一个网络,我想在一些数据集上训练(例如,说CIFAR10).我可以通过创建数据加载器对象

trainset = torchvision.datasets.CIFAR10(root='./data', train=True,
                                        download=True, transform=transform)
trainloader = torch.utils.data.DataLoader(trainset, batch_size=4,
                                          shuffle=True, num_workers=2)
Run Code Online (Sandbox Code Playgroud)

我的问题如下:假设我想进行几次不同的训练迭代.假设我首先想要在奇数位置的所有图像上训练网络,然后在偶数位置的所有图像上训练网络,依此类推.为此,我需要能够访问这些图像.不幸的是,它似乎trainset不允许这种访问.也就是说,尝试做trainset[:1000]或更多一般trainset[mask]会抛出错误.

我可以做

trainset.train_data=trainset.train_data[mask]
trainset.train_labels=trainset.train_labels[mask]
Run Code Online (Sandbox Code Playgroud)

然后

trainloader = torch.utils.data.DataLoader(trainset, batch_size=4,
                                              shuffle=True, num_workers=2)
Run Code Online (Sandbox Code Playgroud)

但是,这将迫使我在每次迭代中创建完整数据集的新副本(因为我已经更改,trainset.train_data所以我需要重新定义trainset).有没有办法避免它?

理想情况下,我希望有一些"等同"的东西

trainloader = torch.utils.data.DataLoader(trainset[mask], batch_size=4,
                                              shuffle=True, num_workers=2)
Run Code Online (Sandbox Code Playgroud)

python machine-learning neural-network torch pytorch

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

将Pytorch LSTM的状态参数转换为Keras LSTM

我试图将现有训练有素的PyTorch模型移植到Keras.

在移植过程中,我陷入了LSTM层.

LSTM网络的Keras实现似乎有三种状态矩阵,而Pytorch实现有四种.

例如,对于具有hidden_​​layers = 64的双向LSTM,input_size = 512&output size = 128状态参数,如下所示

Keras LSTM的状态参数

[<tf.Variable 'bidirectional_1/forward_lstm_1/kernel:0' shape=(512, 256) dtype=float32_ref>,
 <tf.Variable 'bidirectional_1/forward_lstm_1/recurrent_kernel:0' shape=(64, 256) dtype=float32_ref>,
 <tf.Variable 'bidirectional_1/forward_lstm_1/bias:0' shape=(256,) dtype=float32_ref>,
 <tf.Variable 'bidirectional_1/backward_lstm_1/kernel:0' shape=(512, 256) dtype=float32_ref>,
 <tf.Variable 'bidirectional_1/backward_lstm_1/recurrent_kernel:0' shape=(64, 256) dtype=float32_ref>,
 <tf.Variable 'bidirectional_1/backward_lstm_1/bias:0' shape=(256,) dtype=float32_ref>]
Run Code Online (Sandbox Code Playgroud)

PyTorch LSTM的状态参数

 ['rnn.0.rnn.weight_ih_l0', torch.Size([256, 512])],
 ['rnn.0.rnn.weight_hh_l0', torch.Size([256, 64])],
 ['rnn.0.rnn.bias_ih_l0', torch.Size([256])],
 ['rnn.0.rnn.bias_hh_l0', torch.Size([256])],
 ['rnn.0.rnn.weight_ih_l0_reverse', torch.Size([256, 512])],
 ['rnn.0.rnn.weight_hh_l0_reverse', torch.Size([256, 64])],
 ['rnn.0.rnn.bias_ih_l0_reverse', torch.Size([256])],
 ['rnn.0.rnn.bias_hh_l0_reverse', torch.Size([256])],
Run Code Online (Sandbox Code Playgroud)

我试着查看两个实现的代码,但不能理解太多.

有人可以帮我把PyTorch的4组状态参数转换成Keras的3组状态参数

lstm keras pytorch

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

使用本地GPU的Google Colaboratory本地运行时

我正在使用Colaboratory和Pytorch来运行使用不寻常数据集的GAN,该数据集当前存储在本地计算机上。为了访问这些文件,我连接了本地运行时(按照https://research.google.com/colaboratory/local-runtimes.html)。但是,Colaboratory现在现在运行时会使用我自己的 GPU,而以前的运行并没有。我知道这是因为当前运行速度要慢得多,因为它们使用的是我的GTX 1060 6GB而不是Colab的Tesla K80。

我用这个检查了

torch.cuda.get_device_name(0)

当我在本地连接时,它将返回“ GeForce GTX 1060 6G”。即使选择了“编辑”->“笔记本设置”->“硬件加速器”->“ GPU” ,情况也是如此

但是,当我不在本地连接时,而是使用(默认)“连接到托管的运行时”选项时,

torch.cuda.get_device_name(0) 确实返回“ Tesla K80”。

我无法将数据集上传到云端硬盘,因为它是一个大型图像数据集,并且希望继续使用本地运行时。

如何同时使用本地运行时和Colab出色的Tesla K80?任何帮助将非常感激。

python machine-learning deep-learning pytorch google-colaboratory

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

PyTorch用于什么变换?

我是Pytorch的新手,并不是CNN的专家.我已经用他们提供Tutorial Pytorch的教程做了一个成功的分类,但我真的不明白我在加载数据时正在做什么.

他们为训练做了一些数据增加和规范化,但是当我尝试修改参数时,代码不起作用.

# Data augmentation and normalization for training
# Just normalization for validation
data_transforms = {
    'train': transforms.Compose([
        transforms.RandomResizedCrop(224),
        transforms.RandomHorizontalFlip(),
        transforms.ToTensor(),
        transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
    ]),
    'val': transforms.Compose([
        transforms.Resize(256),
        transforms.CenterCrop(224),
        transforms.ToTensor(),
        transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
    ]),
}
Run Code Online (Sandbox Code Playgroud)

我是否在扩展我的训练数据集?我没有看到数据扩充.

为什么我修改transforms.RandomResizedCrop(224)的值,数据加载停止工作?

我是否还需要转换测试数据集?

我对他们所做的数据转换有点困惑.

transformation image input pytorch

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

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冻结权重并更新param_groups

冻结pytorch中的砝码以进行param_groups设置。

因此,如果您想在训练期间冻结体重:

for param in child.parameters():
    param.requires_grad = False
Run Code Online (Sandbox Code Playgroud)

优化器也必须更新为不包括非梯度权重:

optimizer = torch.optim.Adam(filter(lambda p: p.requires_grad, model.parameters()), lr=opt.lr, amsgrad=True)
Run Code Online (Sandbox Code Playgroud)

如果要weight_decay对偏倚和权重使用不同的/学习率/这也允许不同的学习率:

param_groups = [{'params': model.module.bias_parameters(), 'weight_decay': args.bias_decay},
                {'params': model.module.weight_parameters(), 'weight_decay': args.weight_decay}]
Run Code Online (Sandbox Code Playgroud)

param_groups定义了一个dic 列表并将其传递SGD如下:

optimizer = torch.optim.Adam(param_groups, args.lr,
                                 betas=(args.momentum, args.beta))
Run Code Online (Sandbox Code Playgroud)

冻结单个砝码如何实现?在dic列表上运行filter或是否可以将张量单独添加到优化器?

python machine-learning computer-vision pytorch

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

PyTorch自定义损失功能

自定义损失函数应如何实施?使用以下代码会导致错误:

import torch
import torch.nn as nn
import torchvision
import torchvision.transforms as transforms
import numpy as np
import matplotlib.pyplot as plt
import torch.utils.data as data_utils
import torch.nn as nn
import torch.nn.functional as F

num_epochs = 20

x1 = np.array([0,0])
x2 = np.array([0,1])
x3 = np.array([1,0])
x4 = np.array([1,1])

num_epochs = 200

class cus2(torch.nn.Module):

    def __init__(self):
        super(cus2,self).__init__()

    def forward(self, outputs, labels):
        # reshape labels to give a flat vector of length batch_size*seq_len
        labels = labels.view(-1)  

        # mask out 'PAD' tokens
        mask …
Run Code Online (Sandbox Code Playgroud)

python deep-learning pytorch

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

在PyTorch中实现"无限循环"数据集和数据加载器

我想实现一个无限循环的Dataset和DataLoader.这是我试过的:

class Infinite(Dataset):
    def __len__(self):
        return HPARAMS.batch_size
#         return 1<<30 # This causes huge memory usage.
    def __getitem__(self, idx):
        """Randomly generates one new example."""
        return sample_func_to_be_parallelized()

infinite_loader = DataLoader(
    dataset=Infinite(), 
    batch_size=HPARAMS.batch_size, 
    num_workers=16,
    worker_init_fn=lambda worker_id: np.random.seed(worker_id),  
)

while True:
    for idx, data in enumerate(infinite_loader):
        # forward + backward on "data"
Run Code Online (Sandbox Code Playgroud)

如您所见,这里的主要挑战是__len()__方法.如果我在那里放一个足够大的数字,比如1 << 30,那么在火车循环的第一次迭代中,内存使用的症状就是JUMP TO 10 + GB.过了一会儿,工人们被杀,大概是因为OOM.

如果我在那里放一个小数字,如1或BATCH_SIZE,则会定期复制列车循环中的采样"数据".这不是我想要的,因为我希望在每次迭代时生成和训练新数据.

我猜测过多的内存使用的罪魁祸首是堆栈中的某个地方,一堆东西被缓存.随便看看Python方面的事情,我无法确定在哪里.

有人可以建议什么是我想要实现的最佳方式?(使用DataLoader的并行加载,同时保证每个加载的批次都是全新的.)

pytorch

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

Pytorch CNN无法学习,需要帮助找出原因

我正在与Pytorch进行CNN任务,但它不会学习并不能提高准确性。我与MNIST一起制作了一个版本,因此可以在此处发布。我只是在寻找为什么它不起作用的答案。该体系结构很好,我在Keras中实现了它,经过3个星期,我的准确率超过了92%。注意:我将MNIST重塑为60x60图片,因为这是我的“真实”问题中的图片。

import numpy as np
from PIL import Image
import torch
import torch.nn as nn
import torch.nn.functional as F
import torch.optim as optim
from torch.utils.data import DataLoader
from torch.autograd import Variable
from keras.datasets import mnist

(x_train, y_train), (x_test, y_test) = mnist.load_data()


def resize(pics):
    pictures = []
    for image in pics:
        image = Image.fromarray(image).resize((dim, dim))
        image = np.array(image)
        pictures.append(image)
    return np.array(pictures)


dim = 60

x_train, x_test = resize(x_train), resize(x_test) # because my real problem is in 60x60

x_train = x_train.reshape(-1, 1, …
Run Code Online (Sandbox Code Playgroud)

python conv-neural-network pytorch

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