RuntimeError: Cannot insert a Tensor that requires grad as a constant. Consider making it a parameter or input, or detaching the gradient
volkov-maxim opened this issue · 2 comments
Hi!
I faced the RuntimeError: Cannot insert a Tensor that requires grad as a constant. Consider making it a parameter or input, or detaching the gradient
when tracing encoder (-enc mobilenet_v3_large) from the cflow-ad network with torch.jit.trace()
function.
I fed in trace function simplified version of test_meta_epoch
function and single image (as tensor torch.Size([1, 3, 512, 512])).
Script fails on line with _ = c.encoder(image)
.
Please explain to me, what should I change in code to resolve this task?
Traceback (most recent call last):
File "convert_cflow-ad.py", line 187, in <module>
traced_model = torch.jit.trace(test_model, image)
File "/Users/user/Projects/project/lib/python3.8/site-packages/torch/jit/_trace.py", line 780, in trace
traced = torch._C._create_function_from_trace(
File "convert_cflow-ad.py", line 72, in test_model
_ = c.encoder(image) # BxCxHxW
File "/Users/user/Projects/project/lib/python3.8/site-packages/torch/nn/modules/module.py", line 1051, in _call_impl
return forward_call(*input, **kwargs)
File "/Users/user/Projects/project/lib/python3.8/site-packages/torch/nn/modules/module.py", line 1039, in _slow_forward
result = self.forward(*input, **kwargs)
File "/Users/user/Projects/project/lib/python3.8/site-packages/torch/nn/modules/container.py", line 139, in forward
input = module(input)
File "/Users/user/Projects/project/lib/python3.8/site-packages/torch/nn/modules/module.py", line 1051, in _call_impl
return forward_call(*input, **kwargs)
File "/Users/user/Projects/project/lib/python3.8/site-packages/torch/nn/modules/module.py", line 1039, in _slow_forward
result = self.forward(*input, **kwargs)
File "/Users/user/Projects/project/lib/python3.8/site-packages/torch/nn/modules/container.py", line 139, in forward
input = module(input)
File "/Users/user/Projects/project/lib/python3.8/site-packages/torch/nn/modules/module.py", line 1051, in _call_impl
return forward_call(*input, **kwargs)
File "/Users/user/Projects/project/lib/python3.8/site-packages/torch/nn/modules/module.py", line 1039, in _slow_forward
result = self.forward(*input, **kwargs)
File "/Users/user/Projects/project/lib/python3.8/site-packages/torch/nn/modules/conv.py", line 443, in forward
return self._conv_forward(input, self.weight, self.bias)
File "/Users/user/Projects/project/lib/python3.8/site-packages/torch/nn/modules/conv.py", line 439, in _conv_forward
return F.conv2d(input, weight, bias, self.stride,
RuntimeError: Cannot insert a Tensor that requires grad as a constant. Consider making it a parameter or input, or detaching the gradient
@volkov-maxim Encoder is just a conventional CNN feature extractor from PyTorch zoo or timm lib. So, it should work. However, I don't know what is c. in c.encoder(image) that is not part of my code. In my code c. is used for configuration which may overlap with your c.
@gudovskiy Hi Denis!
Thank you for your answer. Your feature extractor works fine.
The reason of the error is in passing the module’s method instead of the module instance in traced function.
Excuse me for false alarm.