所以,我不太确定这里发生了什么,但由于某种原因,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 的数组。 - user2357112ForProp
的结果呢?它返回一个元组,很可能你正在传递产生的元组,其中包含output
和Z1
。我猜想你有类似这样的代码:output = ForProp( ... )
,但实际上应该是output, Z1 = ForProp( ... )
。 - lejlot