이 책은 파이썬이라는 프로그래밍 언어를 사용하여 딥러닝을 구현하는 법을 알려주는 책이다.
당연히, 파이썬을 어느정도 다룰줄 알아야 이 책에 있는 내용들을 실습할 때 편할 것 같다.
헷갈리거나, 애매모호한 문법들이 있어서 정리를 해본다.
리스트(List)
리스트란 여러 데이터들을 묶어서 정리하는 문법이다.
위 그림처럼 리스트를 만들면, print(a) 로 리스트를 출력, len(a)로 리스트의 길이를 출력할 수 있다.
그리고 리스트에 접근할 때는 a[0] 로 하여 0번째 인덱스에 접근할 수 있다.
위 그림에서는 리스트를 출력하는 다른 방법으로 '슬라이싱'이라는 기법이 있다.
슬라이싱은 내가 원하는 범위를 지정하여 부분 리스트를 얻는 기법이다.
a[0:2] 라고 쓰면 0번째 인덱스, 1번째 인덱스를 뽑겠다는 의미이고, a[1:] 라고 쓰면 1번째 인덱스부터 끝까지 있는 인덱스를 모두 뽑겠다는 의미이다.
a[:-1]은 처음부터 마지막 인덱스 1개 앞까지 얻겠다는 의미이다. (리스트에서의 -1은 마지막원소를 의미)
딕셔너리(Dictionary)
리스트에서는 인덱스 번호를 0,1,2라고 했다면, 딕셔너리에서는 키(key) 와 값(value)를 한 쌍으로 저장한다.
위 그림처럼 me = {'키' :168} 라고 쓰면 딕셔너리를 생성한다는 의미이고, 위 딕셔너리에서 키,값 한쌍을 더 추가하고 싶다면 me['몸무게'] = 65 로 써서 딕셔너리의 새 원소를 추가할 수 있다.
클래스(Class)
C++이나 JAVA에서 썼던 것처럼 파이썬에도 클래스가 있다.
다만 파이썬에서는 다른 언어들과 비슷하나 다르게(?) 선언한다.
__init__이라는 특별한 메서드로 클래스의 생성자를 선언할 수 있다.
그리고 C++,JAVA에서는 this->name = name 이런 식으로 멤버 변수를 초기화 했다면, 파이썬에서 클래스는
self.name = name으로 멤버 변수를 초기화 한다.
클래스를 만들었으면, 클래스의 인스턴스와 함수를 해보자.
위 그림처럼 m 이라는 인스턴스를 만들면서 "현진" 이라는 인수를 넘겨주어서 m이라는 인스턴스의 name 멤버 변수에 "현진"으로 초기화 되었음을 알 수 있다.
넘파이(Numpy) & Matplotlib
넘파이와 Matploblib는 외부 라이브러리에서 가져와야하므로 미리 import를 해준다.
넘파이(Numpy)
넘파이는 파이썬의 리스트를 인수로 받아서 넘파이 라이브러리가 제공하는 특수한 형태의 배열(numpy.ndarray)를 반환한다. 다음으로, 이 배열을 연산하는 방법에 대해 알아보기 위해 행렬에 대한 이해가 필요하다.
행렬을 어느정도 공부했다면 numpy에서의 연산은 어렵지 않게 이해할 수 있을 것이다.
위 그림처럼 동일한 원소 갯수를 가진 x,y 가 주어질때, 원소별로 덧셈,뺄셈,곱셉,나눗셈이 모두 행해져서 결과가 그림처럼 나타난다. 만약 원소 갯수가 같지 않다면 오류가 뜰 것이니 주의해야한다.
다음으로는, 넘파이 배열과 스칼라값의 조합으로 된 연산이다. 이를 '브로드캐스트'라고 부른다
지금까지 해온 넘파이 예시는 모두 1차원 배열이였다.
이제부터 알아볼 배열은 2차원 배열로 우리는 이것을 행렬이라고 부른다.
작성법은 다음과 같다.
선언은 위 그림처럼 할 수 있고, A.shape는 행렬의 크기를 알려준다. 위 그림같은 행렬은 2개의 열과 2개의 행으로 이루어진 2*2 행렬이라서 (2,2)라고 출력이 되었음을 확인할 수 있다.
그리고 이 행렬의 연산 또한, 1차원 배열에서 해왔던 연산처럼 각 원소마다 덧셈을 할 수 있다.
그리고 1차원 배열때 설명한 브로드캐스트도 사용이 가능하다.
#1 요약을 하면, 파이썬의 기본구조 중에서 애매모호한 것들에 대해 알아 보았고,
그리고 numpy에서의 기본 선언 방법, 1,2차원 배열에서의 산술 연산과 브로드 캐스트에 대해서 알아 보았다.
끄읕~~
'밑바닥부터 시작하는 딥러닝' 카테고리의 다른 글
밑바닥부터 시작하는 딥러닝 #2 (0) | 2022.02.07 |
---|