Python,元组索引必须是整数,而不是元组?

时间:2016-10-03 19:29:49

标签: python indexing types tuples

所以,我不完全确定这里发生了什么,但无论出于什么原因,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

1 个答案:

答案 0 :(得分:5)

您的output变量不是N x 4矩阵,至少不是 python types 意义。它是一个元组,它只能用一个数字索引,你尝试用元组索引(两个数字之间有昏迷),这只适用于numpy矩阵。打印你的输出,找出问题是否只是一种类型(然后只是转换为np.array)或者你传递的东西完全不同(然后修复产生output的任何东西)。

正在发生的事情的例子:

import numpy as np
output = ((1,2,3,5), (1,2,1,1))

print output[1, 2] # your error
print output[(1, 2)] # your error as well - these are equivalent calls

print output[1][2] # ok
print np.array(output)[1, 2] # ok
print np.array(output)[(1, 2)] # ok
print np.array(output)[1][2] # ok