본문 바로가기

전체 글

(124)
info numpy의 특정 function의 사용법이 궁금할 때 사용하면 된다. print(np.info(np.add)) add(x1, x2, /, out=None, *, where=True, casting='same_kind', order='K', dtype=None, subok=True[, signature, extobj]) Add arguments element-wise. Parameters ---------- x1, x2 : array_like The arrays to be added. If ``x1.shape != x2.shape``, they must be broadcastable to a common shape (which becomes the shape of the output). out : nda..
size, itemsize np.ndarray의 메서드로 size는 어레이의 총 element 수를 반환, itemsize 각 요소의 길이를 bytes 크기로 반환 Q. How to find the memory size of any array null_vector = np.zeros(10) null_vector.size # 10 null_vector.itemsize # 8 print(f"{null_vector.size * null_vector.itemsize}bytes") 80bytes
zeros https://numpy.org/doc/stable/reference/generated/numpy.zeros.html numpy.zeros — NumPy v1.26 Manual Reference object to allow the creation of arrays which are not NumPy arrays. If an array-like passed in as like supports the __array_function__ protocol, the result will be defined by it. In this case, it ensures the creation of an array object compatible numpy.org 사용법 numpy.zeros(shape, dtype=floa..
8장 딥러닝 층을 깊게 하는 이유 층일 깊게 한 신경망은 깊지 않은 경우보다 적은 매개변수로 같거나 그 이상의 수준에 달하는 표현력을 달성할 수 있다. 이 경우 필요한 매개변수를 5x5=25이다. 이러한 연산은 3x3 두 번으로 대체될 수 있다. 후자의 경우 매개변수가 2x3x3=18개이다. 이처럼 작은 필터를 겹쳐 신경망을 깊게 할 때의 장점은 매개변수 수를 줄여 넓은 수용영역을 소화할 수 있다. 그리고 층과 층 사이에 ReLU, BN 등을 끼움으로써 신경망의 표현력 또한 개선된다. VGG VGG는 합성곱 계층와 풀링 계층으로 구성되는 기본적인 CNN이다. VGG에서 주목할 점은 3x3의 작은 필터를 사용한 합성곱 계층을 연속으로 거친다는 것이다. GoogLeNet GoogLeNet은 세로 방향만 깊을 뿐 아니라 ..
7장 CNN (2) CNN 구현하기 MNIST 데이터를 위한 간단한 CNN을 구현한다. 구조는 다음과 같다. class SimpleConvNet: def __init__(self, input_dim=(1, 28, 28), conv_param={'filter_num':30, 'filter_size':5, 'pad':0, 'stride':1}, hidden_size=100, output_size=10, weight_init_std=0.01): filter_num = conv_param['filter_num'] filter_size = conv_param['filter_size'] filter_pad = conv_param['pad'] filter_stride = conv_param['stride'] input_size = in..
7장 CNN (1) 전체 구조 지금까지 본 신경망은 FFNN이었다. CNN은 뭐가 다를까? - Affine-ReLU 연결이 Conv-ReLU-(Pooling)으로 바뀌었다. - 상위 층에는 여전히 Affine-ReLU 연결을 사용할 수도 있다. 합성곱 계층 FFNN의 문제점 이미지 데이터는 3차원 형상이며, 이 형상에는 공간적 정보가 담겨있다. FFNN으로 이 이미지를 처리하기 위해서는 Flatten을 수행하여 형상을 무시하고 모든 입력 데이터를 동등한 뉴런으로 취급하여 형상에 담긴 정보를 살릴 수가 없다. 한편 CNN은 이 형상을 유지하여 데이터를 제대로 이해할 가능성이 있다. 합성곱 연산 합성곱 연산은 필터의 위도우를 일정 간격으로 이동해가며 입력 데이터에 적용한다. 여기에 사용되는 연산은 단일 곱셈-누산으로 원소별 곱..
6장 학습 관련 기술들 (2) 가중치의 초깃값 은닉층의 활성화값 분포 가중치의 초깃값에 따라 은닉층의 활성화값들이 어떻게 변하는지 알아보자. 시그모이드 활성화 함수를 사용하는 5층 신경망에 무작위로 생성한 입력 데이터를 흘려 각 층의 활성화 값 분포를 히스토그램으로 그려보자. - 각 층의 활성화 값들이 0과 1에 치우져 분포되어 있다. - 시그모이드 함수는 출력이 0 또는 1에 가까워 질수록 gradient가 0에 다가간다. 그러면 역전파의 기울기가 점점 작아지다가 사라지게 된다. 이것이 gradient vanishing으로 알려진 문제이다. 표준편차를 0.01로 바꿔보자 - 0과 1에 치우치진 않아서 기울기 소실 문제가 일어나지는 않지만 0.5 부근에 집중되어 있다. - 활성화 값들이 한 쪽으로 치우졌다는 것은 표현련 관점에서 문제..
6장 학습 관련 기술들 (1) 매개변수 갱신 최적화(optimization) : 매개변수의 최적값을 찾는 문제 확률적 경사 하강법(SGD) 앞장에서 보았던 가장 간단한 방법 파이썬으로 구현해보자 class SGD: """확률적 경사 하강법 (Stochastic Gradient Descent)""" def __init__(self, lr=0.01): self.lr = lr def update(self, params, grads): for key in params.keys(): params[key] -= self.lr * grads[key] 초기화 때 learning rate을 받고 update 메서드에서 가중치 매개변수와, gradient가 저장된 딕셔너리를 받아 매개변수를 갱신한다. SGD의 단점 손실함수의 그래프가 다음과 같은 모습..