1. 활성화 함수만 변경하며 실험한 이유

근로를 하면서 수집한 PPG 데이터 28개로 학습할 때는 모델의 정확도가 0.9 정도 나왔다. 그러나 내가 100회 수집한 PPG 데이터를 적용하니 정확도가 0.8 정도로 떨어졌다. 물론 학습에 사용되는 데이터의 양이 커져서 그런걸 수도 있지만, 호기심에 relu-relu-sigmoid와 sigmoid-sigmoid-sigmoid를 비교해보기로 했다.

sigmoid 함수는 오차역전파를 할때 sigmoid 함수를 미분하면 0에 수렴하기 때문에, 당연하게도 sigmoid만으로 학습한 모델은 정확도가 떨어져야 정상이다. 그러나 결과는 그렇지 않았다. 오히려 정확도-오차 그래프도 relu-relu-sigmoid 모델보다 train data와 test data가 일치하는 모습을 보여줬다.

왜 그런지는 잘 모르겠다. 물론 데이터가 편향되었을 가능성, 데이터의 양이 부족해서 발생했을 가능성 등이 있지만.. 아쉽게도 PPG 신호를 측정하기 위해 사용했던 환자 감시 장치를 반납했기 때문에 실험을 진행할 수 없다.

A. 모델

a. Input Data

b. Output Data

c. Modeling

epoch = 200
batch_size = 5

model.add(tf.keras.layers.Dense(64, input_dim=144, activation='relu'))
model.add(tf.keras.layers.Dropout(0.4))
model.add(tf.keras.layers.Dense(64, activation='relu'))
model.add(tf.keras.layers.Dropout(0.4))
model.add(tf.keras.layers.Dense(16, activation='sigmoid'))
model.compile(loss='binary_crossentropy',
              optimizer='adam',
              metrics=['accuracy'])
history = model.fit(X_train, Y_train, epochs=epoch, batch_size=batch_size, validation_data=(X_test, Y_test))
Model: "sequential"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
dense (Dense)                (None, 64)                9280      
_________________________________________________________________
dropout (Dropout)            (None, 64)                0         
_________________________________________________________________
dense_1 (Dense)              (None, 64)                4160      
_________________________________________________________________
dropout_1 (Dropout)          (None, 64)                0         
_________________________________________________________________
dense_2 (Dense)              (None, 16)                1040      
=================================================================
Total params: 14,480
Trainable params: 14,480
Non-trainable params: 0
_________________________________________________________________

d. learning

5/2182 [..............................] - ETA: 0s - loss: 0.3980 - accuracy: 0.8250
 385/2182 [====>.........................] - ETA: 0s - loss: 0.3507 - accuracy: 0.8037
 770/2182 [=========>....................] - ETA: 0s - loss: 0.3473 - accuracy: 0.8092
1160/2182 [==============>...............] - ETA: 0s - loss: 0.3486 - accuracy: 0.8095
1545/2182 [====================>.........] - ETA: 0s - loss: 0.3506 - accuracy: 0.8080
1930/2182 [=========================>....] - ETA: 0s - loss: 0.3478 - accuracy: 0.8101
2182/2182 [==============================] - 0s 175us/sample - loss: 0.3492 - accuracy: 0.8093 - val_loss: 0.3591 - val_accuracy: 0.8103
Epoch 199/200

   5/2182 [..............................] - ETA: 0s - loss: 0.2122 - accuracy: 0.9000
 395/2182 [====>.........................] - ETA: 0s - loss: 0.3446 - accuracy: 0.8149
 785/2182 [=========>....................] - ETA: 0s - loss: 0.3425 - accuracy: 0.8154
1175/2182 [===============>..............] - ETA: 0s - loss: 0.3458 - accuracy: 0.8139
1570/2182 [====================>.........] - ETA: 0s - loss: 0.3461 - accuracy: 0.8132
1955/2182 [=========================>....] - ETA: 0s - loss: 0.3465 - accuracy: 0.8127
2182/2182 [==============================] - 0s 173us/sample - loss: 0.3468 - accuracy: 0.8126 - val_loss: 0.3553 - val_accuracy: 0.8098

e. prediction to test Data