我正在设计一个神经网络,从头开始预测 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]