파이썬 TypeError: 'float' object is not subscriptable

조회수 8604회

안녕하세요.

파이썬을 사용하여 신경망 손실 함수의 기울기를 구하는 코드를 작성 하고 있습니다.

다음은 코드입니다.

def num_grad(self, f, key):
        h = 0.001
        W = self.params[key]

        result = [[0 for j in range(len(W[0]))] for i in range(len(W))]

        for i in range(len(W)):
            for j in range(len(W[0])):
                tmp_val = W[i][j]

                self.params[key][i][j] = tmp_val + h
                f1 = f(self.params[key])

                self.params[key][i][j] = tmp_val - h
                f2 = f(self.params[key])

                result[i][j] = (f1-f2)/(2*h)

                self.params[key] = tmp_val

        return result

이때 self.params[key]는 가중치 또는 편향을 나타내는 2차원 list인데, self.params[key][i][j] 로 접근하려고 하면 값은 나오는데도 TypeError: 'float' object is not subscriptable 에러가 뜨면서 진행할 수 없습니다.

인터넷에서 찾아보니 list 가 아닌 변수에 인덱스로 접근할 경우 뜨는 에러라고 하는데, 저같은 경우에는 정상적으로 self.params[key][i][j]의 값이 나오는 것과 동시에 해당 에러가 뜹니다.

어떻게 하면 좋을까요?

  • self.params 가 가중치를 담고있는 dict 입니다. 플라잉폭스 2022.1.1 10:53

1 답변

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)