gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 13:12:29 24 4
gpt4 key购买 nike

所以,我不完全确定这里发生了什么,但无论出于何种原因,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 变量不是N x 4 矩阵,至少在python 类型 意义上不是。它是一个元组,只能由单个数字索引,您尝试按元组索引(2 个数字之间有逗号),这仅适用于 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

关于Python,元组索引必须是整数,而不是元组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39839034/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com