使用numpy编码softmax激活

时间:2019-11-15 01:22:54

标签: python numpy neural-network

我正在使用具有以下架构的用于多类分类(3类)的神经网络:

输入层具有2个神经元,用于2个输入要素

有一个具有4个神经元的隐藏层

输出层具有3个神经元,对应于3种要预测的类别

Sigmoid激活函数用于隐藏层神经元,softmax激活函数用于输出层。

网络中使用的参数如下:

从输入层到隐藏层的权重的形状为(4,2)

隐藏层的偏移=(1,4)

从隐藏层到输出层的权重的形状为(3,4)

输出层的偏移=(1,3)

正向传播的编码如下:

Z1 = np.dot(X, W1.T) + b1   # Z1.shape = (m, 4); 'm' is number of training examples
A1 = sigmoid(Z1)   # A1.shape = (m, 4)
Z2 = np.dot(W2, A1.T) + b2.T  # Z2.shape = (3, m)

现在必须将“ Z2”输入激活函数中,以便三个神经元中的每一个都可以计算出总计为一个的概率激活。

我对3个输出神经元的代码是:

o1 = np.exp(Z2[0,:])/np.exp(Z2[0,:]).sum()   # o1.shape = (m,)
o2 = np.exp(Z2[1,:])/np.exp(Z2[1,:]).sum()   # o2.shape = (m,)
o1 = np.exp(Z2[3,:])/np.exp(Z2[3,:]).sum()   # o3.shape = (m,)

我希望每个o1,o2和o3输出一个形状为(3,)的向量。

我的目标是减少形状为(m,n)的'Z2',并对'n'个神经元的每一个使用softmax激活函数为(1,n)。

在这里,“ m”是训练示例的数量,“ n”是课程的数量。

我在做什么错了?

谢谢!

1 个答案:

答案 0 :(得分:1)

据我了解,第二次激活的方程式应为:

Z2 = np.dot(A1, W2.T) + b2.T # Z2.shape = (m,3)

Z2的soft-max可以执行为:

o = np.exp(Z2)/np.sum(np.exp(Z2), axis=1) # o.shape = (m,3)

o的第n列的解释是,您的输入对于m个输入行中的每行都属于第n个类。