#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)