안녕하세요
27년차 진로탐색꾼 조녁입니다!
오늘은 텐서플로우 자격증 과정 네번째 강좌인
'Sequences, Time Series and Prediction '
2주차 강의(Deep Neural Networks for Time Series) 및 자료를 공부했습니다.
첫번째 영상, A conversation with Andrew Ng
지난 주에 시계열(time series)을 통계 분석(statistical analysis)해봤다.
이번 주는 시계열 시퀀스를 신경망에 대입시켜볼 것이다. 가장 기본적은 DNN으로 시작할 것이다.
두번째 영상, Preparing features and labels
window_size =30 일 때, 30개의 features(=Input X)를 기반으로 31번째 오는 레이블 값(Label Y)을 예측할 것이다.
window size = 5 , shift =1 로 출력하면
좌측 값처럼 출력이 된다.
첫 줄을 예로 들면, 0~4 의 값을 통해 5를 예측하는 것이다.
밑에 4줄에 5개의 숫자가 없는 이유는 그 이후 숫자가 존재하지 않기 때문이다.
이 때, dataset.window 에 drop_remainder = True 파라미터를 추가해주면 좌측에 하단 4줄은 출력해주지 않는다.
이후론 넘파이 형태로 출력해줄 것인데, 매우 쉽다. 아래와 같이 출력해주면 된다.
넘파이 배열형태에서 아래 코드의 4번째 줄로 라벨링을 해준다.
-> 5번째 줄 코드를 통해 섞어준다.
-> 6번째 줄 코드를 통해 x,y에 각각 두가지씩 배치해준다. 여기서 prefetch는 뭘 의미할까?
세번째 영상, Preparing features and labels 2
두번째 영상에서 다룬 코드들을 리뷰함. 노트북은 아래 깃허브 링크를 참조하시오.
네번째 읽기자료, Preparing features and labels notebook
gist.github.com/jonhyuk0922/82a2c5fbd09a827865f802be7b085581#file-s-p-week-2-lesson-1-ipynb-ipynb
다섯번째 읽기자료, Sequence bias
시퀀스를 학습시킬때, 순서의 영향을 받지 않기위해 섞는 것이 좋다.
예를 들어, 내가 좋아하는 티비 드라마를 시즈프스, 괴물, 펜트하우스2 라고 했을 때, 첫번째 온 시즈프스가 가장 익숙해질 수 있다.
그러므로 순서편향을 피하기 위해 섞어 주는 것이 좋다.
여섯번째 영상, Feeding windowed dataset into neural network
이제 DNN에 windowed data를 feeding 시키기 위한 함수를 정의한다.
여기서 shuffle_buffer는 데이터셋이 클 때 사용할 수 있다.
예를 들어, 10만개의 데이터가 있을 때 1000개만 shuffle_buffer로 가져와서 사용할 수 있다.
일곱번째 영상, Single layer neural network
우선, 데이터를 학습/검증 데이터로 나눠준다.
그 다음, 윈도우 사이즈, 배치 사이즈, 셔플 버퍼 사이즈를 정해준다.
그리고 우리가 사용할 데이터셋을 만들어준다.
우리는 선형 회귀(linear regression)을 사용할 것이므로 1층짜리 모델을 만든다.
이때 L0에 모델을 할당하는 이유는, 후에 가중치를 인쇄하고 싶을 때 용이하기 떄문이다.
모델을 구축했다면, 모델을 컴파일할것이다. 손실함수는 'mse'로 하고 옵티마이저는 SGD로 할것이다.
* momentum: 0보다 크거나 같은 float 값. SGD를 적절한 방향으로 가속화하며, 흔들림(진동)을 줄여주는 매개변수입니다.
그다음 가중치(weights)를 프린트해줄건데, 마지막에 한개값만 따로 출력되는 것이 레이블이다.
여덟번째 영상, Machine learning on time windows
아래 시계열에서, x축이 시간이므로 현재 시점을 기준으로 20단계 전으로부터 오는 x0,x1 ...x19 값은 t0,t1, ... t19에 해당된다.
이와 유사하게 현재 시간 값을 y로 간주한다.
아홉번째 영상, Prediction
우리가 예측하고자 하는 값은, 아래와 같이 구해진다.
여기서 np.newaxis는 차원을 한개 높여주는 것을 의미한다.
* 1D 는 2D가 되고 2D는 3D가 되고 3D는 4D ..
위 그림8 코드로 예측했을 때, mae 는 약 4.95로 나쁘진 않다.
열번째 영상, More on single layer neural network
위에서 설명했고 , 아래 주어질 노트북의 코드 리뷰를 했다.
mae가 노트북마다 다를 수 있는데, 이것은 노이즈가 변경되기 떄문이다.
열한번째 읽기자료, Single layer neural network notebook
gist.github.com/jonhyuk0922/e930ec99765f24db6d30ecb2d4e8c8c0#file-s-p-week-2-lesson-2-ipynb-ipynb
열두번째 영상, Deep learning neural network training, tuning and prediction
이전에 선형회귀에서는 1층짜리 모델을 썼었는데, 이번엔 그림9와 같이 복수층의 DNN모델을 사용해봤다.
mae : 4.9833784로 나쁘진 않았다.
더 나은 모델을 구축하기 위해 callback을 사용할 것이다. 모델의 학습을 정의할 때 파라미터로 넣어줬기떄문에
모든 에폭마다 콜백을통해 학습률을 조절해줄 것이다.
위 그림10에서 살펴본 lr(학습률) 에 에폭을 100으로 설정하고 계산해보면 그림11과 같다.
또한 그림11을 plot해보면 그림12와같은 그래프를 확인할 수 있다. 여기서 스무스한 구간의 저점을 확인해주면 7e -6이다.
그림12에서 찾은 안정적인 구간 내 가장 작은 값을 lr으로해서 옵티마이저를 설정해준다. 에폭은 500으로 한다.
그림14는 손실에 대해서 시각화해주는 코드이며 그림15는 해당 코드를 시각화 한 차트이다.
여기서 처음 시작할 때 손실과 이후 값의 차이가 너무커서 제대로 보기 힘들다.
범위를 10에폭이후로 바꾼다면 다른 차트를 보여줄 것이다.
에폭을 10이후로 제한하는 코드
에폭을 10이후로 제한하자 특징을 볼 수 있었다.
500에폭까지 감소하는 걸로 보아 학습이 잘 되고 있다.
결과적으로 mae 는 4.4847784로 이전보다 감소한 것을 볼 수 있다.
열세번째 영상, Deep neural network
코드리뷰 , 아래 노트북 참조
열네번째 읽기자료, Deep neural network notebook
gist.github.com/jonhyuk0922/09d7f201e77b6ebd107ae971883f329c#file-s-p-week-2-lesson-3-ipynb-ipynb
퀴즈에서 배운점
: 학습된 파라미터를 검사해보고 싶다면, 레이어에 변수를 할당하고 해당 변수를 사용하여 모델에 추가합니다. 훈련 후 속성 검사
2주차 마무리
You've now explored time series data, and seen how to split it into training and validation sets for training a DNN.
But sequence data tends to work better with RNNs, so next week you're going to look at training a model using RNNs and LSTMs on this data to see what happens!
과제 : 데이터 분할 및 DNN 으로 분석하기
mae : 3.0289679로 많이 낮췄다.
1)모델 2번째 레이어의 뉴런수를 10 ->30으로 늘려주고 , 에폭을 500으로 늘렸더니 mae=3.00으로 조금더 감소했다.
2)여기에 더해 window_size를 20 -> 10으로 바꿨더니 mae = 2.90으로 앞선 조정보다 더 감소했다.
'머신러닝 & 딥러닝 공부 > Tensorflow' 카테고리의 다른 글
[Tensorflow dev 자격증] Real-world time series data (0) | 2021.03.02 |
---|---|
[Tensorflow dev 자격증] Recurrent Neural Networks for Time Series (0) | 2021.03.02 |
[Tensorflow dev 자격증] Sequences and Prediction (2) | 2021.03.01 |
[Tensorflow dev 자격증] Sequence models and literature (0) | 2021.02.25 |
[Tensorflow dev 자격증] Sequence models (0) | 2021.02.24 |