huskycat1202
01. 헬로 파이썬 본문
이 글은 '밑바닥부터 시작하는 딥러닝' 이란 책으로 공부하며 작성했다.
1.1 파이썬이란?
파이썬은 오픈소스이며, 영어와 유사한 문법을 갖고 있다. 또한 빠르고 쉽게 코딩할 수 있다.
특히 파이썬은 기계학습, 데이터 과학에 쓰인다. 딥러닝 프레임워크에서 제공하는 API를 통해 딥러닝도 가능하다.
1.2 파이썬 설치하기
파이썬에는 버전 2, 3이 있는데, 파이썬3의 코드를 파이썬2에서 실행하지 못한다.
앞으로 공부하며 사용할 외부 라이브러리는 NumPy, matplotlib이다.
NumPy는 수치 계산용 라이브러리로, 수학 알고리즘과 배열(행렬)을 다룰 수 있는 method가 있다.
matplotlib는 그래프 작성 라이브러리로, 실험결과나 딥러닝 실행 중간과정의 시각화가 가능하다.
이 책으로 공부하며 사용할 파이썬의 배포판인 아나콘다3를 설치해야 한다.
여기서 배포판이란, 사용자가 설치를 한 번에 할 수 있도록 라이브러리 등을 하나로 정리한 것이다.
아나콘다의 경우 NumPy, matplotlib와 같은 라이브러리가 있어 데이터 분석에 유용하다.
1.3 파이썬 인터프리터
설치 링크: www.anaconda.com/products/individual
Anaconda | Individual Edition
Anaconda's open-source Individual Edition is the easiest way to perform Python/R data science and machine learning on a single machine.
www.anaconda.com
현재 MacOS를 사용 중이므로 아래 두 개 중 하나를 설치한다.
Command Line을 통해 설치하는 방법과 간단하게 설치하는 Graphical 두 가지 중 Graphical을 선택해 설치한다.
설치가 끝나면 아래와 같이 버전을 확인한다.
(base) ➜ ~ python3 --version
Python 3.8.5
(base) ➜ ~ conda --version
conda 4.9.2
python을 입력해 파이썬 인터프리터를 시작한다.
파이썬 인터프리터는 대화하듯 대화모드로 프로그래밍할 수 있다.
(base) ➜ ~ python
Python 3.8.5 (default, Sep 4 2020, 02:22:02)
[Clang 10.0.0 ] :: Anaconda, Inc. on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> 1+2
3
>>> 1-2
-1
>>> 4*5
20
>>> 7/5
1.4
>>> 3**2
9
위와 같이 덧셈(+), 뺄셈(-), 곱셈(*), 나눗셈(/), 거듭제곱(**)이 가능하다.
참고로, 파이썬3의 정수 나눗셈의 결과는 실수(부동소수점)인데 비해, 파이썬2의 정수 나눗셈의 결과는 정수이다.
파이썬에서는 type() 함수를 통해 데이터의 자료형을 알 수 있다.
여기서 자료형이란, 데이터의 성질로, 클래스라고도 한다.
>>> type(10)
<class 'int'>
>>> type(12.02)
<class 'float'>
>>> type("hello world")
<class 'str'>
>>> type(["리스트",1,2,3])
<class 'list'>
>>> type(("튜플",1,2,3))
<class 'tuple'>
>>> type({"셋",1,2,3})
<class 'set'>
>>> type({1:"사전",2:"dictionary"})
<class 'dict'>
자료형에는 int(정수), float(실수), str(문자열), list(배열), tuple(읽기 전용 배열), set(집합), dictionary(사전 형태), bool(논리형) 등이 있다.
a, b, c와 같은 알파벳으로 변수를 정의해 값을 대입하거나 계산할 수 있다.
>> a=1
>>> print(a)
1
>>> a=2
>>> print(a)
2
>>> b=12.02
>>> print(b)
12.02
>>> a*b
24.04
>>> type(a*b) # 자동 형변환
<class 'float'>
파이썬은 동적 언어로 변수의 자료형을 상황에 맞게 자동 결정한다. 또한 자동으로 자료형의 변환도 일어난다.
list는 a[index]의 형태로, a[0]부터 시작한다.
파이썬 내 슬라이싱([:])이란 기능으로 지정 범위 부분 리스트를 얻을 수 있다.
>>> a=[1,2,3,4,5,6,7,8,9]
>>> print(a)
[1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> len(a) # 길이
9
>>> a[0]
1
>>> a[8]
9
>>> a[len(a)-1] # index에 직접 len을 사용 가능
9
>>> a[0]=0
>>> print(a)
[0, 2, 3, 4, 5, 6, 7, 8, 9]
>>> a[0:3] # 0번째부터 3개
[0, 2, 3]
>>> a[1:] # 1번째부터 끝까지
[2, 3, 4, 5, 6, 7, 8, 9]
>>> a[:5] # 처음부터 5개
[0, 2, 3, 4, 5]
>>> a[:-1] # 처음부터 뒤에서 첫번째 전까지
[0, 2, 3, 4, 5, 6, 7, 8]
>>> a[:-2] # 처음부터 뒤에서 두번째 전까지
[0, 2, 3, 4, 5, 6, 7]
>>> a[-2:] # 뒤에서부터 2개
[8, 9]
dictionary는 dict={key:value}의 형태로, 사전과 같다. 새 key, value를 추가할 수 있다.
>>> alphabet = {'a':97}
>>> alphabet['a']
97
>>> alphabet['b']=98 # 원소 추가
>>> print(alphabet)
{'a': 97, 'b': 98}
bool은 True, False 중 하나를 취하는데, 논리 연산자 and, or, not을 사용할 수 있다.
>>> a=True
>>> b=False
>>> type(a)
<class 'bool'>
>>> not a # a의 반대
False
>>> a and b # a와 b 중에 하나라도 False면 False
False
>>> a or b # a와 b 중에 하나라도 True면 True
True
if문을 통해 조건을, for문을 통해 반복을 사용할 수 있다.
>>> a=True
>>> b=0
>>> for i in [1,2,3,4]: # 4번 반복
... if a: # a=True라면
... b=b+1 # b에 1 더하고
... print(b) # b 출력
... print(a) # a 출력
... a=not a # a의 논리값을 반대로
...
1
True
False
2
True
False
함수란 특정 기능 수행 명령을 하나로 묶은 것으로, 인수를 취할 수 있다.
>>> def hello():
... print("Hello World!")
... print("Hello"+" "+"Python!")
...
>>> hello()
Hello World!
Hello Python!
>>> def hello(name): # 인수 = name
... print("Hello " + name + "!")
...
>>> hello("Annie")
Hello Annie!
1.4 파이썬 스크립트 파일
파이썬의 코드를 스크립트 파일로 저장하고 실행할 수 있다.
여기서부터는 VScode를 사용해 파일을 관리하는 것이 편리하다.
hello.py라는 파일을 저장하고 실행하면 다음과 같다.
(base) ➜ deeplearning vim hello.py
#
print("Hello")
#
(base) ➜ deeplearning python hello.py
Hello
파이썬에서는 새로운 클래스와 그의 전용 함수를 정의할 수 있다.
base) ➜ deeplearning vim man.py
#
class Man:
def __init__(self, name):
self.name = name
print("Initialized!")
# 클래스 초기화 method(생성자). 첫 인수가 self(자신).
def hello(self):
print("Hello " + self.name + "!") # method 1
def goodbye(self):
print("Good Bye "+ self.name + "!") # method 2
m = Man("Annie")
m.hello()
m.goodbye()
#
(base) ➜ deeplearning python man.py
Initialized!
Hello Annie!
Good Bye Annie!
먼저 Man이란 클래스에서 m이란 객체를 생성한다
그리고 init에서 name이란 인수를 받아 self.name을 초기화한다.
1.5 NumPy
numpy.array의 method를 통해 배열, 행렬 계산을 할 수 있다.
사용에 앞서, NumPy는 외부 라이브러리로 import 해서 사용한다.
배열 연산 시 원소 수는 같아야 한다.
>>> import numpy as np
>>> x=np.array([1,2,3,4]) #1차원 배열 = 벡터
>>> print(x)
[1 2 3 4]
>>> y=np.array([2,4,6,8])
# 원소별 사칙연산
>>> x+y
array([ 3, 6, 9, 12])
>>> x-y
array([-1, -2, -3, -4])
>>> x*y
array([ 2, 8, 18, 32])
>>> x/y
array([0.5, 0.5, 0.5, 0.5])
>>> y/2
array([1., 2., 3., 4.])
>>> type(a)
<class 'numpy.ndarray'> # numpy 특수 배열
다차원 배열도 가능하다.
>>> a=np.array([[1,2,3],[4,5,6],[7,8,9]]) # 2차원 배열 = 행렬
>>> print(a)
[[1 2 3]
[4 5 6]
[7 8 9]]
>>> a.shape
(3, 3) # 3x3 행렬
>>> a.dtype
dtype('int64') # 행렬 자료형
>>> b=np.array([[9,8,7],[6,5,4],[3,2,1]])
>>> a+b
array([[10, 10, 10],
[10, 10, 10],
[10, 10, 10]])
>>> a-b
array([[-8, -6, -4],
[-2, 0, 2],
[ 4, 6, 8]])
>>> a*b
array([[ 9, 16, 21],
[24, 25, 24],
[21, 16, 9]])
NumPy에서 원소 수가 다른 배열도 계산할 수 있다.
아래의 스칼라 10은 3x3행렬로 확대 후 계산되며, 이를 브로드캐스트라 한다.
>>> a
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
>>> a*10
array([[10, 20, 30],
[40, 50, 60],
[70, 80, 90]])
>>> b=np.array([10,20,30])
>>> a*b
array([[ 10, 40, 90], # 1*10, 2*20, 3*30
[ 40, 100, 180], # 4*10, 5*20, 6*30
[ 70, 160, 270]]) # 7*10, 8*20, 9*30
원소의 index를 통하거나, index를 배열로 지정해 여러 원소로 접근 가능하다.
>>> for row in a:
... print(row)
...
[1 2 3]
[4 5 6]
[7 8 9]
>>> a[0]
array([1, 2, 3])
>>> a[0][0]
1
>>> aa= a.flatten() # 1차열 배열로 평탄화
>>> print(aa)
[1 2 3 4 5 6 7 8 9]
>>> aa[np.array([1,3,5,7])] # index에 해당한 원소
array([2, 4, 6, 8])
>>> aa>5 # 조건 만족 여부
array([False, False, False, False, False, True, True, True, True])
>>> aa[aa>5] # 조건 만족 원소
array([6, 7, 8, 9])
1.6 matplotlib
matplotilb를 통해 딥러닝에 중요한 그래프와 데이터 시각화가 가능하다.
예를 들어 sin, cos함수를 그리면 아래와 같다.
#-*- coding:utf-8 -*-
# 코드 내 한글이 있을 경우 에러가 발생해 위 코드를 추가한다.
import numpy as np
import matplotlib.pyplot as plt
# 데이터 준비
x=np.arange(0,6,0.1)
# (0, 0.1, 0.2, ..., 5.9)
y1=np.sin(x)
y2=np.cos(x)
# 그래프 그리기
plt.plot(x,y1,label="sin",color="pink")
plt.plot(x,y2,label="cos",color="purple",linestyle="--")
plt.xlabel("x")
plt.ylabel("y")
plt.title("sin & cos")
plt.legend() # 자동으로 범례(그래프 내 표시 정보) 작성
plt.show()
inshow(), imread()를 통해 이미지를 표시할 수 있다.
단, jpeg, jpg는 표시할 수 없고, png는 가능하다.
import matplotlib.pyplot as plt
from matplotlib.image import imread
img=imread('../profile.png') # 이미지 경로,
plt.imshow(img)
plt.show()
+@추가로 알아둘 것
exit()을 작성하거나 ctrl+D를 누르면 파이썬을 종료할 수 있다.
#을 사용하면 주석 처리된다.
코드에 한글이 있을 경우 에러가 뜨는 경우가 있는데, 아래의 코드를 작성하면 해결된다.
#-*- coding:utf-8 -*-
'Deep Learning' 카테고리의 다른 글
04. 신경망 학습 (0) | 2021.01.30 |
---|---|
03. 신경망 (손글씨 숫자 인식) (0) | 2021.01.30 |
03. 신경망 (1) | 2021.01.24 |
02. 퍼셉트론 (0) | 2021.01.24 |