Quiet Time

■딥러닝
■일정 7월 18일

6월 22일 ~ 7월 13일 (3주) : R 수업 - 매일 쪽지시험 2개
7월 13일 ~ 8월  3일  (3주) : 딥러닝 - 개념을 잡는 문제
8월  3일  ~ 8월 23일 (3주) : 텐써플로우 + 개인 프로젝트 (포트폴리오)

신경망에 대해서 얘기 해보세요 

시그모이드 함수가 뭔가요 

그게 왜 필요한가요 ? 


거기에 대한 대답을 할 줄 알아야 한다

코딩만 하다보면 대답을 잘 모해 

밑 바닥 부터 시작하는 딥러닝 책이 총7 챕터 까지 잇다

총 7장 수업 
하루에 한 챕터씩 하더라도 다음주 화요일이면 끝이 난다. 

그래서 

수업과 그리고 오오오 쪽지시험 개념 

  1. 총7장 수업
  2. 쪽지시험 (개념설명 <=-== 면접대비, ncs 시험문제) 
  3. 딥러닝은 평가방법 포트폴리오 (개인프로젝트)

8월 4일 프로젝트 계획서 제출 ( 주제, 참여 인원수, 기간, 상세기간에 계획)
     - 2~3명 : 좀더 좋은 결과물이 나와야하고  
     - 1명   : 계획을 잘 짜서 -> 계획대로 진행

8월 4일까지 계획서 제출 

7월 17일
7월 24일
7월 31일 
8월 7일 : 개인 프로젝트
8월 14일 
8월 21 ----- 8월 23일 (수)


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

■ 1장.  Numpy, matplotlib 사용법

*1장 목차.
  1. 딥러닝이 무엇인가?
  2. 넘파이

■ 1. 딥러닝이 무엇인가?

■ 머신러닝의 종류 3가지
 1.지도학습 
    - 분류 :    knn         : 과일인지 야채인지 단백질인지 분류
                              유방암 종양크기와 둘레로 양성이닞 악성인지 분류
                              동물의 형태로 어떤 종류의 동물인지 분류
               나이브베이즈   : 스팸과 햄 메일 분류
                              직업, 나이, 성별만 가지고 선호하는 
                              영화 장르 
               결정트리      : 1. 대출위험대상자(개인,기업) 분류
                              2.지방간인지 아닌지
                              3.베드민턴 플레이에 날씨가 미치는 영향
                              4.스킨샵 쿠폰반응 여부
               svm         : 서포트벡터머신:                          
1.중산층 분류 실습
2.필기체 분류 숫자 
3.필기체 분류 영어
4.대장균
5.iris
6.mnist(필기체)
7.보스톤 하우징 데이터 분류
    - 회귀 :  선형회귀         
                              1.코스피 지수
                              2.탄닌과 애벌레성장
                              3.미국대학 입학에 미치는 가장큰 변수
                              4.챌린저호 폭파원인분석
                              5.보험비에 미치는 변수(담배, 비만지수)
                              6.스마트폰 구매에 미치는 변수(외관)
               신경망          
                              1.콘크리트 강도에 미치는 변수
                              2.필기체 인식

2.비지도학습 : k-means
                             1.sns 10대들의 관심사를 가지고 10대를 
                                5개의 부류로 분류함 
                             2.가요와 클래식 음악분류

3.강화학습 : 틱택토, 핑퐁


     ■ 머신러닝과 딥러닝의 차이? 


- 딥러닝은 머신러닝에서 나온 한 갈래임

- 머신러닝이란? 
     프로그래머의 프로그래밍없이 컴퓨터에게 배우게 하는 
     능력을 갖게하는 컴퓨터 과학의 한 종류 

예 : 우리가 책상이라는 이미지를 인식하는건 그냥 어렸을때 부터 그게 책상이었고
     그냥 그런가보다 해서 자연스럽게 알게된것이다. 
     컴퓨터에게 이게 책상이다 라고 알려주는 것은 쉬울것 같지만 
     사실 굉장히 어려운 일이다. 

      우리가 책상을 보고 이게 책상이다라고 알 때에 
     우리 뇌에서 일어나느 일들을 우리는 다 알지도 못하고 
     안다해도 그 과정을 프로그래밍 한다는것은 무지막지하게 
     복잡한 일 일것이다. 

     그래서 이런 프로그램을 사람이 작성하는 대신 기계가 
     프로그램을 작성하도록 접근한 것이 머신러닝이다. 

- 머신러닝과 딥러닝의 차이점은? 
     붓꽃의 종을 구별하는 임무가 있다고 했을때 머신러닝은
     사람이 붓꽃의 특성을 정의하고 데이터 세트를 만들고나서
     컴퓨터가 데이터 세트를 기반으로 붓꽃을 구별하는 판별식을 결정하는 방법


머신러닝






딥러닝



 딥러닝은 알고리즘에 의해 컴퓨터가 붓꽃의 사진을 보고 스스로 특성을 찾아내고 판별해 내는 방법이다. 

딥(deep) 이라는 말은 신경망의 층이 많고 각 층마다 고려되는 
변수가 많다는 뜻이다. 

개인프로젝트;
8월 4일 프로젝트 계획서 제출 ( 주제, 참여 인원수, 기간, 상세기간에 계획)
     - 2~3명 : 좀더 좋은 결과물이 나와야하고  
     - 1명   : 계획을 잘 짜서 -> 계획대로 진행


  


■ 밑바닥 부터 시작하는 딥러닝
1장. 파이썬 사용법
2장. 퍼셉트론
3장. 신경망
4장. 신경망 학습
5장. 오차역전파법
6장.학습 관련 시술들
7장. 합성곱 신경망(cnn)
8장. 딥러닝

■ 1장.  Numpy, matplotlib 사용법
1.2 넘파이 (numPy)

- python 언어에서  기본적으로 지원하지 않는
  배열 (array) 혹은 행렬(matrix)의 계산을 쉽게 해주는 라이브러리 

- 머신러닝에서 많이 사용하는 선형대수학에 관련된 수식들을
  파이썬에서 쉽게 프로그래밍 할 수 있게 해준다. 

예제1 : 배열 만들기

import numpy as np 

a = np.array([[1,2],[3,4]])

print(a)

결과 [[1,2]
      [3 4]]

예제2 : 사직연산

a + n : 배열의 모든 원소에 n 만큼을 더합니다.
a - n : 배열의 모든 원소에 n 만큼을 뺀다 .
a * n : 배열의 모든 원소에 n 만큼을 곱한다 .
a / n : 배열의 모든 원소에 n 만큼을 나눈다..

문제1. 아래의 a 배열에 모든 원소에 5를 더한 결과를 출력하시오

a = np.array([[1,2],[3,4]])

문제2. 아래의 배열의 원소들의 평균값을 출력하시오  !

 a = numpy.array([1,2,3,4,5,5,6,10])

답: 
import numpy as np 
a = np.array([1,2,3,4,5,5,6,10])
print(np.mean(a))


문제3. a 배열의 중앙값을 출력하시오
import numpy as np 
a = np.array([1,2,3,4,5,5,6,10])
print(np.median(a))

문제4. a 배열의  최대값과 최소값을 출력하시오 

print(np.max(a))
print(np.min(a))

문제5. a 배열의 표준편차와 분산을 출력하시오 

print(np.std(a))
print(np.var(a))

문제6. 아래의 행렬식으로 numpy로 구현하시오 !
  1 3 7        0  0  5
[        ] + [        ]
  1 0 0        7  5  0 


a=np.array([[1,3,7],[1,0,0]])
b=np.array([[0,0,5],[7,5,0]])
print(a+b)


문제7. 아래의 numpy 배열을 생성하고 원소중에 10만 출력해보시오  !
 1 2 3
[4 10 6 ]
 8 9 20

답 :
a=np.array([[1,2,3],[4,10,6],[8,9,20]])
print(a[1][1])

문제8.아래의 행렬 연산을 파이썬으로 구현하시오 ! (점심시간문제)
 1 2 
(    ) * ( 10 20 ) =?
 3 4 

a= np.array([[1,2],[3,4]]) 
b= np.array([10,20])

print(a*b)



문제9. 아래의 그림의 행렬 연산을 numpy로 구현하시오  !


a=np.array([[0],[10],[20],[30]])
b=np.array([0,1,2])
print(a+b)

문제10. 아래의 행렬 식을 numpy로 구현하고 아래의 요소에서 
     15 이상인 것만 출력하시오 
  55 55
( 14 19 )
   0  4
a=np.array([[55,55],[14,19],[0,4]])
a=a.flatten() # 1차원 배열로 변환 시켜준다. 
a[a>15]

문제11. 아래의 행렬식을 numpy를 이용하지 않고 list변수로 구현하고      
       아래의 행렬식에서 행의 갯수가 몇개인지 출력하시오
1 3 7
1 0 0 

a=[[1,3,7],[1,0,0]]

print(len(a))


문제12. 아래의 행렬식을 numpy를 이용하지 않고 list 변수로 구현하고 
       열의 갯수가 몇개 인지 출력하시오 
1 3 7 
1 0 0 

a=[[1,3,7],[1,0,0]]
print(len(a[0]))

문제13. 아래의 행렬식의 덧셈 연산을 numpy 이용하지 않고 수행하시오 

a=[[1,3,7],[1,0,0]]
b=[[0,0,5],[7,5,0]]
res=[[0,0,0],[0,0,0]]
for in range(len(a)):
    for in range(len(a[0])):
        res[i][j]=a[i][j]+b[i][j]
print(res)

문제14. 아래의 행렬식을 numpy이용하지 않고 구현하시오 ! 

1  2     5  6  
       x          = ?
3  4     7  8




#넘파이 이용
import numpy as np
a=np.array([[1,2],[3,4]])
b=np.array([[5,6],[7,8]])
print(a*b)

# 넘파이 안 이용 
a=[[1,2],[3,4]]
b=[[5,6],[7,8]]
res=[[0,0],[0,0]]
for in range(len(a)):
    for in range(len(a[0])):
        res[i][j]=a[i][j]*b[i][j]
print(res)


문제15. 아래의 행렬 연산을 numpy와 numpy를 이용하지 않았을때 2가지 방법으로 구현하시오 

10   20  -  5  6  = ?
30   40     7  8



#넘파이 이용
a= np.array([[10,20],[30,40]])
b= np.array([[5,6],[7,8]])
print(a-b)

#넘파이 안 이용
a= [[10,20],[30,40]]
b= [[5,6],[7,8]]
res=[[0,0],[0,0]]
for in range(len(a)):
    for in range(len(a[0])):
        res[i][j]=a[i][j]-b[i][j]
print(res)

문제16. numpy의 브로드캐스트를 사용한 연산을 numpy를 이용하지 않는 방법으로 구현하시오 (점심시간 문제를 넘파이 이용하지 않고 )


 1 2 
(    ) * ( 10 20 ) =?
 3 4 


a= [[1,2],[3,4]]
b= [10,20]
res=[[0,0],[0,0]]
for i in range(len(a)):
    for j in range(len(b[0])):
        res[i][j]=a[i][j]-b[j]
print(res)

■ 3. matplotlib 사용법 (p41)

     딥러닝 실험에서는 그래프 그리기와 데이터 시각화가 중요하다
     matplotlib 는 그래프를 그리기 위한 라이브러리이다.

     matplotlib를 이용하면 그래프를 그리기가 쉬워진다. 

예제1:
import matplotlib.pyplot as plt
plt.figure() #객체를 선언한다.
plt.plot([1,2,3,4,5,6,7,8,9,8,7,6,5,4,3,2,1,0])
plt.show()



import matplotlib.pyplot as plt
import numpy as np

t = np.arange(0,12,0.01)
print(t)
plt.figure() #객체를 선언한다.
plt.plot(t)
plt.show()


문제17. 위의 그래프에 grid(격자)를 추가하시오!

import matplotlib.pyplot as plt
import numpy as np

t = np.arange(0,12,0.01)
print(t)
plt.figure() #객체를 선언한다.
plt.plot(t)
plt.grid()
plt.show()


문제18. 위의 그래프에 x축의 이름을 size라고 하고 y축의 이름을 cost라고 하시오 ! 

import matplotlib.pyplot as plt
import numpy as np

t = np.arange(0,12,0.01)
print(t)
plt.figure() #객체를 선언한다.
plt.plot(t)
plt.grid()
plt.xlabel('size')
plt.ylabel('cost')
plt.show()

문제19. 위의 그래프에 전체 제목을 size & cost라고 하시오 


import matplotlib.pyplot as plt
import numpy as np

t = np.arange(0,12,0.01)
print(t)
plt.figure() #객체를 선언한다.
plt.plot(t)
plt.grid()
plt.xlabel('size')
plt.ylabel('cost')
plt.title('size & cost')
plt.show()

문제20. 아래의 numpy 배열로 산포도 그래프를 그리시오 ! 

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.figure()
plt.scatter(x,y)
plt.show()


문제21. 위 그래프를 선이 그어지게 하시오 


문제22. 치킨집 창업 데이터를 읽어와 그래프를 그리시오


import numpy as np
from matplotlib import pyplot as plt
chi = np.loadtxt('d:\\data\\창업건수.csv', skiprows=1 , unpack=True,delimiter=',')

x = chi[0]
y = chi[4]

plt.figure()
plt.plot(x,y)
plt.xlabel("YEAR")
plt.ylabel('JIP')
plt.title('chicken jip open per year')

문제23. 폐업건수도 위의 그래프에 겹치게 해서 출력하시오 ! 

import numpy as np
from matplotlib import pyplot as plt
chi = np.loadtxt('d:\\data\\창업건수.csv', skiprows=1 , unpack=True,delimiter=',')
pe = np.loadtxt('d:\\data\\창업건수.csv', skiprows=1 , unpack=True,delimiter=',')
unpack=True 세로로 읽겠다 
x = chi[0]
y = chi[4]
p = pe[4]
plt.figure()
plt.plot(x,y)
plt.plot(x,p)
plt.xlabel("YEAR")
plt.ylabel('JIP')
plt.title('chicken jip open per year')
plt.show()


문제24. 위의 그래프에 legend도 출력하시오 (


import numpy as np
from matplotlib import pyplot as plt
chi = np.loadtxt('d:\\data\\창업건수.csv', skiprows=1 , unpack=True,delimiter=',')
pe = np.loadtxt('d:\\data\\창업건수.csv', skiprows=1 , unpack=True,delimiter=',')
unpack=True 세로로 읽겠다 
x = chi[0]
y = chi[4]
p = pe[4]
plt.figure()
plt.plot(x,y)
plt.plot(x,p)
plt.xlabel("YEAR")
plt.ylabel('JIP')
plt.title('chicken jip open per year')
plt.legend()
plt.show()

문제25. 책 44 페이지의 이미지 표시를 파이썬으로 구현하시오 ! 
import numpy as np
from matplotlib import pyplot as plt
from matplotlib.image import imread
img = imread('d:\\data\\lena.png')
plt.imshow(img)
plt.show()

문제26. 고양이 사진을 출력하시오! 

import numpy as np
from matplotlib import pyplot as plt
from matplotlib.image import imread
img = imread('d:\\data\\고양.png')
plt.imshow(img)
plt.show()


  1. 파이썬은 익히기 쉬운 프로그래밍 언어이다
  2. 파이썬오픈 소스다
  3. 이책의 딥러닝 구현은 파이썬 3버전을 이용한다
  4. 외부 라이브러리로는 numpy와 matplotlib을 사용했따.
  5. 파이썬에서는 함수와 클래스 같은 ㅇ모듈로 구현을 정히 할 수 잇따.
  6. 넘파이느 ㄴ다차원 배열을 다루는 편리한 메서드를 많이 제공한ㄷ.


    넘파이를 이용했을때 vs 넘파이를 이용하지 않았을 대

■ 2장. 퍼셉트론 (Perceptron) 

     머신러닝의 한 부류인 딥러닝(이미지를 기계가 직접 인식해서 학습) 
                         ↓
     퍼센트론 ---> 신경망

1943년에 미국의 신경외과 의사인 워렌 맥컬록에 의해 발다닝 되었고

1957년에 프랑크 로젠 블라트가 퍼센트론 알고리즘을 고안했다

사람의 뇌의 동자긍ㄹ 전기 스위치의 on/off로 흉내 낼 수 있다는 이론을 
증명하였다.

간단히 말하면 인간의 신경세포 한를 흉대는 냈는데

고등하굑 생물시간에 배운  3가지 용어 ?

  1. 자극(stinulus)
  2. 반응(response)
  3. 역치(threshold)

 "특정 자극이 있다면 그 자극이 어느 역치 이상이여야만 세포가 반응한다."

예 : 짜게 먹는 사람은 자기가 평소에 먹는 만큼 음식이 짜지 않으면 싱겁다고 느낀다.
    ( 역치 이하의 자극은 무시) 
 
      싱겁게 먹는 사람이 짜게 먹기 시작해서 오랜 시간이 지나면 
      예전에 먹던 싱거운 음식에 만족하지 못한다( 역치가 올라감)

1969년 : 퍼센터론은 단순 선형분류기에 불과하다
          왜냐면? xor분류도 못한다고 단정을 지음 

          인공지능의 침체기 (인공지능의 빙하기)

1970년 중반 : 중요한 논문이 하나 발표 : 역전파 알고리즘  (다층 퍼센트론) 

     당시의 컴퓨터 연산으로는 이 이론을 구현하기가 어려웠음 


1986년 : 은닉층을 갖는 다층 퍼센트론 + 오류 역전파 학습 알고리즘 구현 되기 시작함 

          ↓
     오늘날


































 

































































 



 

'딥러닝' 카테고리의 다른 글

딥러닝 5장 .  (0) 2017.07.26
딥러닝 4장. 신경망 학습  (0) 2017.07.26
딥러닝 3장. 신경망  (0) 2017.07.26
딥러닝 2장. 퍼셉트론  (0) 2017.07.26