我正在实现一个多类神经网络,该网络将识别输入图像中的数字。输入图像为五乘五像素,显示五个数字。因此,神经网络模型包含25个输入节点。 4个输出节点(我们必须对5个输出进行分类)和50个隐藏节点。我将sigmoid函数用作隐藏节点的激活函数,并将softmax函数用作输出节点的激活函数。
我的输入参数X包含堆叠的二维图像数据,即5 * 5 * 5三维矩阵。因此,我已使用 np.reshape(X [:,:,x],25)转换为(25,)向量,这样我就可以轻松获得加权和(因为权重为25 * 50用于隐藏节点的输入,50 * 5用于隐藏节点的输出)。
我面临的问题是,当我分别计算用于隐藏输入和输出隐藏的Delta时,出现值错误“ ValueError:形状(50,)和(5,5)未对齐:50 (dim 0)!= 5(dim 0)“ ,我完全理解这是因为两个数组的尺寸不同。但我无法找出解决方案,因此无法以某种方式重塑它们并采用点积。当我第一次学习python和神经网络知识并编写自己的代码时,我在玩矩阵方面没有太多的专业知识。在1)解决此问题,2)如何改进该网络(未来的实践)方面,我需要一些帮助。 3)如何使网络具有通用性,以便在可以添加更多层等的情况下,不会弄乱不同维度的矩阵乘法?下面是代码原型。
代码
# other stuff
def function(W1, W2, X, D):
N = 5
for x in range(N):
# reshaping input in 25*1 vector
l0 = np.reshape(X[:,:,x],25)
ll = sigmoid(np.dot(l0,W1))
l2 = softmax(np.dot(ll,W2))
l2_error = D - l2
l2_delta = l2_error
l1_error = l2_delta.dot(W2.T)
l1_delta = ll*(1-ll)*l1_error
DW2 = alpha*ll.T.dot(l2_delta) #ValueError: shapes (50,) and (5,5) not aligned: 50 (dim 0) != 5 (dim 0)
W2 = W2 + DW2
DW1 = alpha*l0.T.dot(l1_delta) #ValueError: shapes (25,) and (5,50) not aligned: 25 (dim 0) != 5 (dim 0)
W1 = W1 + DW1
# other stuff
X = np.zeros((5,5,5), dtype=int)
D = np.zeros((5,5), dtype=int)
X[:,:,0] = [[0 ,1, 1, 0, 0],
[0 ,0, 1, 0, 0],
[0 ,0, 1, 0, 0],
[0 ,0, 1, 0, 0],
[0 ,1, 1, 1, 0]]
X[:,:,1] = [[1 ,1, 1, 1, 0],
[0 ,0, 0, 0, 1],
[0 ,1, 1, 1, 0],
[1 ,0, 0, 0, 0],
[1 ,1, 1, 1, 1]]
X[:,:,2] = [[1 ,1, 1, 1, 0],
[0 ,0, 0, 0, 1],
[0 ,1, 1, 1, 0],
[0 ,0, 0, 0, 1],
[1 ,1, 1, 1, 0]]
X[:,:,3] = [[0 ,0, 0, 1, 0],
[0 ,0, 1, 1, 0],
[0 ,1, 0, 1, 0],
[1 ,1, 1, 1, 1],
[0 ,0, 0, 1, 0]]
X[:,:,4] = [[1 ,1, 1, 1, 1],
[1 ,0, 0, 0, 0],
[1, 1, 1, 1, 0],
[0 ,0, 0, 0, 1],
[1 ,1, 1, 1, 0]]
D = np.array([ [1,0,0,0,0],[0,1,0,0,0],[0,0,1,0,0],[0,0,0,1,0],[0,0,0,0,1] ]).T
W1 = 2*np.random.random((25,50)) - 1
W2 = 2*np.random.random((50,5)) - 1
W1, W2 = Multiclass(W1, W2, X, D)
答案 0 :(得分:1)
首先,您需要一些线性代数的基础知识,至少要学习如何在纸上计算2矩阵/向量的内积。 khanacademy.org有一个免费的线性代数课程,非常容易上手。
第二,参加一门机器学习课程,coursera.org的Andrew Ng提供了宝贵的材料。他著名的机器学习课程很棒,但是如果您想让神经网络学习他的深度学习专业课程1。这些都可以免费审核。
最后一件事,不要重新发明轮子。有许多免费,流行,高效和易于使用的机器学习框架。 tensorflow,scikit学习,pytorch等。
学习愉快:)