이전에 짰던 코드 중에서 여기에 포스팅했던 코드를 바꾸어 보려고 합니다. 아마 제 첫 번째 포스팅이었던 것 같은데요, Simple MLP로 주가를 predict했던 코드를 가져와보았습니다.
그 때는 미리 모듈을 만들어 두어서 그냥 있던 모듈을 가져다 썼었는데요, 지금은 실행해보니 deprecated됐다고 Warning이 많이 뜨네요ㅋㅋ! 무튼 이제 낡아버린 코드들을 최신화시켜주는 작업을 해보도록 하겠습니다.
우선 예전에 제가 만들어놓았던 모듈을 가져와 봅시다.
MLP를 구성할 레이어 수와 각 레이어마다의 노드 수, 그리고 TF 1.0에서 사용했던 session을 input으로 받아서 placeholder와 각 레이어들, loss 값, optimizer를 내뱉습니다.
placeholder는 feed dict시 필요하고 레이어는 각 레이어의 output과 최종 prediction을 받기 위해서, loss값은 말할 것도 없고, optimizer는 optimizer를 run하기 위해서 최종 output으로 받아서 사용할 수 있도록 하였습니다.
보시다시피 loss function과 activation, optimizer 모두 고정되어 있어서 custom을 할 수는 없고, 그냥 편하게 MLP만 간단히 돌려보고 싶을 때 사용할 수 있었습니다. 저번 포스팅 중 Beginner 버전과 비슷한 방법이라고 보시면 될 것 같습니다. 그래서, 이걸 tutorial과 비슷하게 TF 2.0 버전으로 최신화해보도록 하겠습니다.
아 그리고 random module을 import한건 저 아래 셀에서 잘 작동하는지 시험해보려고 했던 거라서 신경쓰지 않으셔도 됩니다.
TF 2.0 beginner 버전의 코드를 거의 그대로 가져올 생각인데, 궁금하신 분들은 이전 포스팅인 https://ajlab402.blogspot.com/2020/01/cylab-diary-02-tensorflow-20.html 를 참조하시면 좋을 것 같습니다!
제가 적당히 바꾸어 보았는데, 코드를 한 번 살펴보겠습니다.
으음.. 일단 줄 수가 굉장히 짧아졌네요. 세션도 열 필요가 없고 placeholder도 따로 만들 필요가 없고, 변수 초기화도 따로 해줄 필요가 없으니 줄어들 수 밖에요.. 이렇게 놓고 보니 훠얼씬 좋아진 것 같은 느낌이 듭니다ㅋㅋ 이 경우 굳이 모듈을 이렇게 만들어 두는게 의미가 있나..? 싶을 정도로 간결하네요. 그냥 필요할 때마다 바로바로 쓰는게 더 좋을 것 같아요ㅋㅋ loss를 바꾼 이유는 output layer activation를 softmax가 아니라 leaky relu로 지정해 주었기 때문에 MSE로 바꾸었습니다. optimizer는 동일하게 adam 사용하였습니다.
for문을 사용하여 원래 형태의 모듈을 사용하기 위해 Sequential을 먼저 정의하고 layer를 add하는 방식으로 넣었습니다!
잘 작동하는지 한 번 확인해 보겠습니다.

그 때는 미리 모듈을 만들어 두어서 그냥 있던 모듈을 가져다 썼었는데요, 지금은 실행해보니 deprecated됐다고 Warning이 많이 뜨네요ㅋㅋ! 무튼 이제 낡아버린 코드들을 최신화시켜주는 작업을 해보도록 하겠습니다.
우선 예전에 제가 만들어놓았던 모듈을 가져와 봅시다.
MLP를 구성할 레이어 수와 각 레이어마다의 노드 수, 그리고 TF 1.0에서 사용했던 session을 input으로 받아서 placeholder와 각 레이어들, loss 값, optimizer를 내뱉습니다.
placeholder는 feed dict시 필요하고 레이어는 각 레이어의 output과 최종 prediction을 받기 위해서, loss값은 말할 것도 없고, optimizer는 optimizer를 run하기 위해서 최종 output으로 받아서 사용할 수 있도록 하였습니다.
보시다시피 loss function과 activation, optimizer 모두 고정되어 있어서 custom을 할 수는 없고, 그냥 편하게 MLP만 간단히 돌려보고 싶을 때 사용할 수 있었습니다. 저번 포스팅 중 Beginner 버전과 비슷한 방법이라고 보시면 될 것 같습니다. 그래서, 이걸 tutorial과 비슷하게 TF 2.0 버전으로 최신화해보도록 하겠습니다.
아 그리고 random module을 import한건 저 아래 셀에서 잘 작동하는지 시험해보려고 했던 거라서 신경쓰지 않으셔도 됩니다.
TF 2.0 beginner 버전의 코드를 거의 그대로 가져올 생각인데, 궁금하신 분들은 이전 포스팅인 https://ajlab402.blogspot.com/2020/01/cylab-diary-02-tensorflow-20.html 를 참조하시면 좋을 것 같습니다!
제가 적당히 바꾸어 보았는데, 코드를 한 번 살펴보겠습니다.
으음.. 일단 줄 수가 굉장히 짧아졌네요. 세션도 열 필요가 없고 placeholder도 따로 만들 필요가 없고, 변수 초기화도 따로 해줄 필요가 없으니 줄어들 수 밖에요.. 이렇게 놓고 보니 훠얼씬 좋아진 것 같은 느낌이 듭니다ㅋㅋ 이 경우 굳이 모듈을 이렇게 만들어 두는게 의미가 있나..? 싶을 정도로 간결하네요. 그냥 필요할 때마다 바로바로 쓰는게 더 좋을 것 같아요ㅋㅋ loss를 바꾼 이유는 output layer activation를 softmax가 아니라 leaky relu로 지정해 주었기 때문에 MSE로 바꾸었습니다. optimizer는 동일하게 adam 사용하였습니다.
for문을 사용하여 원래 형태의 모듈을 사용하기 위해 Sequential을 먼저 정의하고 layer를 add하는 방식으로 넣었습니다!
잘 작동하는지 한 번 확인해 보겠습니다.
간단하게 4개 인자를 받아서 4개의 합을 output으로 뱉는 데이터를 구성해보았습니다.
예전에 만든 코드를 그대로 가져와서 살짝만 바꾼 거라서 데이터를 만드는 과정이 이쁘지가 않지만 양해 부탁드립니다ㅋㅋ.. 아무튼!
중간에 #으로 표시한 부분은 원래 있던 모듈과의 비교입니다. session 안에서 optimizer를 run시켰던 부분이 model을 fitting하는 방식으로 바뀌었네요. 마찬가지로, prediction을 보는 부분이 마지막 layer를 run시켰던 게 model.predict를 이용해서 간단하게 할 수 있습니다.
코드를 돌려보면 위와 같습니다. epochs를 늘리면 조금 더 유사한 값을 뱉을 것으로 기대됩니다. (epochs을 20으로 해놓고 돌린 결과로, 너무 길어서 아래 3개 결과만 같이 들고왔습니다. 결과를 보니 잘 작동하는 것 같네요! 다음에 조금 더 복잡한 코드들을 바꾸어보면 좋은 경험이 될 것 같습니다ㅎㅎ
이렇게 오늘은 정말정말 간단한 코드를 바꾸어보았습니다. TF 2.0이 1.0에 비해서 코드 길이도 굉장히 짧아지고 직관적이네요. 아주 편리한 것 같습니다ㅎㅎ 빨리 적응해야겠어요!
오늘도 깃헙 링크와 함께 마무리하겠습니다. 다음 포스팅으로 찾아뵙겠습니다~~
댓글 없음:
댓글 쓰기