我有一个用于多类分类(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类的概率。