02 최소한의 도구로 딥러닝을 시작합니다
1. 구글 코랩
구글 코랩은 구글이 제공하는 주피터 노트북(jupyter notebook)을 말한다. 딥러닝 분야는 연산 비용이 높아 컴퓨터 성능이 중요한데 코랩을 사용하면 구글 클라우드(Google Cloud)의 가상 서버를 마음껏 활용할 수 있다.
- 코랩은 구글에서 교육과 과학 연구를 목적으로 개발한 도구이다.
- 코랩은 웹 브라우저(Web Browser)를 통해 제어하고 실제 파이썬 코드 실행은 구글 클라우드의 가상 서버에서 이루어진다.
- 코랩에서 만든 파일인 노트북은 구글 드라이브(Google Drive)에 저장하고 불러올 수 있다.
2. 넘파이
넘파이(NumPy)는 파이썬의 핵심 과학 패키지 중 하나이다. 많은 머신러닝과 딥러닝 패키지가 넘파이를 기반으로 구현되었고 넘파이 인터페이스를 계승하고 있다.
파이썬 리스트 복습하기
- 리스트의 인덱스는 0부터 시작한다.
- 리스트의 요소로 다른 리스트를 포함시켜도 된다.
my_List = [10, 'Hello list', 20]
print(my_List[1])
Hello list
my_List_2 = [[10, 20, 30], [40, 50, 60]]
# 이렇게 중첩된 배열을 2차원 배열이라고 한다.
# 이 리스트의 크기는 '2 X 3 크기'
# 2개의 행과 3개의 열
print(my_List_2[1][1])
50
넘파이 준비하기
다차원 배열은 파이썬 리스트로 만들어 사용해도 되지만 파이썬 리스트로 만든 배열은 배열의 크기가 커질수록 성능이 떨어진다는 단점이 있다. 이런 경우에 넘파이를 사용한다. 넘파이는 저수준 언어로 다차원 배열을 구현했기 대문에 배열의 크기가 커져도 높은 성능을 보장한다.
1) 코랩에서 넘파이 임포트하고 버전 확인하기
파이썬의 import 명령으로 넘파이를 임포트할 때 as 키워드를 이용하여 np라는 이름으로 별칭을 만든다.
import numpy as np
print(np.__version__)
1.19.5
넘파이로 배열 만들기
넘파이는 파이썬의 리스트처럼 숫자와 문자열을 함께 담을 수 없다. 만약 문자 데이터가 있어도 결국은 숫자로 바꿔서 입력해야 한다.
1) array() 함수로 2차원 배열 만들기
my_arr = np.array([[10, 20, 30], [40, 50, 60]])
print(my_arr)
[[10 20 30]
[40 50 60]]
2) type() 함수로 넘파이 배열인지 확인하기
array() 함수는 파이썬 리스트를 입력 받아 넘파이 배열을 만든다. 출력된 결과는 파이썬 리스트와 형태가 비슷하다. 파이썬 리스트가 아니라 넘파이 배열임을 확인해 보겠다.
type(my_arr)
numpy.ndarray
3) 넘파이 배열에서 요소 선택하기
넘파이 배열의 요소를 선택하는 방법은 파이썬 리스트에서 요소를 선택하는 방법과 동일하다. 인덱스는 0부터 시작한다.
my_arr[0][2]
30
4) 넘파이 내장 함수 사용하기
파이썬 리스트의 요소를 모두 더하려면 for문을 만들어야 한다. sum() 함수는 배열의 요소를 모두 더해 주는 함수이다. for문을 사용하는 것보다 실행 속도가 매우 빠르고 코드도 간결하다.
np.sum(my_arr)
210
3. 맷플롯립으로 그래프 그리기
맷플롯립(Matplotlib)은 파이썬 과학 생태계의 표준 그래프 패키지이다. 맷플롯립도 코랩에 포함되어 있으므로 바로 사용할 수 있다. 맷플롯립도 별칭 plt를 사용한다.
import matplotlib.pyplot as plt
1) 선 그래프 그리기
선 그래프를 그리려면 x축과 y축의 값을 맷플롯립 plot() 함수에 전달해야 한다. 그런 다음 show() 함수를 이용하여 화면에 그래프를 출력하면 된다.
plt.plot([1, 2, 3, 4, 5], [1, 4, 9, 16, 25])
plt.show
2) 산점도 그리기
자주 사용하는 또 하나의 그래프는 산점도(scatter plot)이다. 산점도는 데이터의 x축, y축의 값을 이용하여 점으로 그래프를 그린 것이다. 이때 show() 함수를 사용하지 않아도 맷플롯립이 자동으로 그래프를 그려주지만 함수를 사용하면 조금 더 깔끔하고 보기 좋은 그래프가 그려진다.
plt.scatter([1, 2, 3, 4, 5], [1, 4, 9, 16, 25])
<matplotlib.collections.PathCollection at 0x7f01ff90b250>
plt.scatter([1, 2, 3, 4, 5], [1, 4, 9, 16, 25])
plt.show()
3) 넘파이 배열로 산점도 그리기
넘파이의 random.randn() 함수를 사용하여 표준 정규 분포를 따르는 난수(random number)를 만들고 그 값을 이용하여 산점도를 그린다.
딥러닝에서도 데이터 시각화는 필수이기 때문에 맷플롯립을 자주 사용할 것이다.
x = np.random.randn(1000)
y = np.random.randn(1000)
plt.scatter(x, y)
plt.show()
'Deep Learning' 카테고리의 다른 글
논문 읽는 법 (0) | 2021.07.26 |
---|---|
윈도우에 PyTorch 설치, 가상환경 만들기, GPU 설정 (0) | 2021.07.03 |
[밑바닥딥러닝1] 딥러닝을 위한 파이썬, 넘파이, matplotlib (0) | 2021.06.29 |
[딥러닝 입문] Ch1. 인공지능과 머신러닝의 개요 (0) | 2021.06.29 |
tesorflow에서 convnet 전이학습 시키기 (0) | 2021.05.31 |