我正在使用具有以下架构的用于多类分类(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”是课程的数量。
我在做什么错了?
谢谢!
答案 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个类。