我有一个用于多类分类(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”必须被输入到激活函数中,这样三个神经元中的每一个都可以计算概率激活,总和为一个。
我为这三个输出神经元编写的代码是:
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,)。
我的目的是减少'Z2‘的形状(m,n),并使用softmax激活函数(1,n)对每个'n’神经元。
这里,“m”是训练示例的数量,“n”是课程的数量。
我做错了什么?
谢谢!
发布于 2019-11-15 01:40:44
据我所知,第二次激活的方程式应该是:
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列的解释是输入属于n类的概率,对于每个m输入行。
https://stackoverflow.com/questions/58868986
复制相似问题