Python – Вложенный ДЛЯ Цикла Над 2D Массивом NumPy

#python #arrays #numpy #loops #neural-network

Вопрос:

Я изучаю нейронные сети, создавая свою собственную структуру, и я столкнулся с проблемой при попытке закодировать функцию пошаговой активации. Это то, что до сих пор приближало меня к моей цели:

 import numpy as np

def step_function(layer_output):
    for row in layer_output:
        return np.array([0 if element <= 0 else 1 for element in row])
 

Я пытаюсь перебрать каждый элемент в каждой строке и проверить, правильно ли утверждение IF для этого элемента или нет. Вот что происходит с некоторыми примерами чисел (в виде массива NumPy, потому что это формат вывода моего слоя):

 numbers = np.array([[1, -2, -3],
                    [0, 4, 5]])

activation = step_function(numbers)
print(activation)

>>>
[1 0 0]
 

Петля застревает в первом ряду. Это то, что я хочу в качестве вывода:

 >>>
[[1 0 0]
 [0 1 1]]
 

Я был бы благодарен за любые идеи о том, как ее решить.

Ответ №1:

В python ключевое слово «return» принимает переданный ему аргумент, останавливает текущую функцию и возвращает аргумент, в котором была вызвана функция. Вот почему ваша функция «преждевременно останавливается».
Вместо этого вы можете сделать следующее:

 import numpy as np

def step_function(layer_output):
    output = np.zeros_like(layer_output)
    for i, row in enumerate(layer_output):
        output[i] = np.array([0 if element <= 0 else 1 for element in row])
    return output
 

Но было бы намного проще и быстрее просто выполнить пороговую операцию непосредственно над всем массивом

 import numpy as np

def step_function(layer_output):
    return (layer_output>0).astype(int)