일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
- Dense_Rank
- 여러 데이터 검색
- 단순회귀 분석
- 순위출력
- merge
- 회귀분석 알고리즘
- count
- 불순도제거
- 정보획득량
- 팀스파르타
- Sum
- loop 문
- sql
- 그래프 생성 문법
- 데이터분석가
- 막대그래프
- 데이터분석
- sqld
- 회귀분석
- max
- %in%
- 상관관계
- 빅데이터분석
- if문 작성법
- 빅데이터
- difftime
- 그래프시각화
- Intersect
- 총과 카드만들기
- 히스토그램 그리기
- Today
- Total
ch0nny_log
[빅데이터분석] 딥러닝_4. 다차원 배열의 계산 / 행렬의 내적 본문
■ 다차원 배열의 계산
다차원 배열
신경망에 들어가는 데이터는 다차원 배열입니다.
다차원 배열이 신경망에 들어가서 행렬 계산을 하기 떄문에 다차원배열에 대한 이해가 있어야됩니다.
사진, 동영상, chat-gpt 질문 모두 다차원 배열입니다.
예제1. 사진이 다차원 배열이라는 예
28*29 의 784개의 픽셀로 되어있는 필기체 8의 이미지 데이터
하나의 픽셀이 0~255사이의 숫자로 되어있음(255에 가까울 수록 밝은색임)
예제2.
1. 1차원 배열을 생성하시오
import numpy as np a = np.array([1, 2, 3, 4]) print(np.ndim(a)) # 1차원
2. 2차원 배열을 생성하시오import numpy as np b = np.array([[1, 2], [3, 4],[5, 6]]) print(np.ndim(b)) # 2차원 print(b.shape) # (3,2) 3행 2열
3. 3차원 배열을 생성하시오import numpy as np c = np.array([[[1, 2], [3, 4]],[[5, 6],[7, 8]]]) print(np.ndim(c)) # 3차원 print(c.shape) # (2,2,2)
4. 강사님 사진을 숫자로 변환하고 몇차원 배열인지 확인하시오.
# 1. 필요한 모듈 설치
pip install opencv-contrib-python
# 2. 사진 불러오고 차원 배열 확인import cv2 # 이미지만 전문적으로 다루는 파이썬 모듈 import numpy as np img_path= 'c:\\data\\yeonsu.png' img = cv2.imread(img_path) #사진을 숫자로 변환 print(img.shape) print(np.ndim(img)) print(img)
# 3. 시각화 하기
import matplotlib.pyplot as plt plt.imshow(img)
아이티윌 유연수 강사님
■ 행렬의 내적(행렬곱)
신경망에 입력되는 사진이 4차원 배열이고 신경망에 세팅한 가중치도 4차원 배열입니다. 수지 사진 배열과 가중치 배열이 서로 행렬곱을 해야하는데 이렇게 행렬곱을 하는 이유는 수지사진의 특징을 이해하기 위해서 입니다.
예제1. 위 식의 행렬곱을 파이썬으로 구현하시오
import numpy as np a = np.array([ 1, 2, 3, 4 ] ).reshape(2,2) b = np.array([ 5, 6, 7, 8 ] ).reshape(2,2) print( np.dot(a,b) )
문제1. 아래의 행렬 내적을 파이썬으로 구현하시오.
import numpy as np a = np.array([2, 3, 5, 1, 7, 3]).reshape(3, 2) b = np.array([2, 6, 1, 3, 5, 3, 9, 1]).reshape(2, 4) print(np.dot(a, b))
문제2. 아래의 행렬곱을 파이썬으로 구현하시오.import numpy as np x = np.array([1,2]).reshape(1, 2) w = np.array([1,3,5,2,4,6]).reshape(2, 3) print(np.dot(x, w))
문제3. 위에서 출력된 y 값을 relu 함수에 통과 시키시오 !
import numpy as np x = np.array([ 1, 2 ] ).reshape(1,2) # 수지 사진 행렬 w =np.array([ 1, 3, 5, 2, 4, 6 ] ).reshape(2, 3) # 가중치 행렬 y = np.dot(x,w) # 행렬 내적 def relu(x): return np.maximum(0, x) y_hat = relu(y) print(y_hat) # [[ 5 11 17]]
✨면접질문) 신경망에서 행렬내적을 하는 이유가 무엇입니까?
답변) 신경망에 입력되는 데이터(이미지,소리,동영상,텍스트) 의 특징을 이해하기 위한 가중치를 만들기 위해서 입니다.
■ 3층 신경망 구현하기
#1. 입력층 구현(0층)
import numpy as np
x = np.array([ 1, 2 ])
#2. 은닉층(1층)
w1 = np.array([ 1, 3, 5, 2, 4, 6 ]).reshape(2,3)
y = np.dot(x, w1)
y # [ 5, 11, 17]
#3. y 값을 sigmoid 함수에 통과 시킵니다.
def sigmoid(x):
return 1 / ( 1 + np.exp(-x) )
y_hat = sigmoid(y)
print(y_hat)
#4. 은닉층(2층)
w2 = np.array([ 3, 4, 5, 6, 7, 8 ]).reshape(3,2)
z = np.dot( y_hat, w2 )
print(z) # [14.97983765 17.97312806]
#5. z 값을 시그모이드 함수에 통과 시키기
z_hat = sigmoid(z)
print(z_hat)
#6. 출력층 설계하기
■ 3층 신경망 설계하기
출력층의 함수는 그동안 신경망에서 순전파로 흘러왔던 확률들의 숫자를 취합해서 결론을 내주는 함수입니다.
만약에 신경망을 통해서 분류하고 싶은 사진의 종류가 2가지만 출력층의 뉴런의 갯수는 2개여야하고, 사진의 종류가 3가지면 출력층의 뉴런의 갯수는 3개여야 합니다.
3개의 이미지를 분류하는 신경망이면 출력층의 뉴런 개수는 3개가 되고 출력되는 확률 숫자는 다음과 같은 형태로 출력됩니다.
[ 0.4 , 0.5, 0.1 ]
↓ ↓ ↓
개 고양이 고라니
※ 출력층의 함수의 종류가 2가지가 있습니다. 신경망으로 우리가 구현하고자 하는게 뭐냐에 따라서 달다집니다.
1. 정상품과 불량품을 분류하는 신경망 (분류) ? 소프트 맥스 (softmax) 함수
2. 주가예측과 같은 숫자를 예측 ? 항등함수(identity) 함수
예제1. 항등함수를 생성하시오.
def identify_func(x): return x
문제1. 앞에서 만들었던 3층 신경망 끝에 출력층에 항등함수를 넣고 값을 출력하시오
#1. 입력층 구현(0층) import numpy as np x = np.array([ 1, 2 ]) #2. 은닉층(1층) w1 = np.array([ 1, 3, 5, 2, 4, 6 ]).reshape(2,3) y = np.dot(x, w1) y # [ 5, 11, 17] #3. y 값을 sigmoid 함수에 통과 시킵니다. def sigmoid(x): return 1 / ( 1 + np.exp(-x) ) y_hat = sigmoid(y) print(y_hat) #4. 은닉층(2층) w2 = np.array([ 3, 4, 5, 6, 7, 8 ]).reshape(3,2) z = np.dot( y_hat, w2 ) print(z) #5. z 값을 시그모이드 함수에 통과 시키기 z_hat = sigmoid(z) print(z_hat) #6. 출력층 구현(항등함수로 구현) def identity_func(x): return x print( identity_func(z_hat) )
항등함수는 분류하는 신경망에 쓰는게 아니라 수치를 예측하는 신경망에 쓰는 함수입니다.