项目场景:
深度学习项目中,对神经网络进行编层。出现
ValueError: optimizer got an empty parameter list
问题描述:
ValueError: optimizer got an empty parameter list!
一定要具体问题具体分析。
先直接定位出错代码层,
从出错代码层可以直接看到没有self传参
class Classifier(nn.Module):
def __init__(self):
super(Classifier, self).__init__()
postion_embedding = Positional_Encoding(embed, pad_size, dropout, device)
encoder = Encoder(dim_model, num_head, hidden, dropout)
encoders = nn.ModuleList([
copy.deepcopy(self.encoder)
for _ in range(num_encoder)])
原因分析:
非常简单,没有正确定义网络,导致模型收不到参数。
解决方案:
将网络各层加上self.前缀,让模型能够正常接收参数。
class Classifier(nn.Module):
def __init__(self):
super(Classifier, self).__init__()
self.postion_embedding = Positional_Encoding(embed, pad_size, dropout, device)
self.encoder = Encoder(dim_model, num_head, hidden, dropout)
self.encoders = nn.ModuleList([
copy.deepcopy(self.encoder)
for _ in range(num_encoder)])