now is better than never
[딥러닝] 3. 출력층 설계 본문
출력층 함수
- 신경망에서 순전파로 흘러왔던 확률들의 숫자를 취합해서 결론을 내는 함수
- 분류하고 싶은 가짓수 = 출력층 뉴런의 개수
- 소프트맥스 (Softmax) 함수
: 분류 - 항등 (Identity) 함수
: 회귀 (숫자 예측)
입력값을 받아서 그대로 출력
소프트맥스 (Softmax)
def softmax(x):
max_x = np.max(x)
minimize_x = x - max_x # 너무 큰 수는 제곱 안 돼서 작게 만듦
np_exp = np.exp(minimize_x)
return np_exp / sum(np_exp)
직접 모델 구현
import numpy as np
def sigmoid(x):
return 1 / (1 + np.exp(-x))
x = np.array([1, 2])
w1 = np.array([1, 3, 5, 2, 4, 6]).reshape(2, 3)
w2 = np.array([3, 4, 5, 6, 7, 8]).reshape(3, 2)
w3 = np.array([4, 3, 2, 1]).reshape(2, 2)
# 은닉 1층
y = x.dot(w1)
y_hat = sigmoid(y)
# 은닉 2층
z = y_hat.dot(w2)
z_hat = sigmoid(z)
# 출력층
k = z_hat.dot(w3)
k_hat = softmax(k)
k_hat
np.sum(k_hat) # 1.0
TensorFlow 로 퍼셉트론 구현
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
from tensorflow.keras.optimizers import SGD
from tensorflow.keras.losses import mse
tf.random.set_seed(777)
x = np.array([1, 2]).reshape(1, 2)
y = np.array([0, 1]).reshape(1, 2) # label
model = Sequential()
# 퍼셉트론
model.add(Dense(3, input_shape=(2,), activation='sigmoid')) # 은닉 1층
model.add(Dense(2, activation='sigmoid')) # 은닉 2층
model.add(Dense(2, activation='softmax')) # 출력층
model.compile(optimizer=SGD(), loss=mse, metrics=['acc'])
model.fit(x, y, epochs=10)
result = model.predict(x)
result
본 내용은 아이티윌 '빅데이터&머신러닝 전문가 양성 과정' 을 수강하며 작성한 내용입니다.
'머신러닝 & 딥러닝' 카테고리의 다른 글
[딥러닝] 5. 오차함수 (Error Function) (0) | 2023.05.01 |
---|---|
[딥러닝] 4. 이미지 분류 (MNIST) (1) | 2023.05.01 |
[딥러닝] 2. 활성화 함수 (0) | 2023.04.27 |
[딥러닝] 1. 퍼셉트론 (Perceptron) (0) | 2023.04.26 |
11. T 검정 (T Test), 기타 머신러닝 (1) | 2023.04.11 |