#1. Neural network
Demand Prediction
예시 : 어떤 티셔츠가 top seller 티셔츠가 될 것인가 ?
→ input : x = price , shipping cost, marketing, material ...
→ output : y = yes or no (binary:sigmoid)
→ activation : f(x) = 1 / 1+np.exp(-(wx+b))
Neural network에서 이를 사용하게 될 경우
→ input layer : vector x [price,shipping cost, marketing, material] and vector y [1,1,0,1,...n]
→ layer1(hidden layer) : input layer와 fully connected 되어 있는 뉴런그룹 (가중치를 개별로 주겠지)
→ activations depending on each neurons : affordability, awareness, perceived quality 등등
→ output layer : 직전 activations를 input으로 받아 결과를 도출하는 뉴런그룹
→ activation: probability of being top seller (yes or no)
🧐 Neural network architecture를 어떻게 구성하느냐 (with multiple hidden layers)가 성능에 영향 미침
Neural network layer
한개의 Hidden layer에서 어떤 일이 일어나고 있나요?
- layer 1은 [1]로 표기
- 각 뉴런마다 w*x + b 수행
- 해당 결과값을 a 벡터에 넣어서 다음 레이어로 전달
그 다음 Output layer에서 일어나는 일
- input 값으로 받은 a 벡터 = x처럼 사용하여 동일하게 작업
- 여기에선 뉴런이 1개이므로 해당 도출값은 scalar로 나옴
- 해당 스칼라 또한 activation 값으로 전달
- 그 이후 해당 activation 값에 따라 .5 threshold를 기준으로 1, 0 을 결정
More Complex neural networks
- hidden layer가 여러개일때, 직전 Layer로부터 도출된 activation 값들의 배열인 a vector를 받아 x 처럼 사용하게 됨
- l : 레이어 번호
- j : 해당 레이어의 뉴런(유닛) 번호
- g : activation function
- x 벡터 : a벡터[0] 라고도 표현
- f(x) : 맨 마지막 output layer에서 나오는 activation을 이로 일컫기로 함
Inference: making predictions (forward propagation)
- forward : 순차적으로 레이어 순서에 따라 계산
- 보통 레이어에 있는 뉴런(유닛) 숫자는 순차적으로 줄어들게 구성
#사용하는 패키지: 수업위해 추가된 패키지도 있음
import numpy as np
import matplotlib.pyplot as plt
import tensorflow as tf
from tensorflow.keras.layers import Dense, Input
from tensorflow.keras import Sequential
from tensorflow.keras.losses import MeanSquaredError, BinaryCrossentropy
from tensorflow.keras.activations import sigmoid
from lab_utils_common import dlc
from lab_neurons_utils import plt_prob_1d, sigmoidnp, plt_linear, plt_logistic
plt.style.use('./deeplearning.mplstyle')
import logging
logging.getLogger("tensorflow").setLevel(logging.ERROR)
tf.autograph.set_verbosity(0)
#Neuron with Sigmoid activation
#1.data
X_train = np.array([0., 1, 2, 3, 4, 5], dtype=np.float32).reshape(-1,1) # 2-D Matrix
Y_train = np.array([0, 0, 0, 1, 1, 1], dtype=np.float32).reshape(-1,1) # 2-D Matrix
pos = Y_train == 1
neg = Y_train == 0
#2. modeling - logistic
model = Sequential(
[
tf.keras.layers.Dense(1, input_dim=1, activation = 'sigmoid', name='L1')
]
)
logistic_layer = model.get_layer('L1')
w,b = logistic_layer.get_weights()
print(w,b)
print(w.shape,b.shape)
#result : [[-1.41]],[0.] (1,1)(1,)
set_w = np.array([[2]])
set_b = np.array([-4.5])
# set_weights takes a list of numpy arrays
logistic_layer.set_weights([set_w, set_b])
print(logistic_layer.get_weights())
#result : [array([[2.]], dtype=float32), array([-4.5], dtype=float32)]
a1 = model.predict(X_train[0].reshape(1,1))
#result : [[0.01]] . final activation value 가 이렇게 나오는 것