오늘 할 일: 갈고 닦기
article thumbnail

밑바닥부터 시작하는 딥러닝 2』 공부를 시작했다! 두근두근😝

www.yes24.com/Product/Goods/72173703?OzSrank=3

 

밑바닥부터 시작하는 딥러닝 2

직접 구현하면서 배우는 본격 딥러닝 입문서 이번에는 순환 신경망과 자연어 처리다! 이 책은 『밑바닥부터 시작하는 딥러닝』에서 다루지 못했던 순환 신경망(RNN)을 자연어 처리와 시계열 데

www.yes24.com

 

첫 장은 신경망 복습으로, 이전 1권에서 다룬 내용이 요약되어있다.

1권을 공부한지 얼마 안되었지만, (난 멍청하기 때문에) 다시 복습하는 의미로 첫 장부터 보고 있다.

넘파이에 행렬 계산을 돕는 메소드가 많이 준비되어 있다는 설명에 넘파이 경험을 쌓고 싶으면 '100 numpy exercises' 문제를 풀으라는 노트가 있어서 한번 알아봤다. 

↓↓↓사이트는 아래에 있다. ↓↓↓

github.com/rougier/numpy-100

 

rougier/numpy-100

100 numpy exercises (with solutions). Contribute to rougier/numpy-100 development by creating an account on GitHub.

github.com

처음부터 백문제를 다 풀어버리겠어! 라는 마음으로 시작하면 몇 개 풀지 못한 채 그만두고, 금방 잊어버릴 것이 자명하다.

따라서 오늘은 열문제만 풀 것이다. :)

 

1. Import the numpy package under the name np (★☆☆)

import numpy as np

넘파이 패키지를 np라는 이름으로 로드하라는 문제이다. 신경망 공부한다는 사람이라면 이정도는 발로도 칠 수 있다. 물론 난 초짜이기 때문에 손가락으로 칠 거다.

 

2. Print the numpy version and the configuration (★☆☆)

print(np.__version__)
np.show_config()

넘파이 버전과 환경을 확인하라는 문제이다. 모듈의 버전은 매우 중요하므로 버전을 확인하는 방법은 꼭 알아두자.

 

3. Create a null vector of size 10 (★☆☆)

a = np.zeros(10)
print(a)
[0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]

null vector는 영벡터를 의미한다. 크기가 10인 영벡터는 np.zeros() 함수를 이용하여 생성한다. 괄호 안에 크기를 지정하면 영벡터 생성 끝!

 

4. How to find the memory size of any array (★☆☆)

print(a.nbytes)
print(a.size * a.itemsize)
print(np.prod(a.shape) * a.itemsize)
80
80
80

배열의 메모리 크기는 numpy.ndarray.nbytes 어트리뷰트를 이용하여 간단하게 구할 수 있다. sizeshape, itemsize를 함께 사용하여 구할 수도 있지만.. 쉬운 방법을 우선적으로 알아두자^^

 

5. How to get the documentation of the numpy add function from the command line? (★☆☆)

python -c "import numpy; numpy.info(numpy.add)"

 

6. Create a null vector of size 10 but the fifth value which is 1 (★☆☆)

a = np.zeros(10)
a[4] = 1
print(a)
[0. 0. 0. 0. 1. 0. 0. 0. 0. 0.]

인덱스를 이용해 배열의 원소에 접근하여 값을 변경한다.

이제 자연스럽게 숫자를 0부터 센다. 멋진 코더가 되었구나.. (코쓱)

 

7. Create a vector with values ranging from 10 to 49 (★☆☆)

a = np.arange(10, 50)
print(a)
[10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49]

np.arange(start, end) 함수를 이용하여 연속적인 숫자 배열을 생성할 수 있다. 단, 마지막 숫자는 end가 아니라 end-1임을 명심하자.

 

8. Reverse a vector (first element becomes last) (★☆☆)

print(a[::-1])
print(np.flip(a))
[49 48 47 46 45 44 43 42 41 40 39 38 37 36 35 34 33 32 31 30 29 28 27 26
 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10]

배열의 원소를 뒤집으라는 문제이다. 간단하게 인덱싱을 통해 수행할 수도 있고, np.flip() 함수를 적용할 수도 있다. np.flip()에 대한 자세한 사용방법은 아래 링크를 참고하자.

rfriend.tistory.com/518

 

[Python Numpy] numpy array 거꾸로 뒤집기 (how to reverse numpy array)

이번 포스팅에서는 Python numpy 의 배열 원소의 순서를 거꾸로 뒤집기 (how to reverse the python numpy array) 하는 두가지 방법을 소개하겠습니다. 1D array의 원소를 뒤집는 것은 간단한데요, 2D 이상의 다..

rfriend.tistory.com

 

9. Create a 3x3 matrix with values ranging from 0 to 8 (★☆☆)

mat = np.arange(9).reshape(3, 3)
print(mat)
[[0 1 2]
 [3 4 5]
 [6 7 8]]

위에서도 사용한 np.arange() 함수로 0부터 8까지의 정수 배열을 만들고, reshape() 메소드를 사용해 차원과 형상을 변경한다.

np.arange(9)는 1차원 배열이고, shape=(9, )이며,

np.arange(9).reshape(3,3)은 2차원 배열이며, shape=(3, 3)이다.

 

10. Find indices of non-zero elements from [1,2,0,0,4,0] (★☆☆)

mat = np.array([1,2,0,0,4,0])
np.where(mat != 0)
(array([0, 1, 4], dtype=int64),)
nz = np.nonzero([1,2,0,0,4,0])
print(nz)
(array([0, 1, 4], dtype=int64),)

0이 아닌 원소의 인덱스를 찾으라는 문제인데, 나는 np.where(condition)을 사용하여 해결했다.

구글링해보니 np.nonzero()를 사용하여 원 배열로부터 바로 0이 아닌 원소의 인덱스를 찾을 수도 있더라. 결과는 동일하다.

 

다음 포스트는 11번 ~ 20번 문제를 해결한 후 작성해야겠다! 우선 오늘은 끝.