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

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

HyunMaru 2021. 7. 11. 16:49

이 책은 파이썬이라는 프로그래밍 언어를 사용하여 딥러닝을 구현하는 법을 알려주는 책이다.

당연히, 파이썬을 어느정도 다룰줄 알아야 이 책에 있는 내용들을 실습할 때 편할 것 같다.

헷갈리거나, 애매모호한 문법들이 있어서 정리를 해본다.

리스트(List)

리스트란 여러 데이터들을 묶어서 정리하는 문법이다. 

List 사용예시 (출력문, len함수)

위 그림처럼 리스트를 만들면, print(a) 로 리스트를 출력, len(a)로 리스트의 길이를 출력할 수 있다.

그리고 리스트에 접근할 때는 a[0] 로 하여 0번째 인덱스에 접근할 수 있다.

 

List 사용예시(슬라이싱)

위 그림에서는 리스트를 출력하는 다른 방법으로 '슬라이싱'이라는 기법이 있다. 

슬라이싱은 내가 원하는 범위를 지정하여 부분 리스트를 얻는 기법이다.

a[0:2] 라고 쓰면 0번째 인덱스, 1번째 인덱스를 뽑겠다는 의미이고, a[1:] 라고 쓰면 1번째 인덱스부터 끝까지 있는 인덱스를 모두 뽑겠다는 의미이다.

a[:-1]은 처음부터 마지막 인덱스 1개 앞까지 얻겠다는 의미이다. (리스트에서의 -1은 마지막원소를 의미)

딕셔너리(Dictionary)

리스트에서는 인덱스 번호를 0,1,2라고 했다면, 딕셔너리에서는 키(key)값(value)를 한 쌍으로 저장한다.

Dictionary 사용예시

위 그림처럼 me = {'키' :168} 라고 쓰면 딕셔너리를 생성한다는 의미이고, 위 딕셔너리에서 키,값 한쌍을 더 추가하고 싶다면 me['몸무게'] = 65 로 써서 딕셔너리의 새 원소를 추가할 수 있다.

 

클래스(Class)

C++이나  JAVA에서 썼던 것처럼 파이썬에도 클래스가 있다.

다만 파이썬에서는 다른 언어들과 비슷하나 다르게(?)  선언한다.

클래스(Class) 생성자 및 메소드 선언

__init__이라는 특별한 메서드로 클래스의 생성자를 선언할 수 있다. 

그리고 C++,JAVA에서는 this->name = name 이런 식으로 멤버 변수를 초기화 했다면,  파이썬에서 클래스는 

self.name = name으로 멤버 변수를 초기화 한다. 

클래스의 인스턴스 생성 및 함수 호출

클래스를 만들었으면, 클래스의 인스턴스와 함수를 해보자.

위 그림처럼 m 이라는 인스턴스를 만들면서 "현진" 이라는 인수를 넘겨주어서 m이라는 인스턴스의 name 멤버 변수에 "현진"으로 초기화 되었음을 알 수 있다.

 

넘파이(Numpy) & Matplotlib

넘파이와 Matploblib는 외부 라이브러리에서 가져와야하므로 미리 import를 해준다.

넘파이(Numpy)

 

numpy 선언 및 출력

넘파이는 파이썬의 리스트를 인수로 받아서 넘파이 라이브러리가 제공하는 특수한 형태의 배열(numpy.ndarray)를 반환한다. 다음으로, 이 배열을 연산하는 방법에 대해 알아보기 위해 행렬에 대한 이해가 필요하다.

행렬을 어느정도 공부했다면 numpy에서의 연산은 어렵지 않게 이해할 수 있을 것이다.

numpy 에서의 산술연산

위 그림처럼 동일한 원소 갯수를 가진 x,y 가 주어질때, 원소별로 덧셈,뺄셈,곱셉,나눗셈이 모두 행해져서 결과가 그림처럼 나타난다. 만약 원소 갯수가 같지 않다면 오류가 뜰 것이니 주의해야한다.

 

다음으로는, 넘파이 배열과 스칼라값의 조합으로 된 연산이다. 이를 '브로드캐스트'라고 부른다

브로드캐스트의 예시

지금까지 해온 넘파이 예시는 모두 1차원 배열이였다. 

이제부터 알아볼 배열은 2차원 배열로 우리는 이것을 행렬이라고 부른다.

작성법은 다음과 같다.

행렬 선언 및 출력, 행렬의 크기 출력

선언은 위 그림처럼 할 수 있고, A.shape는 행렬의 크기를 알려준다. 위 그림같은 행렬은 2개의 열과 2개의 행으로 이루어진 2*2 행렬이라서 (2,2)라고 출력이 되었음을 확인할 수 있다.

그리고 이 행렬의 연산 또한, 1차원 배열에서 해왔던 연산처럼 각 원소마다 덧셈을 할 수 있다.

행렬 덧셈

그리고 1차원 배열때 설명한 브로드캐스트도 사용이 가능하다. 

행렬의 브로드캐스트

 

#1 요약을 하면, 파이썬의 기본구조 중에서 애매모호한 것들에 대해 알아 보았고,

그리고 numpy에서의 기본 선언 방법, 1,2차원 배열에서의 산술 연산과 브로드 캐스트에 대해서 알아 보았다.

 

끄읕~~