Data/개념 정리

[밑러닝 3] 제 2고지, 자연스러운 코드로 개념 정리

neulvo 2022. 12. 10. 20:40

11. 가변 길이 인수(순전파 편)

p106. 파이썬의 리스트와 튜플은 여러 개의 데이터를 한 줄로 저장합니다. 리스트는 [1,2,3]과 같이 []로 묶고 튜플은 (1,2,3)과 같이 ()로 묶습니다. 리스트와 튜플의 주요 차이는 원소를 변경할 수 있는지 여부입니다. 튜플의 경우 한 번 생성되면 원소를 변경할 수 없습니다. 예를 들어 x = (1, 2, 3)으로 튜플을 생성한 후에는 x[0] = 4 등으로 덮어 쓸 수 없는 것이죠. 반면 리스트는 원소를 변경할 수 있습니다.

12. 가변 길이 인수(개선 편)

p110. 함수를 정의할 때 인수 앞에 별표(*)를 붙였습니다. 이렇게 하면 리스트를 사용하는 대신 임의 개수의 인수(가변 길이 인수)를 건네 함수를 호출할 수 있습니다.

p112. self.forward(*xs) 부분을 보죠. 함수를 '호출'할 때 별표를 붙였는데, 이렇게 하면 리스트 언팩이 이루어집니다. 언팩은 리스트의 원소를 낱개로 풀어서 전달하는 기법입니다. 예를 들어 xs = [x0, x1]일 때 self.forward(*xs)를 하면 self.forward(x0, x1)로 호출하는 것과 동일하게 동작합니다.

13. 가변 길이 인수(역전파 편)

편미분

 

편미분 - 위키백과, 우리 모두의 백과사전

S ( Δ x , Δ y ) = f ( x 0 + Δ x , y 0 + Δ y ) − f ( x 0 + Δ x , y 0 ) − f ( x 0 , y 0 + Δ y ) + f ( x 0 , y 0 ) {\displaystyle S\left(\Delta x,\Delta y\right)=f\left(x_{0}+\Delta x,y_{0}+\Delta y\right)-f\left(x_{0}+\Delta x,y_{0}\right)-f\left(x

ko.wikipedia.org

편미분(偏微分, 영어: partial derivative)은 다변수 함수의 특정 변수를 제외한 나머지 변수를 상수로 간주하여 미분하는 것이다. 기호는 ∂이다.

$f'_{x}, f_{x}, \partial_{x}f, \frac{\partial}{\partial x}f,\frac{\partial f}{\partial x}$

는 변수 $x$에 대한, 함수 $f(x,y,...)$의 편미분을 뜻한다.

14. 같은 변수 반복 사용

인플레이스 연산

여기에서 id(x)의 결과를 보면(x는 ndarray 인스턴스), x가 메모리에서 덮어 써지는지 아니면 새로 생성되는지 알 수 있습니다. 보다시피 누적 대입 연산자인 +=를 사용하면 x의 객체 ID가 변하지 않습니다. 즉, 메모리 위치가 동일하다는 뜻으로, 값만 덮어 쓴 것입니다. 이처럼 복사하지 않고 메모리의 값을 직접 덮어 쓰는 연산을 인플레이스 연산이라고 합니다.

15. 복잡한 계산 그래프(이론 편)

위상 : 그래프의 '연결된 형태'

16. 복잡한 계산 그래프(구현 편)

중첩 함수는 주로 다음 두 조건을 충족할 때 적합합니다.

- 감싸는 메서드 안에서만 이용한다.

- 감싸는 메서드에 정의된 변수를 사용해야 한다.

17. 메모리 관리와 순환 참조

'파이썬'이라고 하면 보통은 '프로그래밍 언어'를 가리키지만 때로는 파이썬 코드를 실행하는 '프로그램'을 지칭할 때도 씁니다. 이 프로그램을 일반적으로 '파이썬 인터프리터'라고 부릅니다. 또한 표준으로 사용되는 파이썬 인터프리터는 C 언어로 구현된 CPython입니다.

파이썬의 메모리 관리는 두 가지 방식으로 진행됩니다. 하나는 참조 수를 세는 방식이고, 다른 하나는 세대를 기준으로 쓸모 없어진 객체를 회수하는 방식입니다. 이 책에서는 전자를 '참조 카운트'로, 후자를 'GC(가비지 컬렉션)'라고 부르겠습니다.

참조 카운트

파이썬 메모리 관리의 기본은 참조 카운트입니다. 참조 카운트는 구조가 간단하고 속도도 빠릅니다. 모든 객체는 참조 카운트가 0인 상태로 생성되고, 다른 객체가 참조할 때마다 1씩 증가합니다. 반대로 객체에 대한 참조가 끊길 때마다 1만큼 감소하다가 0이 되면 파이썬 인터프리터가 회수해갑니다. 이런 방식으로 객체가 더 이상 필요 없어지면 즉시 메모리에서 삭제됩니다. 이상이 참조 카운트 방식의 메모리 관리입니다.

다음과 같은 경우에 참조 카운트가 증가합니다.

- 대입 연산자를 사용할 때

- 함수에 인자로 전달할 때

- 컨테이너 타입 객체(리스트, 튜플, 클래스 등)에 추가할 때

파이썬에서는 사실 모든 대상이 객체입니다. 클래스도 함수도 다 객체인 것이죠. 클래스로부터 생성된 인스턴스 역시 객체입니다. 이번 단계에서는 참조 카운트를 설명하기 위해, 이 중에서 특히 인스턴스를 가리켜 객체라고 부르겠습니다.

GC

순환 참조 : 객체들이 원 모양을 이루며 서로가 서로를 참조하게 되는 상태

GC는 참조 카운트와 달리 메모리가 부족해지는 시점에 파이썬 인터프리터에 의해 자동으로 호출됩니다. 물론 명시적으로 호출할 수도 있습니다. (gc 모듈을 임포트해서 gc.collect()를 실행)

GC는 순환참조를 올바르게 처리.

weakref 모듈을 활용해 약한 참조를 만들어 처리 가능!

18. 메모리 절약 모드

신경망에는 학습(혹은 훈련)과 추론이라는 두 가지 단계가 있습니다. 학습 시에는 미분값을 구해야 하지만, 추론 시에는 단순히 순전파만 하기 때문에 중간 계산 결과를 곧바로 버리면 메모리 사용량을 크게 줄일 수 있습니다.

19. 변수 사용성 개선

데코레이터 : 어떤 함수가 있을 때 해당 함수를 직접 수정하지 않고 함수에 기능을 추가하고자 할 때 사용

 

01) 데코레이터

[TOC] ## 데코레이터 영어 사전에서 decorator를 찾아보면 '장식하는 사람'이라는 뜻을 갖고 있습니다. 파이썬의 데코레이터 역시 동일한 의미로 사용됩니다. 어떤 …

wikidocs.net

20. 연산자 오버로드(1)

연산자 오버로딩 : 인스턴스 객체끼리 서로 연산을 할 수 있게끔 기존에 있는 연산자의 기능을 바꾸어 중복으로 정의하는 것

 

파이썬 강좌 8-4편. 연산자 오버로딩(Operator Overloading)

1. 연산자 오버로딩(Operator Overloading) 이번에는 연산자 오버로딩(Operator Overloading)에 대해서 알아보려고 합니다. 이 연산자 오버로딩이란, 인스턴스 객체끼리 서로 연산을 할 수 있게끔 기존에 있

blog.hexabrain.net

21. 연산자 오버로드(2)

class Variable:
	__array_priority__ = 200

p.178 이렇게 하면 Variable 인스턴스의 연산자 우선순위를 ndarray 인스턴스의 연산자 우선순위보다 높일 수 있습니다. 그 결과 좌항이 ndarray 인스턴스라 해도 우항인 Variable 인스턴스의 연산자 메서드가 우선적으로 호출됩니다.

22. 연산자 오버로드(3)

p.180 우선 복습도 할 겸 새로운 연산자를 추가하는 순서를 살펴보죠.

1. Function 클래스를 상속하여 원하는 함수 클래스를 구현합니다(예: Mul 클래스).
2. 파이썬 함수로 사용할 수 있도록 합니다(예: mul 함수).
3. Variable 클래스의 연산자를 오버로드합니다(예: Variable.__mul__ = mul).

23. 패키지로 정리

모듈 : 모듈은 파이썬 파일입니다. 특히 다른 파이썬 프로그램에서 임포트하여 사용하는 것을 가정하고 만들어진 파이썬 파일을 '모듈'이라고 합니다.

패키지 : 패키지는 여러 모듈을 묶은 것입니다. 패키지를 만들려면 먼저 디렉터리를 만들고 그 안에 모듈(파이썬 파일)을 추가합니다.

라이브러리 : 라이브러리는 여러 패키지를 묶은 것입니다. 그래서 하나 이상의 디렉터리로 구성되죠. 때로는 패키지를 가리켜 '라이브러리'라고 부르기도 합니다.

24. 복잡한 함수의 미분

 

728x90