我正在尝试基于预先训练的Inception_v3创建一个生成网络。
1)我固定了模型中的所有权重
2)创建一个大小为(2,3,299,299)的变量
3)创建尺寸为(2,1000)的目标,我希望通过优化变量使最终层的激活尽可能接近。 (我没有将batchsize设置为1,因为与VGG16不同,Inception_v3的batchsize = 1并不重要,但这不是重点。)
以下代码应该可以工作,但是会给我错误:«RuntimeError:渐变计算所需的变量之一已通过就地操作进行了修改»。
java.net.ConnectException: Connection timed out: connect
at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:85)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:589)
at
这很奇怪,因为如果我对VGG16做同样的事情,那么一切都会很好:
# minimalist code with Inception_v3 that throws the error:
import torch
from torch.autograd import Variable
import torch.optim as optim
import torch.nn as nn
import torchvision
torch.set_default_tensor_type('torch.FloatTensor')
Iv3 = torchvision.models.inception_v3(pretrained=True)
for i in Iv3.parameters():
i.requires_grad = False
criterion = nn.CrossEntropyLoss()
x = Variable(torch.randn(2, 3, 299, 299), requires_grad=True)
target = torch.empty(2, dtype=torch.long).random_(1000)
output = Iv3(x)
loss = criterion(output[0], target)
loss.backward()
print(x.grad)
请帮助。
答案 0 :(得分:1)
感谢@iacolippo,该问题已解决。原来问题出在Pytorch 1.0.0。 Pytorch 0.4.1没问题。但是。