Python IndexError: индекс 3 выходит за пределы оси 0 с размером 3 - PullRequest
1 голос
/ 05 апреля 2019

Я пытаюсь использовать нейронную сеть в моей анаконде, используя python3.7 под сценарием ipython.

Я не знаком и все еще изучаю проблему с python и не знаю, как отладить это.

import numpy as np
w1 = np.array([[11, 11, 9, 11, 7,13, 14, 6, 6, 12], [11, 11, 9, 11, 7,13, 14, 6, 6, 12], [11, 11, 9, 11, 7,13, 14, 6, 6, 12]])
w2 = np.zeros ((1,10))
b1 = np.array([0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8])
b2 = np.array([0.2])
def f(x):
        return 1 / (1 + np.exp(-x))
def simple_looped_nn_calc(n_layers, x,w,b):
  for l in range(n_layers-1):
    if l == 0:
         node_in = x
    else:
         node_in = h
    h = np.zeros((w[l].shape[0],))
    for i in range(w[l].shape[0]):
       f_sum = 0
       for j in range(w[l].shape[l]):
            f_sum += w[l][i][j]* node_in[j]
       f_sum += b[l][i]
       h[i] = f(f_sum)
  return h



w = [w1, w2]
b = [b1, b2]
x = [280, 0, 280, 280, 0, 0, 0, 0, 280, 0, 0, 0, 0, 0, 0, 0, 0, 280, 0]

Когда я запускаю свой код, я получаю ошибку, simple_looped_nn_calc (3, x, w, b) вот так:

IndexError: индекс 3 выходит за пределы оси 0 с размером 3

Ответы [ 2 ]

0 голосов
/ 05 апреля 2019

заменить

for j in range(w[l].shape[l])

с

for j in range(w[l].shape[0]) 

потому что вы назначаете node_in = h, h здесь равно h = np.zeros((w[l].shape[0],)), поэтому, если вы сделаете for i in range(w[l].shape[l]), то размер node_in и w[l].shape[l] может не совпадать и приведет к ошибкам индекса.

0 голосов
/ 05 апреля 2019

Вы уверены, что хотите написать:

for j in range(w[l].shape[l]):

а не

for j in range(w[l].shape[1]):

Надеюсь, я помог!

...