일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Spring
- java
- Web
- data
- framework
- git
- 인공지능
- Deep
- Github
- db
- centos
- Python
- ai
- javascript
- 자바
- mysql
- Analysis
- error
- Security
- interface
- mariaDB
- 함수
- LIST
- SSH
- Linux
- DeepLearning
- Numpy
- Pattern
- learning
- Server
- Today
- Total
PostIT
[AI/Deep Learing] Deep Learning 준비하기 - 순방향 3층 신경망 구현 - 4 본문
# [AI/Deep Learing] Deep Learning 준비하기 - 순방향 3층 신경망 구현 - 4
# 이번 절의 핵심은 신경망에서의 계산을 행렬계산으로 정리할 수 있다는 것입니다.
import numpy as np
# 입력층 ==> 1층
# x 입력 값, b1 편향(활성화 함수), w 가중치(12)
x = np.array([1.0, 0.5])
w1 = np.array([[0.1, 0.3, 0.5], [0.2, 0.4, 0.6]])
b1 = np.array([0.1, 0.2, 0.3])
print(w1.shape)
print(x.shape)
print(b1.shape)
(2, 3)
(2,)
(3,)
a1 = np.dot(x, w1) + b1
# 시그모이드 함수 구현하기
def sigmoid(x):
return 1 / (1 + np.exp(-x))
z1 = sigmoid(a1)
print(a1)
print(z1)
[ 0.3 0.7 1.1]
[ 0.57444252 0.66818777 0.75026011]
# 1층 ==> 2층
# b2 편향(활성화 함수), w 가중치(23)
w2 = np.array([[0.1, 0.4],[0.2, 0.5],[0.3, 0.6]])
b2 = np.array([0.1, 0.2])
print(z1.shape)
print(w2.shape)
print(b2.shape)
(3,)
(3, 2)
(2,)
a2 = np.dot(z1, w2) + b2
z2 = sigmoid(a2)
# 2층 ==> 3층
# b3 편향(활성화 함수), w3 가중치(23)
def identity_function(x):
return x
w3 = np.array([[0.1, 0.3], [0.2, 0.4]])
b3 = np.array([[0.1], [0.2]])
a3 = np.dot(z2, w3) + b3
y = identity_function(a3)
print(y)
[[ 0.31682708 0.59627909]
[ 0.41682708 0.69627909]]
# 3층 신경망 정리
def init_network():
network = {}
network['W1'] = np.array([[0.1,0.3,0.5], [0.2,0.4,0.6]])
network['b1'] = np.array([0.1,0.2,0.3])
network['W2'] = np.array([[0.1,0.4], [0.2, 0.5], [0.3, 0.6]])
network['b2'] = np.array([0.1, 0.2])
network['W3'] = np.array([[0.1,0.3], [0.2,0.4]])
network['b3'] = np.array([0.1,0.2])
return network
def forward(network, x):
W1,W2,W3 = network['W1'], network['W2'], network['W3']
b1,b2,b3 = network['b1'], network['b2'], network['b3']
a1 = np.dot(x, W1) + b1
z1 = sigmoid(a1)
a2 = np.dot(z1, W2) + b2
z2 = sigmoid(a2)
a3 = np.dot(z2, W3) + b3
y = identity_function(a3)
return y
network = init_network()
x = np.array([1.0, 0.5])
y = forward(network, x)
print(y)
[ 0.31682708 0.69627909]
# 1. init_network 함수는 가중치와 편향을 초기화하고 딕셔너리 network에 저장
# 2. network에는 각 층에 필요한 매개변수를 저장
# 3. forward 함수는 입력 신호를 출력으로 변환하는 처리과정을 구현(순반향) - 역방향은(backward)
'Deep Learning' 카테고리의 다른 글
[AI/Deep Learing] Deep Learning 준비하기 - MNIST Load Data - 5-1 (0) | 2017.06.23 |
---|---|
[AI/Deep Learing] Deep Learning 준비하기 - MNIST DataSet - 5 (0) | 2017.06.23 |
[AI/Deep Learing] 인공지능을 위한 Deep Learning 준비(다차원 배열의 계산) - 3 (0) | 2017.05.31 |
[AI/Deep Learing] 인공지능을 위한 Deep Learning 준비(시그모이드 & ReLU 함수 구현하기) - 2 (0) | 2017.05.31 |
[AI/Deep Learing] 인공지능을 위한 Deep Learning 맛 보기 공부(Perceptron과 신경망) - 1 (0) | 2017.05.24 |