Softmax 函数在神经网络中返回 nan 或全零

时间:2021-03-04 09:46:57

标签: python numpy neural-network activation-function

我正在设计一个神经网络,从头开始预测 MNIST 数据集,层数为 784、500、500、10。 在前向传播函数中,我的 softmax 函数返回 nan 值,我尝试通过减去最大值来解决它

def softmax(a):
    B = np.exp(a - np.max(a))
    C = np.sum(B)
    return B/C

尝试此操作后,我的 softmax 返回全零。

前向传播函数如下所示:

def fprop(self, batch_input, train=True):   
        inputl = batch_input
        self.net['z%s' % 0] = batch_input
        self.net['a%s' % 0] = batch_input
        for l in range(1, self.num_layers + 1):
            w = self.parameters['W%s' % l]
            dp = np.dot(w, inputl)
            pre_act = dp + self.parameters['b%s' % l]
            self.net['a%s' % l] = pre_act
            if self.activations_func[l] == 'sigmoid':
                self.net['z%s' % l] = sigmoid(self.net['a%s' % l])
            elif self.activations_func[l] == 'tanh':
                self.net['z%s' % l] = tanh(self.net['a%s' % l])
            elif self.activations_func[l] == 'relu':
                self.net['z%s' % l] = relu(self.net['a%s' % l])
            elif self.activations_func[l] == 'lrelu':
                self.net['z%s' % l] = lrelu(self.net['a%s' % l], 0.1)
            elif self.activations_func[l] == 'identity':
                self.net['z%s' % l] = identity(self.net['a%s' % l])
            elif self.activations_func[l] == 'softmax':
                self.net['z%s' %l] = softmax(pre_act)
            inputl = self.net['z%s' % l]

0 个答案:

没有答案