RuntimeError: invalid multinomial distribution (encountering probability entry < 0)

在使用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)

希望下次遇到该报错,可以回顾本帖。

你可能感兴趣的:(python,深度学习,rnn)