我想让不同的损失相对于不同的变量计算它们的梯度,然后所有这些变量都步长在一起。 下面是一个简单的例子,演示了我想要的东西: import torch as T
x = T.randn(3, requires_grad = True)
y = T.randn(4, requires_grad = True)
z = T.randn(5, requires_grad = True)
x_opt = T.optim.Adadelta([x])
y_opt = T.optim.Adadelta([y])
z_opt = T.optim.Adadelta([z])
for i in range(n
https://colab.research.google.com/github/pytorch/tutorials/blob/gh-pages/_下载/神经_网络_tutorial.ipynb
嗨,我正试着用火把来理解神经网络。我对梯度计算有疑问。
将torch.optim导入为optim
create your optimizer
optimizer = optim.SGD(net.parameters(), lr=0.01)
# in your training loop:
optimizer.zero_grad() # zero the gradient buffers
outpu
我想用PyTorch制作一个自动校准系统。
我尝试把齐次变换矩阵作为神经网络的权值来处理。
我编写了一个引用PyTorch教程的代码,但是在调用反向方法之后,我的自定义参数不会被更新。
当我打印每个参数的'grad‘属性时,它是一个None。
我的密码在下面。有什么不对劲吗?
请给我任何建议。谢谢。
import torch
import torch.nn as nn
import torch.nn.functional as F
import torch.optim as optim
import numpy as np
class Net(nn.Module):
def
我尝试在Pytorch中定义一个简单的模型。该模型计算高斯分布的负对数概率: import torch
import torch.nn as nn
class GaussianModel(nn.Module):
def __init__(self):
super(GaussianModel, self).__init__()
self.register_parameter('mean', nn.Parameter(torch.zeros(1),
我想知道如何处理PyTorch中的就地操作。正如我所记得的,在autograd中使用就地操作总是有问题的。
实际上,我很惊讶下面的代码能够工作,即使我还没有对它进行测试,我相信这段代码会在0.3.1版本中引发一个错误。
基本上,我想要做的是把张量向量的某个位置设为一个类似的值:
my_tensor[i] = 42
工作示例代码:
# test parameter a
a = torch.rand((2), requires_grad=True)
print('a ', a)
b = torch.rand(2)
# calculation
c = a + b
# perfor
我正在建立一个非常简单的模型来学习泊松模型中的参数,我不知道我在哪里出错。我正在使用pytorch.nn并执行以下操作。
我做了一些非常简单的假数据
# This is the value I am trying to estimate
x = torch.tensor(2.0)
# This is a value drawn from the Poisson(x) distribution
# In this example it is 4
y = torch.poisson(x).reshape(1)
然后我建立了一个非常简单的模型
# I initialised the par
如何在PyTorch中区分矩阵?我尝试过以下几种方法,但都不起作用:
实例1:
a = torch.tensor([1., 2, 3], requires_grad=True)
b = torch.tensor([4., 5, 6], requires_grad=True)
c = a*b
c.backward()
#print(b.grad)
>>> RuntimeError: grad can be implicitly created only for scalar outputs
实例2:
a = torch.tensor([1., 2, 3], requires
我试着训练一个模型来估计一个GMM。但是,每次计算GMM的平均值都是基于一个mean_placement参数。按照提供的解决方案,我将复制和粘贴原始代码:
import numpy as np
import matplotlib.pyplot as plt
import sklearn.datasets as datasets
import torch
from torch import nn
from torch import optim
import torch.distributions as D
num_layers = 8
weights = torch.ones(8,requi
我正在编写一个演示代码来预测10-D输入数据集的2类分类。下面,函数_data生成数据:
import math
import numpy as np
import torch
import torch.nn as nn
import torch.optim as optim
def _data(dimension, num_examples):
# Create a simulated 10-dimensional training dataset consisting of 1000 labeled
# examples, of which 800 are labeled
下面是一个玩具示例,解释了我实际想要做的事情。
import torch
from torch import nn
from torch.autograd import Variable
import torch.nn.functional as F
import torch.optim as optim
# toy feed-forward net
class Net(nn.Module):
def __init__(self):
super(Net, self).__init__()
self.fc1 = nn.Linear(10, 5)
我正在Pytorch中使用实现SegNet,我想对它进行细化。我在网上阅读过,我找到了方法(基本上冻结了所有的层,除了最后一个在您的网络中)。我的问题是SegNet有100多个层,我正在寻找一种更简单的方法,而不是编写100行代码。
你觉得这个能行吗?还是这完全是胡说八道?
import torch.optim as optim
model = SegNet()
for name, param in model.named_modules():
if name != 'conv11d': # the last layer should remain active
我正在为MNIST数据集在PyTorch中编写一个LeNet;我添加了一个张量self.mask_fc1\2\3来屏蔽完整连接层的某些特定连接。代码如下: import torch
import torchvision
import torchvision.transforms as transforms
import matplotlib.pyplot as plt
import numpy as np
import torch.nn as nn
import torch.nn.functional as F
import torch.optim as optim
def loadMNI
作为实验,我正在尝试将旧代码转换为PyTorch代码。最终,我将在10,000+ x 100矩阵上进行回归,适当地更新权重等等。 为了学习,我正在慢慢地扩大玩具示例的规模。我用下面的示例代码碰壁了。 import torch
import torch.nn as nn
import torch.nn.functional as funct
from torch.autograd import Variable
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu
我试图在PyTorch中区分一个梯度。我找到了链接,但无法让它工作。
我的代码如下:
import torch
from torch.autograd import grad
import torch.nn as nn
import torch.optim as optim
class net_x(nn.Module):
def __init__(self):
super(net_x, self).__init__()
self.fc1=nn.Linear(2, 20)
self.fc2=nn.Lin
这是我在处理一些合成数据时收到的错误消息。我有点困惑,因为错误仍然存在,尽管我做了我被建议做的事情。这可能与我没有指定批处理的事实有关吗?使用PyTorch数据集可以缓解这个问题吗? 以下是我的代码(我是PyTorch新手,现在才开始学习) --它应该是可重现的: 数据创建: x, y = np.meshgrid(np.random.randn(100) , np.random.randn(100))
z = 2 * x + 3 * y + 1.5 * x * y - x ** 2 - y**2
X = x.ravel().reshape(-1, 1)
Y = y.ravel().r
这是我写的代码,我试着到处修改,并且总是得到相同的错误。由于我是PyTorch的初学者,我只是在尝试一些东西,看看机器学习是否能在线性数据集上工作。所以,我随机地初始化了一个数据集。然后,建立了一个单一的线性神经网络。然后,对线性数据进行神经网络训练。尽管如此,我有一个错误,说明matmul期望一个1d数据,但是我的数据至少是1d,但是被读取为0d。
import torch
import torch.nn as nn
import torch.nn.functional as F
import torch.optim as optim
import random
class Linear
我正试图用torch.optim.adam优化场景顶点的翻译。这是redner教程系列中的一段代码,它可以很好地处理初始设置。它试图优化一个场景,用相同的值(称为translation )移动所有顶点。这是原始代码:
vertices = []
for obj in base:
vertices.append(obj.vertices.clone())
def model(translation):
for obj, v in zip(base, vertices):
obj.vertices = v + translation
# Assemble
我不确定PyTorch恒流如何将损失函数与我想要计算的模型联系起来。在损失和模型之间从来没有明确的引用,比如模型的参数和优化器之间的引用。
例如,我想在同一个数据集上训练2个网络,所以我想利用数据集中的一次传递。PyTorch将如何将适当的损失函数链接到适当的模型。以下是供参考的代码:
import torch
from torch import nn, optim
import torch.nn.functional as F
from torchvision import datasets, transforms
import shap
# Define a transform to n
在我以前的中,我发现了如何使用PyTorch的自动梯度来区分。它起了作用:
#autograd
import torch
from torch.autograd import grad
import torch.nn as nn
import torch.optim as optim
class net_x(nn.Module):
def __init__(self):
super(net_x, self).__init__()
self.fc1=nn.Linear(1, 20)
self.fc2=n
我目前正在使用PyTorch进行深度神经网络。我写了一个玩具神经网络,如下所示,我发现是否为标签y设置requires_grad=True会产生巨大的差异。当为y.requires_grad=True时,神经网络会发生分歧。我想知道为什么会发生这种情况。
import torch
x = torch.unsqueeze(torch.linspace(-1, 1, 100), dim=1)
y = x.pow(2) + 10 * torch.rand(x.size())
x.requires_grad = True
# this is where problem occurs
y.requ
我对火把很陌生。我正在实现一个网络,它有两个分类器(黄色和紫色),如所示。问题是,当网络训练黄色分类器时,我要冻结红色部分;在网络训练紫色分类器时,我要解冻红色部分。
下面是我想要实现的一个简短的代码
# x is input and y_yellow, y_purple are labels of yellow and purple classifiers respectively.
criterion = CrossEntropyLoss()
opt = SGD()
model = my_model()
opt.zero_grad()
yellow_out, purple_out = m
根据docs,如果张量是非标量的(即它的数据有多个元素),并且需要梯度,则当我们将后向函数调用到张量时,该函数还需要指定梯度。
import torch
a = torch.tensor([10.,10.],requires_grad=True)
b = torch.tensor([20.,20.],requires_grad=True)
F = a * b
F.backward(gradient=torch.tensor([1.,1.]))
print(a.grad)
Output: tensor([20., 20.])
现在,缩放外部梯度:
a = torch.tensor([10.