-
Neurons and Layers - Neuron with Sigmoid activation | Advanced Learning AlgorithmMachine Learning/Stanford ML Specialization 2024. 2. 3. 22:19
이번에는 sigmoid activation을 사용하는 뉴런(unit)을 사용해서 함수를 개발해보자. Course 1에서 사용했던 logistic regression과 동일하다.
$$ f_{\mathbf{w},b}(x^{(i)}) = g(\mathbf{w}x^{(i)} + b) $$
$$g(x) = sigmoid(x)$$
Dataset
먼저, 데이터를 준비해보자.
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 X_train[pos]
X_train변수에 0부터 5까지의 부동 소수점 숫자들을 저장했다. reshape(-1, 1)을 이용해서 이 배열을 2차원 행렬로 변환했다. 즉, 각 숫자는 별도의 행을 갖게된다. Y_train에는 0과 1의 값을 저장했다. 이또한 reshape을 이용해서 2차원 행렬로 변환했다. 이 값들은 레이블, 또는 target을 나타낸다. pos와 neg는 1인 위치를 찾아 pos에 저장하고, 0인 위치를 찾아 neg에 저장했다. 이는 두 그룹을 양성 음성으로 분류하는 데 사용된다. X_train[pos] 를 이용해서 pos에 해당하는, 즉 Y_train이 1인 X_train의 요소를 선택했다. 결과는 아래와 같았다. 큰 숫자 세개만이 pos에 속해있었다.
array([3., 4., 5.], dtype=float32)
이제 scatter를 사용해서 pos에 속한 1인 데이터들은 빨간 x로, neg에 속한 0인 데이터들은 파랑색 o로 보여지도록 세팅했다. 또한 ylim, ylabel, xlabel, title, legend의 폰트 사이즈 등을 설정한 후, plot을 화면에 표시했다.
fig,ax = plt.subplots(1,1,figsize=(4,3)) ax.scatter(X_train[pos], Y_train[pos], marker='x', s=80, c = 'red', label="y=1") ax.scatter(X_train[neg], Y_train[neg], marker='o', s=100, label="y=0", facecolors='none', edgecolors=dlc["dlblue"],lw=3) ax.set_ylim(-0.08,1.1) ax.set_ylabel('y', fontsize=12) ax.set_xlabel('x', fontsize=12) ax.set_title('one variable plot') ax.legend(fontsize=12) plt.show()
음성/양성의 데이터가 시각적으로 잘 표현되었다. Logistic Neuron
Sigmoid 활성화를 추가함으로써 Logistic 뉴런을 구현할 수 있다. 로지스틱 레이어가 포함된 TensorFlow Model을 생성해보자. TensorFlow는 주로 다층 모델을 만드는 데 사용된다. Sequential 모델은 이런 모델을 구축하는데 편리하고 직관적인 방법을 제공한다.
model = Sequential( [ tf.keras.layers.Dense(1, input_dim=1, activation = 'sigmoid', name='L1') ] )
Sequential 모델을 만들었다. 이 모델은 단일 층('Dense')를 포함하고 있고, 이 층은 Logistic Regression 뉴런을 구현하는데 사용된다. Dense는 레이어를 뜻하고, 1은 레이어의 출력 유닛 수, 즉 뉴런의 갯수를 의미하고, input_dim은 인풋의 입력 차원을 의미한다. 즉, 모델이 하나의 특성(size)을 입력으로 받는다는 것을 의미한다. activation은 sigmoid로 설정해서, 시그모이드 활성화 함수가 출력을 0과 1사이의 값으로 제한함으로써, 클래스 확률을 모델링할 수 있도록 해주었다. 이 단일 레이어의 이름은 L1이라고 해주었다. 이 모델의 정보를 깔끔하게 summary함수를 이용해 볼 수 있다.
model.summary() Model: "sequential" _________________________________________________________________ Layer (type) Output Shape Param # ================================================================= L1 (Dense) (None, 1) 2 ================================================================= Total params: 2 Trainable params: 2 Non-trainable params: 0 _________________________________________________________________
이제, L1레이어의 가중치(weight)와 편향값(bias)를 확인해보자.
logistic_layer = model.get_layer('L1') w,b = logistic_layer.get_weights() print(w,b) print(w.shape,b.shape)
모델에서 L1이라는 레이어를 가져오고, 그 레이어의 weights값을 불러와 print 해주었다. 아웃풋을 살펴보면, w는 0.55, 그리고 b는 0으로 설정되었고, w는 1x1 매트릭스, b는 값이 1개 들어있는 리스트이다.
[[0.55]] [0.]
(1, 1) (1,)자, 이제 우리가 알고 있는 weight과 bias값으로 설정해보자.
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())
w값을 2를 포함한 1x1 매트릭스로, b를 -4.5값을 가진 어레이로 생성해서 해당 값들을 weights로 세팅해주었다. 이제 세팅된 weight을 확인해보자.
[array([[2.]], dtype=float32), array([-4.5], dtype=float32)]
성공적으로 새로운 값들로 설정되었다. 이제 계산을 한것과 모델의 예측값을 비교해보자.
a1 = model.predict(X_train[0].reshape(1,1)) print(a1) alog = sigmoidnp(np.dot(set_w,X_train[0].reshape(1,1)) + set_b) print(alog)
먼저, 모델을 이용해서 첫번째 값을 이용해 reshape한 후, 예측을 해봤고, sigmoid함수를 이용해서 dot product 후 b를 더한 값을 인풋으로 계산했을 때, 두 방법 모두 같은 값을 호출했다.
[[0.01]] [[0.01]]
둘 모두 0.01, 즉 y가 0일것이라고 예측했다. 그러면 이번에는 plot을 해서 Tensorflow Model과 NumpyModel을 비교해보자.
역시나 동일했다.
Reference
Advanced Learning Algorithms
In the second course of the Machine Learning Specialization, you will: • Build and train a neural network with TensorFlow to perform multi-class ... 무료로 등록하십시오.
www.coursera.org
'Machine Learning > Stanford ML Specialization' 카테고리의 다른 글
Data in TensorFlow | Advanced Learning Algorithm (1) 2024.02.09 Inference in Code | Advanced Learning Algorithm (1) 2024.02.09 Neurons and Layers - Neuron without activation - Regression/Linear Model | Advanced Learning Algorithm (1) 2024.02.03 Inference: making predictions | Advanced Learning Algorithm (0) 2024.02.03 More Complex Neural Networks | Advanced Learning Algorithm (1) 2024.01.27