12.1 첫 번째 개선: 함수를 사용하기 쉽게

개선 전은 Add 클래스는 인수를 리스트에 모아서 받고 결과는 튜플로 반환합니다.
개선 후는 리스트나 튜플을 거치지 않고 인수와 결과를 직접 주고 받아 훨씬 자연스럽습니다.

2. 리스트의 원소가 하나라면 첫 번째 원소를 반환
outputs if len(outputs) > 1 else outputs[0]
outputs에 원소가 하나뿐이면 리스트가 아니라 원소 하나만 반환해줍니다.
즉, 함수의 반환값이 하나라면 해당 변수를 직접 돌려주는 것입니다.
1. 별표를 붙인다
*inputs
인수 앞에 별표(*)를 붙이면 리스트를 사용하는 대신 임의 갯수 인수(가변 길이 인수)를 건네 함수를 호출 할 수 있습니다.
12.2 두 번째 개선: 함수를 구현하기 쉽도록

개선 전에는 인수는 리스트로 전달되고 결과는 튜플을 반환하고 있습니다.
개선 후 코드는 입력도 변수를 직접받고 결과도 변수를 직접 돌려주는 것입니다.

ys = self.forward(*xs) #1. 별표를 붙여서 언팩
함수를 '호출'할때 별표를 붙였는데 이렇게 하면 리스트 언팩이 됩니다.
if not isinstance(ys, tuple): #2. 튜플이 아닌 경우 추가 지원
ys = (ys,)
ys가 튜플이 아니면 튜플로 변경해줍니다.
12.3 add 함수 구현

class Add는 forward를 def forward(self, x0, x1)라고 정의 할수 있고 결과는 return y처럼 원소 하나만 반환해서 Add 클래스를 구현하는 사람은 조금 더 편하게 사용할 수 있습니다.
이 Add 클래스를 함수로 구현해서 사용하는 코드는 def add(x0, x1):을 보면 되는데
Add() 객체 선언해주고 그 안에 x0, x1의 값이 한번에 들어갑니다.
x0 = Variable(np.array(2))
x1 = Variable(np.array(3))
y = add(x0, x1)
print(y.data)
실제 사용할때 add(x0, x1)로 간단하게 사용할 수 있습니다.
'Study 공부할레나' 카테고리의 다른 글
| [스터디/밑시딥3] 제 2고지 자연스러운 코드로_14. 같은 변수 반복 사용 (0) | 2023.08.22 |
|---|---|
| [스터디/밑시딥3] 제 2고지 자연스러운 코드로_13. 가변 길이 인수(역전파 편) (0) | 2023.08.21 |
| [스터디/밑시딥3] 제 2고지 자연스러운 코드로_11. 가변 길이 인수(순전파 편) (0) | 2023.08.15 |
| [스터디/밑시딥3] 제 1고지 미분 자동 계산_10. 테스트 (0) | 2023.08.15 |
| [스터디/밑시딥3] 제 1고지 미분 자동 계산_9. 함수를 더 편리하게 (0) | 2023.08.15 |