Hi
When i try to save my model using torch.save i get this error.
Could you post a minimal code snippet to reproduce this issue, please?
Sorry
Here is my code. As far as i know this error also occurs in spyder when you run the code twice in ide like spyder without commenting the import torch line on the second run
#import torch
import matplotlib.pyplot as plt
import numpy as np
import cv2
class down(torch.nn.Module):
def __init__(self,channel_in,channel_out,ksize=1):
super(down, self).__init__()
self.conv1=torch.nn.Conv2d(channel_in,channel_out,ksize)
self.conv2=torch.nn.Conv2d(channel_out,channel_out,ksize)
def forward(self,x):
relu=self.conv1(x).clamp(min=0)
#relu=self.conv2(relu).clamp(min=0)
return relu
class up(torch.nn.Module):
def __init__(self,channel_in,channel_out,ksize=3,space_dropout=False):
super(up, self).__init__()
self.up1=torch.nn.ConvTranspose2d(channel_in,channel_out,ksize)
self.conv3=torch.nn.Conv2d(channel_out,channel_out,ksize)
self.conv4=torch.nn.Conv2d(channel_out,channel_out,ksize)
def forward(self,x):
relu=self.up1(x)
relu=self.conv3(relu).clamp(min=0)
relu=self.conv4(relu).clamp(min=0)
return relu
class Net(torch.nn.Module):
def __init__(self):
super(Net, self).__init__()
self.d1=down(3,64)
self.d2=down(64,128)
self.d3=down(128,256)
self.d4=down(256,512)
self.u11=up(512,256)
self.u1=up(256,128)
self.u2=up(128,64)
self.u3=up(64,1)
def forward(self,x):
b=self.d1(x)
b=self.d2(b)
b=self.d3(b)
b=self.d4(b)
b=self.u11(b)
b=self.u1(b)
b=self.u2(b)
b=self.u3(b)
return b
net=Net()
net=net.float()
lr=1e-05
X=np.load('/media/jatin/OS/Users/Jatin/Desktop/STUFF/CNN/Semantic segmentation/input_128.npy')
print(len(X))
Y=np.load('/media/jatin/OS/Users/Jatin/Desktop/STUFF/CNN/Semantic segmentation/output_128.npy')
loss_function=torch.nn.BCELoss()
optimizer=torch.optim.Adam(net.parameters())
for i in range(1):
x=X[i]
y=Y[i]
y=cv2.resize(y,(120,120))
x=np.reshape(x,(-1,3,128,128))
x=torch.from_numpy(x)
y=np.reshape(y,(-1,1,120,120))
y=torch.from_numpy(y)
y_pred=net(x.float())
loss=loss_function(y_pred.float(),y.float())
print('loss '+str(i)+'th iter=',loss)
loss.backward()
net.zero_grad()
optimizer.step()
path='/home/jatin/CNN/sem_seg_12.pt'
torch.save(net,path)
Thanks for the code.
I’ve formatted it for easier debugging. You can add code snippets by wrapping them in three backticks ```
Could you try to save the state_dict
instead of the complete model via: torch.save(net.state_dict(), path)
?
Also, note that you are currently not training the model, since you are zeroing out the gradients after they were calculated.
Move net.zero_grad()
further up or down in the code. It should not be called between loss.backward()
and optimizer.step()
.
Thank you very much.I will try this and inform you the results.
I tried that, still got the error
The code works for me:
import matplotlib.pyplot as plt
import numpy as np
class down(torch.nn.Module):
def __init__(self,channel_in,channel_out,ksize=1):
super(down, self).__init__()
self.conv1=torch.nn.Conv2d(channel_in,channel_out,ksize)
self.conv2=torch.nn.Conv2d(channel_out,channel_out,ksize)
def forward(self,x):
relu=self.conv1(x).clamp(min=0)
#relu=self.conv2(relu).clamp(min=0)
return relu
class up(torch.nn.Module):
def __init__(self,channel_in,channel_out,ksize=3,space_dropout=False):
super(up, self).__init__()
self.up1=torch.nn.ConvTranspose2d(channel_in,channel_out,ksize)
self.conv3=torch.nn.Conv2d(channel_out,channel_out,ksize)
self.conv4=torch.nn.Conv2d(channel_out,channel_out,ksize)
def forward(self,x):
relu=self.up1(x)
relu=self.conv3(relu).clamp(min=0)
relu=self.conv4(relu).clamp(min=0)
return relu
class Net(torch.nn.Module):
def __init__(self):
super(Net, self).__init__()
self.d1=down(3,1)
self.d2=down(1,1)
self.d3=down(1,1)
self.d4=down(1,1)
self.u11=up(1,1)
self.u1=up(1,1)
self.u2=up(1,1)
self.u3=up(1,1)
def forward(self,x):
b=self.d1(x)
b=self.d2(b)
b=self.d3(b)
b=self.d4(b)
b=self.u11(b)
b=self.u1(b)
b=self.u2(b)
b=self.u3(b)
return b
net=Net()
net=net.float()
lr=1e-05
x = torch.randn(1, 3, 128, 128)
print(len(X))
y = torch.randn(1, 1, 120, 120)
loss_function=torch.nn.BCELoss()
optimizer=torch.optim.Adam(net.parameters())
for i in range(1):
y_pred=net(x.float())
loss=loss_function(y_pred.float(),y.float())
print('loss '+str(i)+'th iter=',loss)
loss.backward()
net.zero_grad()
optimizer.step()
torch.save(net.state_dict(),'tmp.pt')
I can’t even find a call to detach()
, so I’m not sure what’s causing this error.
Could you post the stack trace?
This one works for me too. But when i run it again in Spyder i get the error,even when i change the file name. And btw what is a stack trace
Could you post the complete error message, please?
here @ptrblck
File “”, line 1, in
runfile(‘/home/trek/projects/CNN/gans.py’, wdir=‘/home/trek/projects/CNN’)File “/usr/lib/python3/dist-packages/spyder_kernels/customize/spydercustomize.py”, line 678, in runfile
execfile(filename, namespace)File “/usr/lib/python3/dist-packages/spyder_kernels/customize/spydercustomize.py”, line 106, in execfile
exec(compile(f.read(), filename, ‘exec’), namespace)File “/home/trek/projects/CNN/gans.py”, line 8, in
from torchvision.utils import save_imageFile “/home/trek/.local/lib/python3.7/site-packages/torchvision/init.py”, line 3, in
from torchvision import modelsFile “/home/trek/.local/lib/python3.7/site-packages/torchvision/models/init.py”, line 1, in
from .alexnet import *File “/home/trek/.local/lib/python3.7/site-packages/torchvision/models/alexnet.py”, line 1, in
import torchFile “/home/trek/.local/lib/python3.7/site-packages/torch/init.py”, line 239, in
from .tensor import TensorFile “/home/trek/.local/lib/python3.7/site-packages/torch/tensor.py”, line 41, in
class Tensor(torch._C._TensorBase):File “/home/trek/.local/lib/python3.7/site-packages/torch/tensor.py”, line 285, in Tensor
“”")RuntimeError: method ‘detach’ already has a docstring
Sorry, I’ve never seen this error before.
Is this error only raised in Spyder?
If so, could you update it to the latest version?
Yes,this occurs only in spyder. I ran the same code in jupyter and it was perfectly fine
Thanks for the information.
Which Spyder version are you using? If the latest (>= 4), could you create an issue on the Spyder GitHub and link it here, please?
Hey, I was experiencing a similar issue (it seems to occur when re-importing torch by say running a script twice). I made sure my Spyder was up to date and submitted an issue here: https://github.com/spyder-ide/spyder/issues/12701 . Thanks and best.