Inception_v3的奇怪行为

时间:2019-05-15 09:43:22

标签: computer-vision pytorch autograd

我正在尝试基于预先训练的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)

请帮助。

1 个答案:

答案 0 :(得分:1)

感谢@iacolippo,该问题已解决。原来问题出在Pytorch 1.0.0。 Pytorch 0.4.1没问题。但是。