PostIT

[AI/Deep Learing] Deep Learning 준비하기 - 순방향 3층 신경망 구현 - 4 본문

Deep Learning

[AI/Deep Learing] Deep Learning 준비하기 - 순방향 3층 신경망 구현 - 4

shun10114 2017. 6. 23. 15:51

# [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)



Comments