赞
踩
在使用torch.multinomial()对rnn网络输出值进行选择时,当学习率高于0.000001时,运行报错“RuntimeError: invalid multinomial distribution (encountering probability entry < 0)。
然而,低学习率情况下,我的算法根本学习不到东西。
该报错的意思是指多项式分布无效,遇见概率条目小于零的情况。
考虑到我的神经网络不应该出现负值,我定位到运行一段时间后,神经网络输出值全为nan。我突发奇想,在全连接层后添加一个Softmax()激活函数将输出映射至0到1区间。再次运行后,该报错消失。在此处贴出我的神经网络,供大家参考:
def __init__(self, num_actions):
super(PolicyNetwork, self).__init__()
self.conv1 = nn.Conv1d(1, 5, kernel_size=2)
self.bn1 = nn.BatchNorm1d(5)
self.conv2 = nn.Conv1d(5, 10, kernel_size=3)
self.bn2 = nn.BatchNorm1d(10)
self.conv3 = nn.Conv1d(10, 10, kernel_size=3)
self.bn3 = nn.BatchNorm1d(10)
self.head = nn.Linear(140, num_actions)
self.softmax = nn.Softmax()
除此之外,我也考虑过是否是梯度消失或者梯度爆炸的问题,在反向传播阶段添加了梯度截断。
for param in model.parameters():
param.grad.data.clamp_(-500, 500)
希望下次遇到该报错,可以回顾本帖。
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。