목록분류 전체보기 (71)
영넌 개발로그

변수 이름 지정 class Variable: def __init__(self,data, name=None): if data is not None: if not isinstance(data, np.ndarray): raise TypeError("{}은 지원하지 않습니다.".format(type(data))) self.data = data self.grad = None self.creator = None self.generation = 0 self.name = name ndarray 인스턴스 변수 Variable을 ndarray 처럼 보이도록 만들기 class Variable: ... @property def shape(self): return self.data.shape @property def ndim(..

파이썬은 필요 없어진 객체를 메모리에서 자동으로 삭제함 -> 메모리 관리 의식x 파이썬이 메모리 관리 하는 방법 1. 참조 카운트 모든 객체는 참조 카운트가 0인 상태로 생성됨 다른 객체가 참조할 때마다 1씩 증가 대입 연산자를 사용할 때 함수에 인수로 전달할 때 컨테이너 타입 객체(리스트, 튜플, 클래스)에 추가할 때 객체에 대한 참조가 끊길 때마다 1만큼 감소 카운트가 0이 되면 파이썬 인터프리터가 회수 class obj: pass def f(x): print(x) a = obj() #변수에 대입: 카운트 1 f(a) #함수에 전달: 함수 안에서 카운트 2 #함수 완료: 카운트 1 a= None #대입 해제: 카운트 0 a = obj() b = obj() c = obj() a.b = b #a가 b를 ..

올바른 역전파의 경우 D,B,C,A 나 D,C,B,A 순서로 역전파가 일어나야 함 현재 구현한 코드는 위의 그래프의 역전파를 올바르게 해내지 못함 처리할 함수의 후보를 funcs 리스트의 끝에 추가하고 다음에 처리할 함수를 그 리스트에서 '마지막' 원소를 꺼내고 있음 처리 순서가 D,C,A,B,A 로 C다음 A가 바로 이어지며 A의 역전파가 두 번 일어나게 된다. 문제 해결을 위해 '우선순위'가 필요 1. 계산 그래프를 분석하여 위상 정렬 알고리즘 사용 (Topological Sort) 노드의 연결 방법을 기초로 노드 정렬 가능 2. 순전파 때 어떤 함수가 어떤 변수를 만들어내는지 알 수 있음 세대 기록 가능 class Variable: def __init__(self,data): if data is n..

입출력 변수가 여러개인 경우가 있음 이를 고려하여 가변 길이 입출력을 처리할 수 있도록 코드 확장하기 순전파 변수들을 리스트에 넣어 처리 class Function: def __call__(self, inputs): xs = [x.data for x in inputs] ys = self.forward(xs) outputs = [Variable[as_array(y)) for y in ys] for output in outputs: output.set_creator(self) self.inputs = inputs self.outputs = outputs return outputs def forward(self, xs): raise NotImplementedError() def backward(self, gy..
파이썬 단위 테스트 표준 라이브러리 unittest 사용 unittest와 TestCase를 상속한 클래스를 구현하고 test 메소드 생성 테스트 케이스가 많아질수록 테스트 하는 함수의 신뢰도 상승 import unittest import deep def numerical_diff(f, x, eps=1e-4): x0 = deep.Variable(x.data - eps) x1 = deep.Variable(x.data + eps) y0 = f(x0) y1 = f(x1) return (y1.data - y0.data) / (2 * eps) class SquareTest(unittest.TestCase): def test_forward(self): x = deep.Variable(np.array(2.0)) y ..
개인 공부용 포스팅 1. square, exp 클래스를 함수화 함수를 파이썬 클래스로 정의하여 사용하다보니 인스턴스를 생성 후 호출하는 두 단계로 구분해 진행했어야 한다. 따라서 두 행동을 한번에 해주는 함수 생성 (square, exp) def square(x): return Square()(x) def exp(x): return Exp()(x) #-------------------------------------------------------------- #위 함수와 같은 의미 def square(x): f = Square() return f(x) #실행코드 x = Variable(np.array(0.5)) y = square(exp(square(x))) y.grad = np.array(1.0) y..

개인 공부용 포스팅 역전파 (backpropagation, 오차역전파법) ? 미분을 효율적으로 계산할 수 있고 결괏값의 오차도 수치 미분보다 작음 연쇄 법칙 (chain rule) 여러 함수를 사슬처럼 연결하여 사용하는 모습을 빗댄 것 연쇄 법칙에 따르면 합성함수의 미분은 구성 함수 각각을 미분한 것과 같음 예시 ) y = F(x) 는 a = A(x), b = B(a), y = C(b) 라는 세 함수로 구성되어 있음 x에 대한 y의 미분은 구성 함수 각각의 미분값을 모두 곱한 값과 같음 합성 함수의 미분은 각 함수의 국소적인 미분들로 분해 가능하다 == 연쇄법칙 dy/dy 는 자신에 대한 미분이라서 항상 1. 생략하는 것이 보통이나 역전파를 구현할 때는 표시하는 게 이해가 편함 역전파 원리 도출 x에 대..

개인 공부 정리를 위한 포스팅 변수 (Variable)? 상자(box) 안에 데이터를 넣는 그림을 상상하기 '상자' 가 변수 - 상자에는 데이터가 들어간다 : 대입 or 할당 - 상자 속을 들여다보면 데이터를 알 수 있다 : 참조 class Variable: def __init__(self, data): self.data = data ex) x는 Variable 인스턴스 / 실제 데이터는 x 안에 x는 데이터 자체가 아니라 데이터를 담은 상자 import numpy as np data = np.array(1.0) x = Variable(data) ####################### x.data = np.array(2.0) 넘파이의 다차원 배열 (텐서, tensor) 숫자 등의 원소가 일정하게 모여..

메모리 관리 모든 파이썬 객체와 데이터 구조를 포함하는 비공개 힙(private heap)은 python memory manager가 비공개적으로 알아서 관리한다. 메모리 관리를 위해 숨겨진 힙 스페이스 사용한다. python memory manger는 힙 메모리에 있는 객체를 참조하는 형태로 동적할당을 자동으로 해준다 인터프리터가 스페이스를 관리하기 때문에 프로그래머 조차도 이 공간에 접근이 불가능 하다. 인터프리터가 포인터를 사용하여 힙 메모리 영역의 범위를 조정, 메모리가 필요할때마다 OS와 소통하면서 할당 빌트인 가비지 컬렉터(Garbage Collector; GC)를 소유하고 있다. GC를 이용하여 사용되지 않은 메모리를 재활용하고 메모리를 지워 힙 스페이스에서 사용 가능케 한다. 메모리 구조 ..
컴퓨터 프로그래밍 교육을 위해 많이 사용하지만, 기업의 실무를 위해서도 많이 사용하는 언어이다. 그 대표적인 예가 바로 구글이다. 구글에서 만든 소프트웨어의 50%이상이 파이썬으로 작성되었다고 한다. 이외에도 많이 알려진 예를 몇 가지 들자면 온라인 사진 공유 서비스 인스타그램(Instagram), 파일 동기화 서비스 드롭박스(Dropbox)등이 있다. ✅ 공동 작업과 유지 보수가 매우 쉽고 편하다. 그 때문에 이미 다른 언어로 작성된 많은 프로그램과 모듈이 파이썬으로 재구성되고 있다. 국내에서도 그 가치를 인정받아 사용자 층이 더욱 넓어지고 있고, 파이썬을 사용해 프로그램을 개발하는 업체들 또한 늘어 가고 있는 추세이다. ✅ 오픈 소스 = 무료 사용료 걱정없이 언제 어디서든 파이썬을 다운로드하여 사용할..