首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >多类分类器神经网络问题

多类分类器神经网络问题
EN

Stack Overflow用户
提问于 2018-10-24 16:43:41
回答 1查看 117关注 0票数 0

我正在实现一个多类神经网络,它将从输入图像中识别数字。输入图像是5×5像素,显示5个数字。因此,神经网络模型包含25个输入节点。4个输出节点(因为我们必须对5个输出进行分类)和50个隐藏节点。我使用sigmoid函数作为隐藏节点的激活函数,并使用softmax函数作为输出节点的激活函数。

我的输入参数X包含堆叠的二维图像数据,即5*5*5个三维矩阵。因此,我使用np.reshape(X:,:,x,25)将其转换为(25,)向量,以便可以轻松地获得加权和(因为输入到隐藏节点的权重为25*50,而隐藏到输出节点的权重为50*5 )。

我面临的问题是,当我分别计算输入到隐藏和隐藏到输出的增量时,我得到了值错误“ValueError: shapes ( 50,) (5,5) :50 (dim 0) != 5 (dim 0)",我完全理解这是因为这两个数组的维数。但我无法找出解决方案,所以我可以用某种方式重塑它们,并采用点积。因为我是第一次学习python和这些神经网络的东西,并编写自己的代码,所以我在处理矩阵方面没有太多的专业知识。我需要一些帮助,1)修复这个问题,2)我如何改进这个网络(未来的实践)。3)我如何才能使网络泛型,这样如果我可以添加更多的层等,我就不会搞乱不同维数的矩阵乘法?下面是代码的原型。

代码

代码语言:javascript
运行
复制
# 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)
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52964552

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档