You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CFNet训练加载Mish激活时遇Legacy autograd弃用错误,求解决方案

解决CFNet加载Mish激活函数时的RuntimeError问题

问题根源

你使用的Mish激活函数实现基于旧版PyTorch的torch.autograd.Function写法,未将forward方法定义为静态方法,不符合新版PyTorch的要求,因此触发弃用错误。

解决方案

有两种可行的修改方式,任选其一即可:

方式一:修正自定义autograd Function的写法

找到项目中Mish激活函数的实现代码,将forward和backward方法改为静态方法,并用ctx替代原代码中的self来处理张量保存与读取:

旧版错误写法示例:

class MishFunction(torch.autograd.Function):
    def forward(self, x):
        self.save_for_backward(x)
        return x * torch.tanh(F.softplus(x))

    def backward(self, grad_output):
        x = self.saved_tensors[0]
        sx = torch.sigmoid(x)
        fx = F.softplus(x).tanh()
        return grad_output * (fx + x * sx * (1 - fx * fx))

修改后的正确写法:

import torch
import torch.nn.functional as F
import torch.nn as nn

class MishFunction(torch.autograd.Function):
    @staticmethod
    def forward(ctx, x):
        ctx.save_for_backward(x)
        return x * torch.tanh(F.softplus(x))

    @staticmethod
    def backward(ctx, grad_output):
        x, = ctx.saved_tensors
        sx = torch.sigmoid(x)
        fx = F.softplus(x).tanh()
        return grad_output * (fx + x * sx * (1 - fx * fx))

class Mish(nn.Module):
    def forward(self, x):
        return MishFunction.apply(x)

方式二:简化Mish实现(推荐)

新版PyTorch支持自动求导,无需手动定义torch.autograd.Function,直接用纯张量运算实现Mish,代码更简洁且无版本兼容问题:

import torch
import torch.nn.functional as F
import torch.nn as nn

class Mish(nn.Module):
    def forward(self, x):
        return x * torch.tanh(F.softplus(x))

验证修改

替换项目中的Mish激活函数实现后,重新启动CFNet训练,即可消除该RuntimeError。

内容的提问来源于stack exchange,提问作者HamedRK89

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 19:48:25