【发布时间】:2017-02-11 20:04:41
【问题描述】:
所以,我不完全确定这里发生了什么,但无论出于何种原因,Python 都会向我抛出这个问题。作为参考,它是我为了好玩而构建的一个小型神经网络的一部分,但它使用了很多 np.array 等,所以有很多矩阵被抛出,所以我认为它正在创建某种数据类型冲突.也许有人可以帮我解决这个问题,因为我一直盯着这个错误太久而无法修复它。
#cross-entropy error
#y is a vector of size N and output is an Nx3 array
def CalculateError(self, output, y):
#calculate total error against the vector y for the neurons where output = 1 (the rest are 0)
totalError = 0
for i in range(0,len(y)):
totalError += -np.log(output[i, int(y[i])]) #error is thrown here
#now account for regularizer
totalError+=(self.regLambda/self.inputDim) * (np.sum(np.square(self.W1))+np.sum(np.square(self.W2)))
error=totalError/len(y) #divide ny N
return error
编辑:这是返回输出的函数,因此您知道输出的来源。 y 是一个长度为 150 的向量,直接取自文本文档。在 y 的每个索引处,它包含一个索引 1,2 或 3:
#forward propogation algorithm takes a matrix "X" of size 150 x 3
def ForProp(self, X):
#signal vector for hidden layer
#tanh activation function
S1 = X.dot(self.W1) + self.b1
Z1 = np.tanh(S1)
#vector for the final output layer
S2 = Z1.dot(self.W2)+ self.b2
#softmax for output layer activation
expScores = np.exp(S2)
output = expScores/(np.sum(expScores, axis=1, keepdims=True))
return output,Z1
【问题讨论】:
-
看起来
output实际上并不像你想象的那样是一个 Nx4 数组。 -
请附上完整的引用。
-
如何保证 y[i] 在 [0,3] 范围内?这似乎是你的问题。这要么是彻头彻尾的错误,要么是需要在架构中修复的创可贴。
-
你如何处理
ForProp的结果?它返回一个元组,可能你正在传递生成的内容,它是由output和Z1组成的元组,我猜你有类似output = ForProp( .. )的东西应该是output, Z1 = ForProp( ... )
标签: python indexing types tuples