coursera 강의를 정리해서 스스로 이해를 돕기 위해 만든 자료입니다.
추가된 점
-
앞단에 Conv1D를 추가하고 그 뒤로 LSTM과 DNN을 쌓는 구조로 최상의 성능 산출했다. 실제 데이터인 흑점데이터를 로드하고 전처리하는 작업이 추가된다.
-
Conv1D가 추가되다 보니 이전에 Lambda layer로 마지막 차원에 1을 추가해준 것을 빼고, 이걸 데이터 전처리 코드 (windowed_dataset)에 추가해준다. 그결과 Conv1D의 input_shape는 [None, 1]로 고정시켜줄 수 있다.
오류 투성이
-
mae가 30 epoch내에 2보다 작아야 한다고 했다. 한참동안 해서 안돼서 정답을 봤는데, 2보다 작게 돌아간다... 네트워크 구조를 같게해도 내 notebook에선 2보다 작아지지 않는데 어떻게 된걸까?
-
코드를 비교해본 결과, 정답 코드엔 다음과 같은 오류가 있었다.
윈도우 사이즈 만큼 예측값을 출력하다니... 윈도우 사이즈를 입력으로 넣으면, 마지막 값 하나만을 출력하도록 강의에선 설명했다.
아래와 같이 바꿔쭈면 같은 network로는 mae가 0.2까지 떨어지지 않는다.
단, engineering이라쓰고 노가다로 읽는 튜닝과정을 통해 0.2보다 떨어지는 하이퍼 파라미터러를 찾아냈다.
또 답에서 이상한게, daily data의 그래프값의 범위는 0~25 정도이다. 그런데 네트워크 마지막 Lambda layer에선 400.0을 곱해준다... 이것도 오류다. 25.0을 곱해주는 게 맞다.
단, 위 네트워크를 쓸 경우, 중간에 LSTM에서 return_sequences=False로 돼있으므로, output_shape가 3차원이 아닌 2차원으로 [None, 1]의 형태를 띄게 된다. 따라서 아래 부분 코드를 수정해야한다는 취약점이 있다.
마무리
time series 1,2,3,4주차는 사실 6시간 정도?... 정리하는 데 시간도 걸린 걸 감안하면 time series는 생각보다 어렵지 않았다.