시작하세요! 텐서플로 2.0 프로그래밍 리뷰

2020. 7. 17. 03:25어른이 프로그래머의 리뷰

본 포스트는 페이스북 생활코딩 페이지 책프협 골라 받는 서평 이벤트로 도서를 받아 작성했습니다.

 

시작하세요! 텐서플로 2.0 프로그래밍, 김환희 지음

처음 AI와 딥러닝을 공부할 때, 무엇부터 공부해야 하는지, 어떤 순서로 공부해야 하는지에 대해 많이들 궁금해하실 것이라 생각합니다. 저는 Andrew ng 교수님의 machine learning과 김성훈 교수님의 모두를 위한 딥러닝 강의로 딥러닝에 입문하였습니다. 다만 급변하는 AI 시장의 흐름에서 2019년 9월에 텐서플로 버전이 2.0으로 업그레이드됨에 따라 Keras를 중심으로 하는 고수준 API의 통합이 있었고, 따라서 이제는 Keras를 이용해 모델을 만들고 학습하는 방법을 아는 것이 중요해졌습니다. 하지만 텐서플로 1.X 버전에서 딥러닝을 배우고 코드를 짜던 분들이라면 Keras에서 모델을 만들고 학습하는 것에 익숙지 않을 것입니다. 이처럼 · 텐서플로 버전이 업그레이드됨에 따라 Keras를 배우고 싶으신 분 · 처음 입문하고 앞으로의 트렌드에 맞춰 딥러닝을 배우고 싶으신 분 · 이미 딥러닝의 이론을 공부하고 코드로 실습하고 싶으신 분들에게 추천하고 싶은 책을 소개해드리려 합니다. "시작하세요! 텐서플로 2.0 프로그래밍"은 Keras로 다양한 문제를 풀어봄으로써 신규 혹은 기존의 사용자들이 텐서플로 2.0 버전에 익숙해질 수 있는 데에 큰 도움을 주는 책이라고 생각합니다. 책은 텐서플로 2.0 버전의 주요 변화를 시작으로 텐서플로 설치, 파이썬의 기본 문법들을 설명하고 뒤이어 회귀와 분류, 신경망과 모델에 대해 실습 코드와 함께 설명하고 있습니다. 책을 받아 처음 읽었을 때 인상 깊었던 점은 Keras로 모델을 구성하여 학습하는 코드에서 함수의 인수들에 대한 설명까지 자세히 파고든 점입니다. 보통의 프로그래머분들이라면 '구글링으로 Keras 문법을 찾아보고 사용하면 되지 않을까?'라고 생각하고 물론 수준 있는 프로그래머분들은 구글링으로도 충분히 Keras를 사용할 수 있을 것입니다. 하지만 저처럼 파이썬의 문법들은 잘 알고, 딥러닝의 이론도 어느 정도 알고 있긴 하지만 텐서플로를 처음 접한다면 model = tf.keras.Sequential([tf.keras.layers.LSTM(units=30, return_sequences=True, input_shape=[100,2])])과 같은 코드를 처음 보는 볼 때 units, return_sequences 등의 인수들은 무엇을 뜻하는지, 이를 어떤 식으로 구글링 해야 할지 등에 대해 힘들 것입니다. 하지만 이 책에서는 코드 한 줄 한 줄을 이론과 그림을 붙여 설명해 정말 자세히 배운다는 느낌을 받을 수 있었습니다. 실제 책의 한 코드 설명을 예를 들어 보겠습니다.

예제 6.1 Conv2D 레이어 생성코드 (p.146)
conv1 = tf.keras.layers.Conv2D(kernel_size=(3,3), strides = (2,2), padding='valid', filters=16)
=> Conv2D 레이어를 생성할 때의 주요 인수는 kernel_size, strides, padding, filters의 네 가지입니다. kernel_size는 필터 행렬의 크기입니다. 이것은 수용 영역이라고도 부릅니다. 앞의 숫자는 높이, 뒤의 숫자는 너비이고 하나만 쓸 경우 높이와 너비를 동일한 값으로 사용한다는 뜻입니다. strides는 필터가 계산 과정에서 한 스텝마다 이동하는 크기입니다. 기본값은 (1,1)이고 ... 그림 6.10처럼 동일한 조건에서 strides가 달라지면... (중략)

위의 Conv2D 레이어 생성코드 설명을 보면 Conv2D 레이어의 인수들을 이론과 그림을 예로 하나씩 설명해줍니다. 설명을 보면 인수 strides의 기본값에 대해서도 설명하고 있습니다. 구글링을 통해 다양한 코드를 접한 분들이라면 어떤 코드에서는 A인수가 사용되지 않았으나 어떤 코드에서는 A인수가 사용된 적을 보셨을 것입니다. 그 때면 인수가 사용되지 않았을 때 디폴트 값은 무엇인지에 대한 설명을 다시 찾아보아야며 실제로 인수들의 디폴트 값은 케라스 공식문서에서도 안 나와있는 경우가 있어 찾기가 힘듭니다. 그런데 이 책에서는 텐서플로 2.0을 처음 접하는 사람들이 겪을 힘든 점들까지 고려해 코드를 정말 자세히 설명했다는 것을 느낄 수 있었습니다. 하지만 책은 실습 코드에만 치중하지 않았습니다. 실제 책을 읽어보았을 때 그림이 굉장히 많은 것을 볼 수 있는데, 저는 이 점이 굉장히 좋았습니다. 보통 코드를 실행하면 손실과 정확도를 출력하는 정도에 그칩니다. 따라서 학습이 진행될 때 그림이 어떻게 학습되는지 등은 사용자가 직접 확인하기에는 쉽지 않습니다. 하지만 책에서는 그림으로 학습 과정을 설명하고, 코드 뿐만 아니라 이론도 그림을 통해 이해를 돕고 있습니다. 텐서플로 2.0버전에서 keras로 코드를 작성하고 싶으신 분들이라면 꼭 권장하고 싶은 책입니다. 목차와 순서에 맞게 읽지 않고 필요에 맞는 페이지에서 원하는 내용만 골라 읽다보니 책 한권을 모두 읽게 되었습니다. 이 책을 읽으며 굉장히 집중하고 몰입 할 수 있을 정도로 중요한 내용들이 조밀하게 작성된 느낌을 받을 수 있었습니다. 텐서플로 2.0버전으로 업그레이드 된지는 아직 1년이 채 되지 않았으나 언제 바뀔지 모르는 인공지능 시장에서 트렌드에 맞춰 미래지향적으로 실력을 기르는 것, 하지만 단순히 클론코딩만이 아닌 인공지능의 기초 이론과 수학적 지식을 아는 것, 이 둘이 합쳐졌을 때 비로소 인공지능 전문가로 불릴 수 있을 것입니다. "시작하세요! 텐서플로 2.0 프로그래밍"은 트렌드를 맞춰 실력을 기르는 것에 분명히 일조하는 책이라고 할 수 있습니다. 다만 수학적 지식이 부족하거나 딥러닝의 기본 이론 지식이 부족하다면, 이 책으로 이론을 접하는 것보다는 위에서 말한 두 강의를 먼저 듣는 것을 추천합니다. 마지막으로 "책의 표지에는 등대와 등불이 있습니다. 어둠 속에서는 작고 미약한 빛이라도 큰 도움이 됩니다. 텐서플로와 딥러닝을 처음 접하는 분들에게 이 책이 미약하지만 의지할 수 있는 빛이 됐으면 하는 작은 소망으로 표지를 정했습니다. 부디 이 책을 읽고 하나라도 얻어가는 것이 있으시다면 저에게는 가장 뿌듯한 일이 될 것입니다."라는 책의 서문 내용과 같이 책은 단순히 텐서플로 2.0버전의 코드들을 소개한다는 느낌만이 아닌 텐서플로 버전이 업그레이드되며 충족되지 못하고 가려웠던 부분들을 긁어준다는 느낌을 강하게 줍니다.