■ 이 책을 보기위해 필요한 파이썬 기본문법
■ numpy 란?(p.36)
-python 언어에서 기본적으로 지원하지 않는
배열array 혹은 행렬matrix 의 계산을 쉽게 해주는 라이브러리
-머신러닝에서 많이 사용하는 선형대수학에 관련한 수식들을
python 에서 쉽게 프로그래밍 할 수 있게 해준다.
※ 다차원 배열(p.77)
다차원 배열도 그 기본은 '숫자의 집합'입니다. 숫자가 한 줄로 늘어선 것이나
직사각형으로 늘어놓은 것, 3차원으로 늘어놓은 것이나
(더 일반화한) N차원으로 나열하는 것을 통틀어 다차원 배열이라고 합니다.
문제1. 아래의 행렬을 numpy 로 만드시오
import numpy as np
a=np.array( [[1,2],[3,4]])
print(a)
결과:
[[1 2]
[3 4]]
문제2. 위의 a 행렬의 각 요소에 5을 더한 값을 출력하시오
import numpy as np
a=np.array( [[1,2],[3,4]])
a=a+5
print(a)
[[6 7]
[8 9]]
※브로드캐스트:
넘파이에서는 형상이 다른 배열끼리도 합,곱 등 계산할 수 있습니다.
위 문제에서 5라는 스칼라값이 2x2 행렬로 확대된 후
연산이 이뤄지는 이 기능을
브로드캐스트broadcast 라고 합니다.
예:
a=np.array([[1,2],[3,4]])
b=np.array([10,20])
print(a*b)
이 경우도 1차원 배열 b를 브로드캐스트 해서 a과 똑같이 2x2 행렬로
확대시켜서 연산합니다
b=np.array([10,20]) → b=np.array([[10,20],[10,20]])
문제3. 아래 배열된 원소들의 평균값을 출력하시오
import numpy as np
a=np.array([1,2,4,5,5,7,10,13,18,21])
print(np.mean(a))
※ 예제
중앙값: np.median()
최대값: np.max()
최소값: np.min()
표준편차: np.std()
분산: np.var()
문제4.(점심시간문제)
아래의 행렬식을 numpy 로 구현하시오
1 3 7 0 0 5
+ = ?
1 0 0 7 5 0
import numpy as np
a=np.array([[1,3,7],[1,0,0]])
b=np.array([[0,0,5],[7,5,0]])
print(a+b) #위아래 합-왼쪽이 위로/오른쪽이 아래행렬로 이동.
[[ 1 3 12]
[ 8 5 0]]
※ 넘파이 배열은(np.array)은 N차원 배열을 작성할 수 있습니다.
1차원 배열, 2차원 배열, 3차원 배열처럼 원하는 차수의 배열을 만들 수 있습니다.
수학에서는 1차원 배열은 벡터vector, 2차원 배열은 행렬matrix 이라고 부릅니다.
또 벡터와 행렬을 일반화한 것을 텐서tensor™ 라 합니다.
™구글의 딥러닝 프레임워크인 텐서플로의 이름이 여기서 유래했습니다.
텐서tensor가 신경망을 타고 흐른다flow는 뜻입니다.
■ 넘파이의 산술 연산(p.37)
x=np.array([1,2,3])
y=np.array([2,4,6])
print(x+y)
print(x-y)
print(x*y)
print(x/y)
결과↓
[3 6 9]
[-1 -2 -3]
[ 2 8 18]
[ 0.5 0.5 0.5]
문제5. 위에서 만든 x와 y가 각각 몇행 몇일인지를 책 38p 를 보고 구현하시오
x=np.array([1,2,3])
y=np.array([2,4,6])
x.shape
Out[37]: (3,) --------> (1,3)과 같다. 1행 3열
y.shape
Out[39]: (3,)
문제6. 아래의 덧셈 행렬의 결과를 파이썬으로 구현하시오
1 2 10 20
+ = ?
3 4 30 40
문제7. 문제6번의 덧셈 행렬을 numpy를 이용하지 않고 파이썬 코드로만
수행하시오 !
def hap(x,y):
for i in range(len(x)): #0,1
for j in range(len(x)): #0,1
print(x[i][j]+y[i][j])
a=([[1,2],[3,4]])
b=([[10,20],[30,40]])
hap(a,b)
문제8. 아래의 행렬곱을 numpy로 구현하는데 브로드캐스트가 되는지
확인하시오 !
a=np.array([[1,2],[3,4]])
print(a*10)
문제9. 아래의 그림을 numpy로 구현하시오
(브로드캐스트가 되는지 확인하시오)
1 2
* 10 20
3 4
↓ 브로드캐스트 하면?
1 2 10 20
*
3 4 10 20
a=np.array([[1,2],[3,4]])
b=np.array([[10,20]])
print(a*b)
[[10 40]
[30 80]]
문제10. 문제9번을 넘파이 이용하지 말고 구현해보시오
a=[[1,2],[3,4]]
b=[10,20]
for i in range(len(a)):
for j in range(len(a)):
print(a[i][j]*b[j])
10
40
30
80
***결과가 위 답도 맞지만, 브로드캐스트 라는 개념에 맞게 문제를 풀려면
b=b*2 해야 한다
a=[[1,2],[3,4]]
b=[[10,20]]
b=b*2
for i in range(len(a)):
for j in range(len(a)):
print(a[i][j]*b[i][j])
※b=[[10,20]]
print(b*2)
[[10, 20], [10, 20]]
■원소접근(p40)
문제11. 넘파이를 이용하지 않고
아래의 행렬식을 만들고 아래의 행렬의 요소에서 15 이상인 것만
출력하시오 !
51 55
14 19
0 4
결과: [51, 55, 19]
a = [ [51,55] , [14,19], [0,4] ]
b=[]
for i in range(len(a)):
for i2 in range(len(a[i])):
if a[i][i2] >= 15:
b.append(a[i][i2])
print(b)
문제12. 문제11번을 넘파이로 구현하시오
import numpy as np
a=np.array([[51,55],[14,19],[0,4]])
print(a[a>=15]) #인덱스가 15 이상인 원소 얻기
※신경망 구현때 자주 쓰는 코드니까 잘 알아둘 것
■ matplotlib
딥러닝 실험에서는 그래프 그리기와 데이터 시각화가 중요하다
matplotlib 는 그래프를 그리기 위한 라이브러리다
matplotlib 를 이용하면 그래프를 그리기가 쉬워진다
예제1:
import matplotlib.pyplot as plt
plt.plot([1,2,3,4,5,6,7,8,7,6,5,4,3,2,1,0])
plt.show()
예제2:
넘파이 배열을 이용해서 그래프 그리기
import matplotlib.pyplot as plt
import numpy as np
t=np.arange(0,12,0.01)
print(t)
[ 0.00000000e+00 1.00000000e-02 2.00000000e-02 ..., 1.19700000e+01
1.19800000e+01 1.19900000e+01]
※arange: 0~12 까지 0.01 만큼 증가하라
문제13. 위의 그래프에 grid(격자)를 추가하시오
import matplotlib.pyplot as plt
import numpy as np
t=np.arange(0,12,0.01)
plt.plot(t)
plt.grid()
plt.show()
문제14. 아래의 그래프를 그리시오
import matplotlib.pyplot as plt
plt.plot([6,4,2,0,2,4,6],color='red')
plt.show()
화면 캡처: 2019-01-07 오후 3:33
문제15. 아래의 그래프를 그리시오!
import matplotlib.pyplot as plt
plt.plot([6,8,8,6,8,8,6],color='red')
plt.show()
문제16. 문제14번 코드와 문제15번 코드를 조합해서 아래의 그래프를 그리시오
import matplotlib.pyplot as plt
plt.plot([6,8,8,6,8,8,6],color='red')
plt.plot([6,4,2,0,2,4,6],color='red')
plt.show()
문제17. 위의 그래프에 제목을 아래와 같이 붙이시오
import matplotlib.pyplot as plt
from matplotlib import font_manager, rc
#한글폰트설정
font_name = font_manager.FontProperties(fname="C:/Windows/Fonts/H2PORM.TTF").get_name()
rc('font', family=font_name)
plt.plot([6,8,8,6,8,8,6],color='red')
plt.plot([6,4,2,0,2,4,6],color='red')
plt.grid()
plt.title("재혁이를 향한 우용이의 마음")
plt.show()
문제18. 아래의 넘파이 배열로 산포도 그래프를 그리시오!
import numpy as np
import matplotlib.pyplot as plt
x=np.array([0,1,2,3,4,5,6,7,8,9])
y=np.array([9,8,7,9,8,3,2,4,3,4])
plt.scatter(x,y)
plt.show()
문제19. 위의 산포도 그래프를 라인 그래프로 그리시오
import numpy as np
import matplotlib.pyplot as plt
x=np.array([0,1,2,3,4,5,6,7,8,9])
y=np.array([9,8,7,9,8,3,2,4,3,4])
plt.plot(x,y)
plt.show()
문제20. 위의 plot그래프에 x축의 라벨을 '월' 이라고 하고
y축의 라벨을 '아파트 매매 가격' 이라고 하고
제목을 '아파트 매매 가격 변동 추이" 라고 하시오
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import font_manager, rc
# 한글 폰트 설정
font_name = font_manager.FontProperties(fname="C:/Windows/Fonts/H2PORM.TTF").get_name()
rc('font', family=font_name)
x=np.array([0,1,2,3,4,5,6,7,8,9])
y=np.array([9,8,7,9,8,3,2,4,3,4])
plt.plot(x,y)
plt.title("아파트 매매 가격 변동 추이")
plt.xlabel("월")
plt.ylabel("아파트 매매 가격")
plt.show()
문제21. 치킨집 창업현황을 라인그래프로 시각화 하시오
import numpy as np
from matplotlib import pyplot as plt
from matplotlib import font_manager, rc
# 한글 폰트 설정
font_name = font_manager.FontProperties (fname="C:/Windows/Fonts/H2PORM.TTF").get_name()
rc('font', family=font_name)
chi = np.loadtxt('D:\\data\\창업건수.csv', skiprows=1,
unpack=True, delimiter=',')
# skiprows: 1번째 줄 스킵해라
# 설명 : unpack = False 면 csv 파일을 그대로 읽어오는것이고
# unpack = True 면 csv 파일을 pivot 해서 읽어오는것이다
print( chi )
x = chi[0]
y = chi[4]
plt.plot(x,y)
plt.xlabel('년도')
plt.ylabel('치킨집 창업건수')
plt.title('년도별 치킨집 창업 현황')
plt.show()
문제22. 치킨집 폐업현황을 라인그래프로 시각화 하시오
문제23. 위의 두개의 그래프를 겹치게 해서 출력하시오
import numpy as np
from matplotlib import pyplot as plt
from matplotlib import font_manager, rc
# 한글 폰트 설정
font_name = font_manager.FontProperties (fname="C:/Windows/Fonts/H2PORM.TTF").get_name()
rc('font', family=font_name)
chi = np.loadtxt('D:\\data\\폐업건수.csv', skiprows=1,
unpack=True, delimiter=',')
chi1 = np.loadtxt('D:\\data\\창업건수.csv', skiprows=1,
unpack=True, delimiter=',')
# 설명 : unpack = False 면 csv 파일을 그대로 읽어오는것이고
# unpack = True 면 csv 파일을 pivot 해서 읽어오는것이다
#print( chi )
x = chi[0]
y = chi[4]
x1 = chi1[0]
y1 = chi1[4]
#plt.figure(figsize=(6,4))
plt.plot(x,y)
plt.plot(x1,y1)
plt.xlabel('년도')
plt.ylabel('치킨집 창업,폐업건수')
plt.title('년도별 치킨집 현황')
plt.show()
다른방법(legend 나오게 하는거)
↓
import numpy as np
from matplotlib import pyplot as plt
from matplotlib import font_manager, rc
# 한글 폰트 설정
font_name = font_manager.FontProperties (fname="C:/Windows/Fonts/H2PORM.TTF").get_name()
rc('font', family=font_name)
chi = np.loadtxt('D:\\data\\폐업건수.csv', skiprows=1,
unpack=True, delimiter=',')
chi1 = np.loadtxt('D:\\data\\창업건수.csv', skiprows=1,
unpack=True, delimiter=',')
# 설명 : unpack = False 면 csv 파일을 그대로 읽어오는것이고
# unpack = True 면 csv 파일을 pivot 해서 읽어오는것이다
#print( chi )
x = chi[0]
y = chi[4]
x1 = chi1[0]
y1 = chi1[4]
#plt.figure(figsize=(6,4))
plt.plot(x,y, label='폐업')
plt.plot(x1,y1, label='창업')
plt.legend()
plt.xlabel('년도')
plt.ylabel('치킨집 창업폐업건수')
plt.title('년도별 치킨집 현황')
plt.show()
※ 동그라미 친 부분이 legend 써서 나오는 부분
문제24. 책 44페이지의 레나 사진을 파이썬으로 구현하시오
import matplotlib.pyplot as plt
from matplotlib.image import imread
img = imread('D:\\lena.png')
plt.imshow(img)
plt.show()
문제25.(오늘의 마지막 문제)
한식집의 창업과 폐업건수를 라인그래프로 시각화 하시오
import numpy as np
from matplotlib import pyplot as plt
from matplotlib import font_manager, rc
# 한글 폰트 설정
font_name = font_manager.FontProperties (fname="C:/Windows/Fonts/H2PORM.TTF").get_name()
rc('font', family=font_name)
chi = np.loadtxt('D:\\data\\폐업건수.csv', skiprows=1,
unpack=True, delimiter=',')
chi1 = np.loadtxt('D:\\data\\창업건수.csv', skiprows=1,
unpack=True, delimiter=',')
# 설명 : unpack = False 면 csv 파일을 그대로 읽어오는것이고
# unpack = True 면 csv 파일을 pivot 해서 읽어오는것이다
#print( chi )
x = chi[0]
y = chi[6]
x1 = chi1[0]
y1 = chi1[6]
#plt.figure(figsize=(6,4))
plt.plot(x,y, label='폐업')
plt.plot(x1,y1, label='창업')
plt.legend()
plt.xlabel('년도')
plt.ylabel('한식집 창폐업 건수')
plt.title('년도별 한집 현황')
plt.show()
'deeplearning' 카테고리의 다른 글
5장. 오차 역전파 ( 계산 그래프, 연쇄법칙, 역전파 ) (0) | 2019.03.27 |
---|---|
4장. 인공 신경망을 학습시킴(손실(오차)함수, 수치 미분, 경사하강법, 학습 알고리즘 구현) (0) | 2019.03.27 |
3장. 인공 신경망 ( 신경망의 활성화 함수, 3층 신경망 구현 ) (0) | 2019.03.27 |
2장. 퍼셉트론Perceptron (0) | 2019.03.27 |
Intro.딥러닝 소개 (0) | 2019.03.27 |