博客主页瑕疵的CSDN主页 Gitee主页瑕疵的gitee主页⏩ 文章专栏《热点资讯》PyTorch自定义层报错从“No grad”到“Hello World”的深夜血泪目录昨晚写自定义层PyTorch突然报错RuntimeError: element 0 of tensors does not require grad and does not have a grad_fn我盯着屏幕咖啡凉了三杯。这玩意儿明明在文档里写得明明白白啊核心根源自定义层没继承nn.Module的初始化逻辑。__init__里忘了调用super().__init__()导致模块状态乱成一锅粥。梯度计算直接崩了——PyTorch以为你没在训练。错误示范我踩坑实录importtorchimporttorch.nnasnnclassMyLayer(nn.Module):def__init__(self,in_dim,out_dim):# 错没调用父类初始化self.linearnn.Linear(in_dim,out_dim)# 这行代码没用defforward(self,x):returnself.linear(x)# 测试代码layerMyLayer(10,5)xtorch.randn(1,10)ylayer(x)# 报错运行结果RuntimeError: element 0 of tensors does not require grad and does not have a grad_fn正确姿势加了关键一行importtorchimporttorch.nnasnnclassMyLayer(nn.Module):def__init__(self,in_dim,out_dim):super().__init__()# 必须调用父类初始化self.linearnn.Linear(in_dim,out_dim)# 现在能用了defforward(self,x):returnself.linear(x)# 测试代码layerMyLayer(10,5)xtorch.randn(1,10)ylayer(x)# 成功无报错关键提示does not require grad本质是模块初始化失败避坑总结自定义层第一行永远写super().__init__()别问为什么代码里加注释# 必须调用父类初始化否则梯度全崩测试时先跑layer.train()确认无报错我踩过三次坑才记住PyTorch的报错不是在骂你是在哭着说“你没初始化我”。现在写自定义层手一抖就想起昨晚的咖啡渍。记住别让super()在深夜等你。
PyTorch自定义层定义报错怎么办?教你一招避坑
发布时间:2026/6/6 8:53:28
博客主页瑕疵的CSDN主页 Gitee主页瑕疵的gitee主页⏩ 文章专栏《热点资讯》PyTorch自定义层报错从“No grad”到“Hello World”的深夜血泪目录昨晚写自定义层PyTorch突然报错RuntimeError: element 0 of tensors does not require grad and does not have a grad_fn我盯着屏幕咖啡凉了三杯。这玩意儿明明在文档里写得明明白白啊核心根源自定义层没继承nn.Module的初始化逻辑。__init__里忘了调用super().__init__()导致模块状态乱成一锅粥。梯度计算直接崩了——PyTorch以为你没在训练。错误示范我踩坑实录importtorchimporttorch.nnasnnclassMyLayer(nn.Module):def__init__(self,in_dim,out_dim):# 错没调用父类初始化self.linearnn.Linear(in_dim,out_dim)# 这行代码没用defforward(self,x):returnself.linear(x)# 测试代码layerMyLayer(10,5)xtorch.randn(1,10)ylayer(x)# 报错运行结果RuntimeError: element 0 of tensors does not require grad and does not have a grad_fn正确姿势加了关键一行importtorchimporttorch.nnasnnclassMyLayer(nn.Module):def__init__(self,in_dim,out_dim):super().__init__()# 必须调用父类初始化self.linearnn.Linear(in_dim,out_dim)# 现在能用了defforward(self,x):returnself.linear(x)# 测试代码layerMyLayer(10,5)xtorch.randn(1,10)ylayer(x)# 成功无报错关键提示does not require grad本质是模块初始化失败避坑总结自定义层第一行永远写super().__init__()别问为什么代码里加注释# 必须调用父类初始化否则梯度全崩测试时先跑layer.train()确认无报错我踩过三次坑才记住PyTorch的报错不是在骂你是在哭着说“你没初始化我”。现在写自定义层手一抖就想起昨晚的咖啡渍。记住别让super()在深夜等你。