[Tutorial] LSTMs for Human Activity Recognition Time Series Classification

wonnie1224·2023년 1월 8일
0

ML / DL

목록 보기
4/11

0. 튜토리얼 소개

원래의 고전적인 접근 방식에선 강력한 전문 지식이 요구됐었음
최근에는 LSTM과 같은 순환 신경망등의 딥러닝 메소드 / 1차원 convolutional 신경망 / CNN을 사용하는 것 같은 변화들이 좋은 결과를 제공하는 것으로 나타남

🌿 튜토리얼의 학습 목표
이 튜토리얼을 통해 활동 인식 시계열 분류 문제를 모델링하기 위한 3가지 순환 신경망 아키텍처 학습 가능함

  • 인간 활동 인식을 위한 장단기 기억 순환 신경망을 개발하는 방법.
  • 1차원 Convolutional Neural Network LSTM (CNN-LSTM) 모델을 개발하는 방법.
  • 동일한 문제에 대한 1차원 Convolutional LSTM (ConvLSTM) 모델을 개발하는 방법.

🌿 튜토리얼의 목차
1. 스마트폰 데이터 세트를 사용한 활동 인식
2. LSTM 네트워크 모델 개발
3. CNN-LSTM 네트워크 모델 개발
4. ConvLSTM 네트워크 모델 개발

1. 스마트폰 데이터 세트를 사용한 활동 인식

  • 아래와 같은 6가지 동작 수행함
    ① Walking
    ② Walking Upstairs
    ③ Walking Downstairs
    ④ Sitting
    ⑤ Standing
    ⑥ Laying

  • 스마트폰으로부터 움직임 데이터로 x, y, z 가속도계 데이터(선가속도)와 자이로스코프 데이터(각속도)를 기록함

  • 관측치는 50Hz(= 1초당 50개 데이터 포인트)로 기록함

  • 각 피실험자는 위의 동작들을 2번씩 수행함(한 번은 왼쪽에 장치를, 한 번은 오른쪽에 장치를 사용함)

  • raw 데이터 사용 불가능 => 획득한 데이터 전처리 필요함!

💡 데이터 전처리 과정

=> 각 윈도우에서 인간 활동 인식 분야에서 일반적으로 사용되는 다수의 시간 및 빈도 특징을 추출
그 결과 561개의 요소 벡터 형상 나왔음

  • 데이터셋은 훈련 데이터(70%) + 시험 데이터 (30%)로 분할함

2. LSTM 네트워크 모델 개발

1) Load Data
2) Fit and Evaluate Model
3) Summarize Results
4) Complete Example

2.1. Load Data

원시 데이터에는 총 가속도, 본체 가속도 및 본체 자이로스코프의 세 가지 주요 신호 유형이 있음
각각에는 3개의 데이터 축이 있음. 이는 각 시간 단계에 대해 총 9개의 변수가 있음을 의미합니다.

2.2. Fit and Evaluate Model

evaluate_model()라는 함수 정의
① train & test 데이터셋을 불러와서
② train dataset에 model을 피팅한 후,
③ test dataset으로 model 성능 평가하고, 모델의 성능에 대한 추정치를 반환하는 함수

먼저, Keras 딥 러닝 라이브러리를 사용하여 LSTM 모델을 정의함

📌 모델의 input

3차원 행렬 : [samples, time steps, features]

  • samples : 1개의 샘플 = 시계열 데이터의 한 window
  • time steps : 각 window에는 128개의 타임 스텝이 있음
  • features : 각 타임 스텝에는 9개의 변수 있음

📌 모델의 output

6개의 동작 유형(Walking / Walking Upstairs / Walking Downstairs / Sitting / Standing / Laying) 각각에 속하는 특정 window의 확률값이 담긴 6개의 요소 가진 벡터

n_timesteps, n_features, n_outputs = trainX.shape[1], trainX.shape[2], trainy.shape[1]

🌿 model 설정

model = Sequential()
model.add(LSTM(100, input_shape=(n_timesteps,n_features)))
model.add(Dropout(0.5))
model.add(Dense(100, activation='relu'))
model.add(Dense(n_outputs, activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])

🌿 model의 특징

  • 모델을 단일 LSTM 은닉층을 갖는 것으로 정의
  • 훈련 데이터에 대한 모델의 과적합을 줄이기 위한 드롭아웃 계층 추가
  • 최종 ouput layer이 예측에 사용되기 전에 LSTM 은닉 계층에 의해 추출된 변수들을 해석하기 위해 fully connected layer 사용

model compile 시에,

  • 다중 클래스 분류 문제를 학습이 목적이므로 loss='categorical_crossentropy'사용
  • optimizer='adam'

1번의 평가로 모델의 성능 판단 불가능함
- 그 이유는 신경망이 확률적이기 때문
- 즉, 동일한 데이터에서 동일한 모델 구성을 훈련할 때 다른 특정 모델이 발생한다는 것을 의미
=> 모델 평가를 여러 번 반복한 다음 각 런에 걸쳐 모델의 성능을 요약함
ex) evaluate_model()을 총 10번 호출하면 요약해야 하는 모델 평가 점수 모집단이 생성됨

profile
안녕하세요😊 인공지능을 공부하고 있는 대학생입니다 🙌

0개의 댓글