Mam następujący problem. Chcę mieć funkcję, która, biorąc pod uwagę liczbę punktów w każdej ukrytej warstwie, tworzy wagi dla prostego NN.

def initialize_parameters(hidden):
        parameters = dict({})

    def W_creator(b,a,i):
        return tf.get_variable("W"+str(i+1), [b,a], initializer = tf.contrib.layers.xavier_initializer(seed = 1))
    def b_creator(b,i):
        return tf.get_variable('b'+str(i+1), [b,1], initializer = tf.zeros_initializer())

    for l in range(len(hidden)):
        parameters['W'+str(l+1)] = W_creator(hidden[l+1],hidden[l],l)
        parameters['b'+str(l+1)] = b_creator(hidden[l+1],l)
    return parameters

Nazywam tę funkcję, a następnie używam

tf.reset_default_graph()
with tf.Session() as sess:
    parameters = initialize_parameters()
    print("W1 = " + str(parameters["W1"]))
    print("b1 = " + str(parameters["b1"]))
    print("W2 = " + str(parameters["W2"]))
    print("b2 = " + str(parameters["b2"]))

Aby sprawdzić, czy wszystko jest w porządku i został zgłoszony błąd IndexError.

     29     for l in range(len(hidden)):
---> 30         W = W_creator(hidden[l+1],hidden[l],l)
     31         parameters['W'+str(l+1)] = W
     32 

IndexError: list index out of range

Czy ktoś może w tym pomóc?

0
Francesco F 16 grudzień 2019, 22:20

1 odpowiedź

Gdy używasz hidden[l+1], Twoja pętla musi zatrzymać się o jeden krok wcześniej, aby uniknąć „poza zakresem” IndexError:

for l in range(len(hidden)-1):
0
sciroccorics 16 grudzień 2019, 22:29