본문 바로가기

Study/class note

딥러닝 / 넘파이

딥러닝 기술을 이용해서 현업에서 하고 있는 일들?

1. 인천공항 컨테이너 검색대에 물건을 올리면 위반되는 물품이 있는지 검사

2. 병원에서 x-ray 사진이나 ct 영상에서 질병여부 판별

3. 제조업 불량품 판별

4. 주가 예측하는 신경망

5. 외국어 번역하는 신경망

6. 인공지능 변호(법률책 -> 신경망 -> 판결)

7. 음악 작곡 신경망
8. 기타

 

ex. 건강보험 심사 평가원에서 딥러닝을 사용하는 시스템 전체 구조 

    리눅스    ------------ 신경망 ----------------------------------------------------- 홈페이지 
       ↓                          ↓                                                                         ↓
    몽고디비               텐써플로우로 신경망 구성 (질병 폐사진 vs 정상 폐사진)   신경망활용
  ( 폐사진을 숫자로 변환해서 csv 파일로 생성해서 저장)

 

ㅇ수업목차

1장 : python numpy, matplotlib

2장 : perceptron

3장 : 3층 신경망 생성

4장 : 신경망 학습

5장 : 오차역전파

6장 : 신경망의 성능을 높이는 방법들

7장 : 합성곱 신경망(CNN)

 

 

1장. 넘파이(numpy)

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

 

문제1. 아래의 행렬을 numpy로 만드시오.

import numpy as np

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

# 또는

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

 

문제2. 위의 a행렬의 각 요소에 숫자5를 더하시오

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

 

위의 기능이 바로 numpy의 유용한 기능 중 하나인 브로드캐스트(broadcast)입니다. 

 

넘파이에서는 형상이 다른 배열끼리도 계산을 할 수 있음

위의 그림처럼 2x2행렬과 숫자 10을 연산하기 위해서 숫자 10이 2x2 행렬로 확대된 후 연산이 이루어지는 것을 브로드 캐스트라고 함.

 

문제3. 위의 그림처럼 브로드 캐스트 기능을 numpy로 구현하시오.

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

 

 

문제4. 아래의 브로드 캐스트 기능을 numpy로 구현하시오.

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

 

 

문제5. 아래 행렬의 내적을 numpy로 구현하시오.

c = np.array([1,2]).reshape(1,2)
d = np.array([1,3,5,4,3,2]).reshape(2,3)

np.dot(c,d)  #array([[9, 9, 9]])

 

문제6. 위의 행렬 내적을 신경망으로 그려보시오.

 

문제7. 아래 그림의 신경망을 numpy로 구현하시오.

c = np.array([3,7]).reshape(1,2)
d = np.array([4,9,1,3,7,2]).reshape(2,3)

np.dot(c,d)  #array([[33, 76, 17]])

 

 

문제8. 아래 그림의 신경망을 numpy로 구현하시오.

c = np.array([2,7]).reshape(1,2)
d = np.array([2,3,8,9,1,7,1,3,4,9]).reshape(2,5)

np.dot(c,d)  #array([[53, 13, 37, 46, 65]])

# 아래의 방법으로 내적해도 가능
c @ d

 

문제9. 아래의 2층 신경망을 파이썬으로 구현하시오.

c = np.array([2,7]).reshape(1,2)
d = np.array([2,3,8,5,1,7]).reshape(2,3)
e = np.array([7,1,3,3,4,2,8,7,6]).reshape(3,3)

np.dot(np.dot(c,d),e)  #array([[832, 546, 533]])
# c @ d @ e

 

 

ㅇ넘파이의 N차원 배열(p38)

넘파이 1차원 배열(1줄로 늘어선 배열) 뿐만 아니라 다차원 배열도 작성할 수 있음.

x = np.array([[1,2,3,4,5],
             [2,4,3,2,4],
             [3,1,4,3,1],
             [2,7,3,4,5],
             [1,5,6,3,1]])
x.shape  #(5, 5)

 

넘파이 배열은 N차원 배열을 작성할 수 있습니다.

1차원 배열, 2차원 배열, 3차원 배열처럼 원하는 차수의 배열을 만들 수 있습니다.

수학에서는 1차원 배열을 벡터(vector)라고 하고 2차원 배열을 행렬(matrix)라고 하고, 벡터와 행렬을 일반화한 것이 텐서(tensor)라고 합니다.

 

tensor flow -----> 행렬이 계산되면서 흘러간다.

구글에서 만든 tensor flow는 다차원 배열의 연산(계산)을 빠르게 할 수 있게끔 구현이 되어져 있습니다.

 

반응형