使用numpy对softmax激活进行编码



我有一个用于多类分类(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"是类的数量。

我做错了什么?

谢谢!

根据我的理解,第二次激活的方程式应该是:

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

Z2的软最大值可以执行为:

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

o第n列的解释是您的输入属于m个输入行中每一行的第n类的概率。

最新更新