더북(TheBook)

2.3.1 원소별 연산

relu 함수와 덧셈은 원소별 연산(element-wise operation)입니다. 이 연산은 텐서에 있는 각 원소에 독립적으로 적용됩니다. 이는 고도의 병렬 구현(1970~1990년대 슈퍼컴퓨터의 구조인 벡터 프로세서(vector processor)에서 온 용어인 벡터화된 구현을 말합니다)이 가능한 연산이라는 의미입니다. 파이썬으로 단순한 원소별 연산을 구현한다면 다음 relu 연산 구현처럼 for 반복문을 사용할 것입니다.19

def naive_relu(x):
    assert len(x.shape) == 2 
    x = x.copy() 
    for i in range(x.shape[0]):
        for j in range(x.shape[1]):
            x[i, j] = max(x[i, j], 0)
    return x

x는 랭크-2 넘파이 배열입니다.

입력 텐서 자체를 바꾸지 않도록 복사합니다.

덧셈도 동일합니다.

def naive_add(x, y):
    assert len(x.shape) == 2 
    assert x.shape == y.shape
    x = x.copy() 
    for i in range(x.shape[0]):
        for j in range(x.shape[1]):
            x[i, j] += y[i, j]
    return x

x와 y는 랭크-2 넘파이 배열입니다.

입력 텐서 자체를 바꾸지 않도록 복사합니다.

같은 원리로 원소별 곱셈, 뺄셈 등을 할 수 있습니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.