ValueError: optimizer got an empty parameter list.

本文讲述了ValueError:optimizergotanemptyparameterlist的常见原因,主要涉及__init__函数中的错误,如下划线使用不当、拼写错误等,并详细介绍了Python中关于下划线命名规则的总结。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ValueError:optimizer got an empty parameter list基本都跟__init__()及其里面的代码有关,比如下划线打错了、init拼错了、没有super、没在__init__函数内定义网络等。

错误分析
之前从来没有遇到过这类错误,毕竟按理说只要将模型定义到__init__()里就ok了,所以同学来问没能调出来。后来要了代码自己调发现_init_竟然只有一个下划线!

将下划线_改为__即可解决问题。

在此复习一下下面五种情况:

单前导下划线:_var

以单个下划线开头的变量或方法仅供内部使用。 该约定在PEP 8中有定义。

单末尾下划线:var_

解决命名冲突:有时候,一个变量的最合适的名称已经被一个关键字所占用。 因此,像class或def这样的名称不能用作Python中的变量名称。 在这种情况下,你可以附加一个下划线来解决命名冲突。

双前导下划线:__var

双下划线前缀会导致Python解释器重写属性名称,以避免子类中的命名冲突。这也叫做名称修饰(name mangling) - 解释器更改变量的名称,以便在类被扩展的时候不容易产生冲突。

双前导和末尾下划线:__var__

如果一个名字同时以双下划线开始和结束,则不会应用名称修饰。 由双下划线前缀和后缀包围的变量不会被Python解释器修改。但是,Python保留了有双前导和双末尾下划线的名称,用于特殊用途。 这样的例子有,__init__对象构造函数,或__call__ --- 它使得一个对象可以被调用(神奇方法)。最好避免在自己的程序中使用以双下划线("dunders")开头和结尾的名称,以避免与将来Python语言的变化产生冲突。

独立单下划线:_

按照习惯,有时候单个独立下划线是用作一个名字,来表示某个变量是临时的或无关紧要的。

总结
ValueError:optimizer got an empty parameter list基本都跟__init__()及其里面的代码有关,比如下划线打错了、init拼错了、没有super、没在__init__函数内定义网络等。


————————————————
版权声明:本文为优快云博主「R.X. NLOS」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.youkuaiyun.com/qazwsxrx/article/details/107936711

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值