오늘은 계획표대로 Tensorflow 2.0을 공부해봐야 할 것 같아요.
편리하게 2.0 코드를 공부할 수 있도록 TF에서 튜토리얼을 제공하고 있습니다!
Link - https://www.tensorflow.org/tutorials/quickstart/beginner
For expert - https://www.tensorflow.org/tutorials/quickstart/advanced
말은 초보자와 advanced로 나누어 놓긴 했지만 저는 솔직히 저 정도의 custom이 과연 초보자와 전문가를 나누는 기준이 되는지는 의심이 되네요ㅋㅋㅋ... 아무튼 그렇다고 하니
우선 beginner부터 시작해 봅시다!
처음 코드를 보면 from __future__ import ~로 되어있네요. 이건 처음 봤는데 __future__를 넣는 건 python 2와 python 3 모두에서 작동하는 코드를 짜기 위함인 것 같습니다.
이어서 살펴보면 mnist data를 keras.datasets에서 바로 받아오네요. 호오 유명한 데이터셋은 keras datasets에서 제공하고 있나 봅니다. 이쯤되면 어떤 데이터들에 바로 접근이 가능한지 확인을 하러 가봅시다!
오옹 이런 데이터들이 들어가있네요!
imdb reuters 빼고는 예제로 한번씩 만져본 애들입니다.
로이터 보고 엥 톰슨로이턴가?? 했는데 topic classification dataset이네요.
한번 실행시켜보니 숫자들로 되어있는 데이터가 막 쏟아져 나옵니다.
무튼 다시 하던 작업으로 돌아가 보도록 하죠!
다음 코드를 보니 mnist dataset에서 load_data를 통해 데이터를 다운받아서 training set과 test set을 정리합니다.
오잉 캡처를 뜨다 보니까 살짝 흐린 감이 있네요ㅠㅠ
무튼! 원래 있던 코드에 제가 살짝 추가해놓은 얘들이 있는데 무시하셔도 됩니다.
plt를 따로 import해서 imshow해보니 mnist data가 잘 받아져 있는 걸 확인해볼 수 있습니다.
TF 1.0에서는 다른 방식으로 받았었는데 mnist 다루기는 훨씬 편해지겠네요.
이제 신경망을 만들어볼 차례입니다.
우와... TF 2.0이 사용자가 컨트롤하기 훨씬 편해진 것 같아요...
1.0에서는 tf.layers.dense를 써서 작업했었고, keras 쓸 때도 제 기억이 맞다면 시퀀셜을 따로 만들고 거기에 하나씩 추가하는 형태였는데, 어쨌든 keras에서의 방법과 유사하지만
한 줄에 바로 시퀀셜 모델을 만들 수 있다는 게 좋은 것 같아요.
중간중간 주석은 느낀 점을 조금 적어보았습니다.
Flatten 할때 궁금한 점은 굳이 input_shape가 필요한가? 입니다. flatten은 input shape이 어떻게 주어지든 그냥 1D로 피면 되는 거니까 input shape이 필요없을 것 같아서 지워보았는데, 그래도 잘 작동하네요. 예감이 맞았다니 기분이 좋습니다.
신경망 구성은 784 -> 128 -> 10 이 되겠네요. relu를 썼고, 마지막은 확률이니 softmax로 출력했습니다. 신기한 사실은 Dropout을 엄청 편리하게 했다는 점입니다. 예전에 Dropout을 수작업으로 코딩할 때 머리가 지끈지끈했던 경험이 있는데 이렇게 코드 한번에 바로 작업이 된다니 벙찌네요ㅋㅋㅋ.. 여기서 또 궁금한 점이 생기는데, 이 Dropout은 바로 위에 정의한 128 node짜리에만 적용이 되는 건지가 궁금해졌습니다. 아니면 적용하면 그 위에 있는 모든 layer들에 적용이 되는 건지도요! 아마 바로 위에 있는 layer에 적용이 되는 것 같아요. 궁금해서 다른 층을 쌓아보고 summary를 해보았습니다.
확실히 dropout의 층이 사이에 껴있는 것을 보면 input으로 받은 layer에만 적용이 된다는 사실을 알 수 있습니다.
모델을 여러개 붙여보는 경험도 해보고 싶어서 모델2를 새로 만들고 모델3를 모델1과 모델2를 합쳐 만들어보았습니다. 모델3를 summary하면 다음과 같이 나오네요.
모델2는 32 - 16으로 만들었는데 여기서는 한번에 sequential29로 뜨면서 중간 층이 생략되네요. (param개수를 확인해보면 10*33 + 32*16 = 880)
이렇게 되어 있으니 따로따로 fitting하기도 편리할 것 같습니다.
이렇게 되어 있으니 따로따로 fitting하기도 편리할 것 같습니다.
fitting은 위와 같이 진행됩니다. 와... 예전에는 placeholder 만들어서 집어넣고 어쩌구저쩌구 했었는데 저렇게 쉽게 fitting을 할 수 있게 되었네요. 위에서 loss와 metric을 정의해주었으니 evaluation도 간단하게 가능합니다.
간단히 beginner version의 TF 2.0을 탐색해 보았습니다.
깃헙에 올려놓았으니 참고하시면 좋을 것 같습니다!
깃헙 링크 -
댓글 없음:
댓글 쓰기