微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在反向传播神经网络中获取增量项时的维度错误

如何解决在反向传播神经网络中获取增量项时的维度错误

我正在创建一个具有以下维度的三层图像识别神经网络:400 个特征、40 个节点、40 个节点、10 个目标(数字 0 到 9 的图像),因此这些是我的权重 (theta):>

 theta1 = np.random.uniform(low=0.00001,high=0.0001,size=(40,401))
 theta2 = np.random.uniform(low=0.00001,41))
 theta3 = np.random.uniform(low=0.00001,size=(10,41))

我正在关注 Andrew Ng 的 approach。我在使反向传播工作时遇到了一些麻烦。 首先,我通过找到实际结果和预测之间的差异来获得 delta_4 项。然后,使用以下等式获得剩余的 delta 项,

enter image description here

其中 g' 是 sigmoid 函数的导数。 我编写了以下函数

def get_delta(nodes_current,theta_current,delta_prevIoUs):
     derivative = np.multiply(nodes_current,1-nodes_current)
     matmul_term = np.matmul(np.transpose(theta_current),delta_prevIoUs)
     delta_current = np.multiply(matmul_term,derivative)
     return delta_current

那么,得到梯度的整个反向传播过程如下:

def backward_prop3(y_vectors,a1,a2,a3,a4,theta1,theta2,theta3):
     #y_vectors is a 10 by m (num of training examples) matrix
     #a1 is the features
     #a2,a3 are the hidden nodes
     #a4 is the output

     m = y_vectors.shape[1]
 
     delta4 = a4 - y_vectors

     delta3 = get_delta(a3,theta3,delta4)
     triangle3 = np.matmul(delta4,np.transpose(a3))

     delta2 = get_delta(a2,delta3)
     triangle2 = np.matmul(delta3,np.transpose(a2))

     triangle1 = np.matmul(delta2[1:,:],np.transpose(a1))

     grad3 = (1/m)*triangle1
     grad2 = (1/m)*triangle2 
     grad1 = (1/m)*triangle1 

     return grad1,grad2,grad3

问题出现在获取delta2的那一行,特别是get_delta函数那一行:

matmul_term = np.matmul(np.transpose(theta_current),delta_prevIoUs)

错误提示

matmul: Input operand 1 has a mismatch in its core dimension 0,with gufunc signature (n?,k),(k,m?)->(n?,m?) (size 51 is different from 50)

我已经检查了我的 theta 矩阵的维度并查看了课程笔记,但我不明白为什么这不起作用,因为我已经完全按照方程中所示的方式实现了它。

解决方法

如果你有 41 个大小的 theta 而你有 40 个导致错误的特征。要对此进行调试,请确保所有矩阵都具有有效的维度,以便它们可以相互相乘。

您的 delta2 的尺寸为 41x41,而您的 theta2 的尺寸为 40x41。因此, transpose(theta2)*delta2 将尝试乘以 41x40 * 41x41。这会导致尺寸不匹配。你的 theta2 应该有 41x 的尺寸……这样才能工作。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。