1. 오늘의 정리

1) 배우기 전 복습하면 좋을 부분들

  • Python
  • Numpy
  • matplotlib

2) 오늘 배운 내용

  • 단층 퍼셉트론(AND, NAND, OR)
  • 다층 퍼셉트론(XOR)
  • 계단 함수, 시그모이드 함수, ReLU 함수
  • 다차원 배열의 계산
  • 3층 신경망 구성하기
  • 손글씨 숫자(MNIST)

2. 이해하기 어려웠던 부분

1) 넘파이 복습

자세한 복습

  • 차원수 확인 np.ndim(A)
  • 형상 확인 A.shape
  • 행렬의 곱 np.dot(A,B)
  • 형상 바꾸기
    • A.reshape(행,열) # 비파괴적
    • A.resize(행,열) # 파괴적
  • 전치 A.T
  • 추가
  • axis=0 이면 행으로 추가, axis=1 이면 열로 추가
    • np.append(A, B, axis=0) or np.vstack((A,B))
    • np.append(A, B, axis=0) or np.hstack((A,B))
    • np.tile(A, [2,3]) 행으로 2를 열로 3을 곱한 나열
    • np.expand_dims(A, axis=N) 차원 늘리기

3. 기억해야할 부분

1) 구별하여,

A) 다층 퍼셉트론(XOR)

x1x2s1s2y
00100
10111
01111
11010
  • x1, x2를 넣었을 때 y로 XOR 값이 나오려면 어떻게 해야할까?
# NAND와 OR를 각각 거친 s1, s2를 AND 해준다. 
def XOR(x1, x2):
    s1 = NAND(x1,x2)
    s2 = OR(x1,x2)
    return AND(s1, s2)

2) 활성화 함수

  • 계단 함수, 시그모이드 함수, ReLU 함수
# 계단 함수
def step_function(x):
    return np.array(x>0, dtype=np.int32)
    
# 시그모이드 함수
def sigmoid(x):
    return 1 / (1+ np.exp(-x))

# ReLU 함수
def relu(x):
    return np.maximum(0,x)

2) 잘 쓸 거 같아,

A) 3층 신경망 구성하기

def identy_function(x):
    return x

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): # predict

    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 = identy_function(A3) 
    
    return Y
network = init_network()
X = np.array([1.0, 0.5])
Y = forward(network, X)
print(Y)

A_1) 소프트맥스 함수

def softmax(a):
    c = np.max(a)
    exp_a = np.exp(a - c)
    sum_exp_a = np.sum(exp_a)
    y = exp_a / sum_exp_a
    
    return y
profile
Learning&Running

0개의 댓글