러닝 텐서플로
| 표지 설명 | 표지의 동물은 블루 틸라피아Oreochromis aureus이다. 이 민물고기는 중동과 아프리카 일부 지역 에서 유래한 탓에 이스라엘 틸라피아로도 불린다. 키클라과에 속하며 미국의 많은 지역에 서식하고 있다. 블루 틸라피아의 치어는 성체와 비교해 더 어두운 회색빛을 띠며 등지 느러미 뒤쪽에 검은 반점이 있다. 성체는 그 이름의 유래인 파란색을 비 롯해 빨간색, 흰색, 은회색의 다채로운 색조를 띤다. 배는 연한 파란색에 서 흰색이 나타나고 가시가 많은 등지느러미와 꼬리지느러미의 경계 근처는 빨간색과 분홍색의 음영이 나타난다. 성체의 평균 길이는 약 13센티미터에서 20센티미터 사이이며 몸무게는 2.2킬로그램에서 2.7킬로그램 정도다. 어미 물고기는 알을 입안에서 품는데 수정 후 160개에서 1600개의 알을 가지고 있다. 알이 입 안에서 부화하면 새끼는 약 3주간 그 안에 머물고 먹이를 먹을 때만 밖으로 나간다. 어미는 새끼를 품고 있는 동안 평소에 먹는 식물성 먹이 또는 동물 성 플랑크톤을 먹지 않는다. 오라일리 책 표지에 등장하는 동물 대다수는 멸종 위기종이며, 이들 모두 이 세상에 소중한 존재다. 이들을 돕는 방법 을 알고 싶다면 animals.oreilly.com을 방문해보자. 표지 그림은 리처드 리데커Richard Lydekker의 『The Royal Natural
History』에서 가져왔다.
러닝 텐서플로 딥러닝 영상처리와 NLP부터 텐서보드 시각화, 멀티스레딩, 분산처리까지 초판 1쇄 발행 2018년 5월 4일 지은이 톰 호프, 예헤즈켈 레셰프, 이타이 리더 / 옮긴이 박상은 / 베타리더 최용선, 권한철, 윤동균 / 펴낸이 김태헌 펴낸곳 한빛미디어 (주) / 주소 서울시 서대문구 연희로2길 62 한빛미디어(주) IT출판부 전화 02 – 325 – 5544 / 팩스 02 – 336 – 7124 등록 1999년 6월 24일 제10 – 1779호 / ISBN 979 – 11 – 6224 – 068 – 7 93000 총괄 전태호 / 책임편집 김창수 / 기획 최현우 / 편집 이상복 디자인 표지 신종식 내지 김연정 조판 백지선 영업 김형진, 김진불, 조유미 / 마케팅 박상용, 송경석, 변지영 / 제작 박성우, 김정우 이 책에 대한 의견이나 오탈자 및 잘못된 내용에 대한 수정 정보는 한빛미디어(주)의 홈페이지나 아래 이메일로 알려주십시오. 잘못된 책은 구입하신 서점에서 교환해드립니다. 책값은 뒤표지에 표시되어 있습니다. 한빛미디어 홈페이지 www.hanbit.co.kr / 이메일 ask@hanbit.co.kr
2018 Hanbit Media Inc. Authorized Korean translation of the English edition of Learning TensorFlow, ISBN 9781491978511 © 2017 Tom Hope, Yehezkel S. Resheff, Itay Lieder This translation is published and sold by permission of O’Reilly Media, Inc., which owns or controls all rights to publish and sell the same. 이 책의 저작권은 오라일리와 한빛미디어 (주)에 있습니다. 저작권법에 의해 보호를 받는 저작물이므로 무단 전재와 무단 복제를 금합니다.
지금 하지 않으면 할 수 없는 일이 있습니다. 책으로 펴내고 싶은 아이디어나 원고를 메일 ( writer@hanbit.co.kr ) 로 보내주세요. 한빛미디어(주)는 여러분의 소중한 경험과 지식을 기다리고 있습니다.
러닝 텐서플로
지은이・옮긴이 소개
지은이
톰 호프 Tom Hope
학계와 업계에 걸쳐 다양한 경력을 갖춘 응용 머신러닝 연구자이자 데이터 과학자. 다국적 기업 환 경에서 선임 데이터 과학자로 재직하며 웹 마이닝, 텍스트 분석, 컴퓨터 비전, 세일즈와 마케팅,
IoT, 금융시장 예측, 대규모 제조업 등 여러 분야를 넘나들며 데이터 과학과 딥러닝 연구개발팀을 이끌어왔다. 이전에는 전자상거래 스타트업에서 데이터 과학 연구개발을 주도했다. 주요 다국적 기 업과 스타트업에서 데이터 과학 컨설팅을 수행하기도 했다. 컴퓨터 과학, 데이터 마이닝, 통계를 연 구하다 보니 현재는 머신러닝, 딥러닝, 자연어처리, 약지도 학습, 시계열 등이 주요 연구 분야다. 지은이
예헤즈켈 레셰프 Yehezkel S. Resheff
머신러닝과 데이터 마이닝 분야 응용 연구자. 히브리 대학교에서 웨어러블 기기와 IoT에서 발생한 데이터를 분석하기 위한 머신러닝과 딥러닝 방법론을 공부했다. 대규모 기업과 소규모 스타트업 모 두에서 연구 활동을 주도하고 있으며, 여러 개의 특허와 논문을 발표했다. 현재는 차세대 딥러닝 기 술 개발에 참여하고 있으며 머신러닝의 한계를 극복하려는 기업들에 컨설팅을 하고 있다. 지은이
이타이 리더 Itay Lieder
머신러닝과 전산 신경과학 분야 응용 연구자. 히브리 대학교에서는 저수준 퍼셉트론 모델링을 위한 계산 방법론을 개발하여 충분한 학습이 어려운 개인을 대상으로 한 프로파일링 도구에 적용했다. 거 대 다국적 기업에 근무하며 텍스트 분석, 웹 마이닝, 금융 기록 등 여러 분야에서 혁신적인 딥러닝 연구개발을 이끌고 있다. 옮긴이 박상은 edberg.s@gmail.com
컴퓨터에 붙은 그림을 보고 애플이라는 단어의 뜻을 알게 된 이 땅의 흔한 개발자 중 한 사람. 대학 원에서 인공지능을 공부했지만 졸업 이후 메일, 브라우저, CMS, 도서 관리 시스템, 빅데이터 플랫 폼 등 인공지능과 큰 관련이 없는 다양한 프로젝트에 참여해오다 뒤늦게 다시 인공지능과 머신러 닝에서 비전을 찾아 어슬렁거리고 있다. 최근에는 딥러닝의 재미있는 주제들을 연구하고, 이를 사 업화하는 데 관심을 가지고 있다. 공역한 책으로 『9가지 사례로 익히는 고급 스파크 분석(개정판)』 (한빛미디어, 2018 )이 있다.
4
옮긴이의 말
20년쯤 전에 대학원에서 신경망을 공부했다. 신경망을 처음 접했을 때는 모든 것이 신기했다. 이걸로 지구를 정복할 수 있을 거라는 생각도 들었다. 하지만 이내 답답함이 몰려왔다. 여러 이 유가 있었는데 가장 큰 이유는 당시 하드웨어 성능의 한계였다. 인간의 뇌를 시뮬레이션해보고 싶었는데 당시에는 요원한 일 같았다. 적어도 세기말이 한 번은 더 와야 할 것 같았다. 그게 얼마나 멍청한 생각인지 깨닫는 데는 한 세기가 걸리지 않았다. 알파고 이벤트는 여러 가 지를 시사했다. 인공지능이 제시한 완전히 새로운 합리의 가능성과 이를 뒷받침하는 기술의 진 보를 여실히 보여줬다. 물론 하드웨어와 방법론 모두 완전 새로워졌다. 이미 인공지능의 가능 성을 알고 있었던 사람들이건 뒤늦게 깨달은 사람들이건 딥러닝의 세계에 환호를 보내고 있으 며 많은 개발자가 딥러닝 분야로 옮겨가고 있다. 텐서플로는 이 패러다임의 붐에 구글이 던져준 열쇠 같은 존재이다. 사실 텐서플로 이전에도 딥러닝 도구가 없었던 것은 아니다. 하지만 텐서플로는 여러 미덕을 갖추고 있으며 많은 이들 이 텐서플로를 무기 삼아 도메인으로 진입하고 있다. 다른 훌륭한 책이 많이 있고 각각의 책마다 장점이 있겠지만 이 책 또한 다른 책들에 못지않은 좋은 길잡이이다. 텐서플로를 사용해 딥러닝을 쉽고 빠르게 시작할 수 있게 쓰였고, 최적화와 성능을 고려한 고급 활용법까지 소개한다. 네트워크의 구조와 다양한 학습 이론을 깊이 고민해 보며 더 깊숙한 딥러닝의 세계로 들어갈 준비를 하는 사람들에게 특히 도움이 되지 않을까 싶다. 텐서플로는 빠르게 진화하고 있다. 번역 작업이 진행되는 동안 마이너 버전이 두 번이나 바뀌 었다. 그 때문에 원문에 많은 주석이 붙었다. 2.0이 나오기 전까지 현재의 API는 유지되겠지 만, 향후 버전 변경으로 책 내용에 변경 사항이 생긴다면 이를 독자에게 지속적으로 제공할 방 법을 출판사와 함께 고민하고 있다. 통계학 용어는 대부분 한국통계학회의 용어 표기를 따랐고, 머신러닝과 딥러닝 용어는 한빛미 디어의 용어 표기를 따랐다. 이 책의 번역과 관련하여 코드 예제 검토를 도와주고 베타리더 역 할을 해주신 에스코어 머신러닝TF 팀원 여러분들께 감사의 마음을 전한다. 박상은
5
베타리더의 한마디
텐서플로를 기초부터 잘 설명해주는 책이 나왔습니다. 기본적인 변수 설정부터 메서드 같은 텐서플 로의 동작 방식, 그리고 분류, CNN, RNN, 텍스트 분석까지 설명합니다. 케라스 등 텐서플로를 더 쉽게 쓸 수 있게 해주는 도구와 텐서플로를 분산 환경에서 돌릴 수 있는 방법도 살펴봅니다. 약간의 딥러닝 지식만 있다면 쉽게 이해할 수 있습니다. 책에서 제공하는 예제에 자신이 구한 데이터셋을 적용해가면서 공부해보면 더 도움이 될 거라고 생각합니다. 텐서플로를 실무에서 사용하고 있는 사 람으로서 텐서플로 입문자들에게 추천하고 싶은 책입니다.
_최용선, S-Core 데이터 과학자
6
이 책에 대하여
최근 몇 년 사이에 데이터를 학습하여 지능형 시스템을 만드는 최고의 기술로 딥러닝이 등장했 다. 딥러닝은 원래 인간의 뇌가 학습하는 방식으로부터 영감을 받아 전례가 없는 정확도로 복 잡한 문제를 해결하기 위해 엄청난 양의 데이터를 사용해 학습을 진행한다. 딥러닝을 널리 사 용할 수 있게 기여한 오픈소스 프레임워크 덕분에, 딥러닝은 빅데이터와 머신러닝에 관련된 모 든 사람들이 반드시 알아야 하는 기술이 되었다. 현재 시점에서 텐서플로는 딥러닝을 위한 최고의 오픈소스 소프트웨어로, 컴퓨터 비전, 자연어 처리(NLP ), 음성인식 및 일반 예측 분석 분야의 전문가들 사이에서 빠르게 보급되고 있다. 이 책은 데이터 과학자, 엔지니어, 학생 및 연구자들을 위해 쓰인 포괄적인 안내서다. 다양한 기술 수준의 독자를 상정하여 적절하게 실전 예제를 준비했다. 초보자들이 편안하게 기술에 입 문하게 하는 동시에, 고급 주제로 들어가면 업무 환경에 사용할 시스템을 구축하는 방법까지 배울 수 있게 썼다. 책에서 배울 수 있는 것들은 다음과 같다. 1. 빠르고 쉽게 텐서플로를 시작해보기 2. 텐서플로를 사용해 모델을 만들어보기 3. 컴퓨터 비전과 NLP에 일반적으로 사용되는 딥러닝 모델을 학습시키고 이해하기 4. 더 쉽고 빠르게 개발할 수 있도록 다양한 라이브러리 사용해보기 5. 큐와 멀티스레드, 클러스터를 이용한 학습, 실제 업무 환경에 결과 제공 등을 통해 텐서플로 확장하기 6. 그 밖에 많은 것들!
필자들은 업계와 학계에 걸쳐서 다양한 연구 및 개발 경력이 있는 데이터 과학자들이다. 실전 적 접근 방법을 취하여, 실용적이고 직관적인 예제, 도식, 통찰을 책에 담았다. 유연하고 강력 한 모델을 만들고 싶은 독자는 물론, 실제 업무에 적용되는 시스템을 만들고 싶은 실무자에게 큰 도움이 될 것이다.
7
미리 알아야 할 것 독자들은 과학 문제에 널리 사용되는 라이브러리인 넘파이에 대한 기본적인 이해를 포함하여 어느 정도 파이썬 프로그래밍에 대한 기본적인 노하우를 가지고 있어야 한다. 이 책은 전반적인 머신러닝의 개념을 직관적인 수준에서 설명하고 다룬다. 더 깊은 이해를 원 한다면, 머신러닝, 선형대수, 미적분, 학률, 통계에 대한 적절한 수준의 지식이 필요하다.
코드 예제 코드 예제나 연습 문제 등 보충 자료는 䵱䵽䵽䵹䵼䵃䴸䴸䵰䵲䵽䵱䵾䵫䴷䵬䵸䵶䴸䵑䵮䶃䵲䴶䵛䵮䵼䵱䵮䵯䵯䴸䵘䵻䵮䵲䵵䵵䶂䴶
䵕䵮䵪䵻䵷䵲䵷䵰䴶䵝䵮䵷䵼䵸䵻䵏䵵䵸䶀 에서 다운로드할 수 있다.
감사의 말 이 책을 읽고 피드백을 준 리뷰어인 크리스 프레글리Chris Fregly, 마빈 버틴Marvin Bertin, 오렌 사 샬 롬Oren Sar Shalom과 요니 라비Yoni Lavi에게 감사를 전한다. 이 책을 쓸 수 있도록 도와준 니콜 타치 에게, 그리고 오라일리에도 감사를 전한다.
Nicole Tache
물론 구글의 임직원들에게도 감사를 전한다. 그들이 없었다면 텐서플로는 존재하지 않았을 테 니까.
8
CONTENTS
지은이・옮긴이 소개 .......................................................................................................... 4 옮긴이의 말 ...................................................................................................................... 5 베타리더의 한마디 ............................................................................................................. 6 이 책에 대하여 .................................................................................................................. 7
CHAPTER
1 개요 1.1 딥러닝 속으로................................................................................................................ 15 1.1.1 인공지능 시스템에 텐서플로 사용하기 ......................................................................... 17
1.2 텐서플로라는 이름에 담긴 의미....................................................................................... 19 1.3 텐서플로 개괄................................................................................................................ 20 1.4 마치며........................................................................................................................... 23
CHAPTER
2 텐서플로 설치에서 실행까지 2.1 텐서플로 설치................................................................................................................ 25 2.2 Hello World .................................................................................................................. 28 2.3 MNIST.......................................................................................................................... 30 2.4 소프트맥스 회귀 ............................................................................................................ 31 2.5 마치며........................................................................................................................... 40
CHAPTER
3 텐서플로의 기본 이해하기 3.1 연산 그래프 ................................................................................................................... 41 3.1.1 연산 그래프란? ....................................................................................................... 41 3.1.2 연산 그래프의 장점 .................................................................................................. 42
9
CONTENTS
3.2 그래프, 세션, 페치 ......................................................................................................... 43 3.2.1 그래프 만들기......................................................................................................... 43 3.2.2 세션을 만들고 실행하기 ............................................................................................ 45 3.2.3 그래프의 생성과 관리 ............................................................................................... 47 3.2.4 페치...................................................................................................................... 48
3.3 텐서의 흐름 ................................................................................................................... 49 3.3.1 노드는 연산, 변은 텐서 객체 ...................................................................................... 50 3.3.2 데이터 타입............................................................................................................ 51 3.3.3 텐서 배열과 형태 ..................................................................................................... 53 3.3.4 이름...................................................................................................................... 58
3.4 변수, 플레이스홀더, 간단한 최적화.................................................................................. 59 3.4.1 변수...................................................................................................................... 59 3.4.2 플레이스홀더.......................................................................................................... 61 3.4.3 최적화................................................................................................................... 62
3.5 마치며........................................................................................................................... 71
CHAPTER
4 합성곱 신경망 4.1 CNN 소개 ..................................................................................................................... 73 4.2 MNIST 분류기: 버전 2 ................................................................................................... 76 4.2.1 합성곱................................................................................................................... 76 4.2.2 풀링...................................................................................................................... 79 4.2.3 드롭아웃................................................................................................................ 79 4.2.4 모델...................................................................................................................... 80
4.3 CIFAR10....................................................................................................................... 85 4.3.1 CIFAR10 데이터 읽어 들이기 ................................................................................... 86 4.3.2 간단한 CIFAR10 모델 ............................................................................................. 89
4.4 마치며........................................................................................................................... 94
10
CHAPTER
5 텍스트 1: 텍스트와 시퀀스 처리 및 텐서보드 시각화 5.1 시퀀스 데이터의 중요성.................................................................................................. 95 5.2 RNN 소개 ..................................................................................................................... 97 5.2.1 기본적인 RNN 구현 ................................................................................................ 98 5.2.2 텐서플로 내장 RNN 기능 ...................................................................................... 110
5.3 텍스트 시퀀스용 RNN ................................................................................................. 113 5.3.1 텍스트 시퀀스...................................................................................................... 113 5.3.2 지도 학습 방식의 단어 임베딩 ................................................................................. 119 5.3.3 LSTM과 시퀀스 길이의 활용.................................................................................. 120 5.3.4 임베딩 학습과 LSTM 분류기.................................................................................. 121
5.4 마치며........................................................................................................................ 125
CHAPTER
6 텍스트 2: 단어 벡터, 고급 RNN, 임베딩 시각화 6.1 단어 임베딩 소개 ........................................................................................................ 127 6.2 word2vec .................................................................................................................. 129 6.2.1 스킵-그램........................................................................................................... 130 6.2.2 텐서플로에서의 임베딩 .......................................................................................... 134 6.2.3 잡음 대비 추정(NCE) 손실 함수 .............................................................................. 134 6.2.4 학습률 감소......................................................................................................... 135 6.2.5 텐서보드를 사용하여 학습하고 시각화하기 ................................................................ 136 6.2.6 임베딩 확인해보기 ................................................................................................ 137
6.3 사전 학습된 임베딩과 고급 RNN ................................................................................. 140 6.3.1 사전 학습된 단어 임베딩 ........................................................................................ 140 6.3.2 양방향 RNN과 GRU 셀........................................................................................ 145
6.4 마치며........................................................................................................................ 148
11
CONTENTS
CHAPTER
7 텐서플로 추상화와 간소화 7.1 이번 장의 개요 ........................................................................................................... 149 7.1.1 추상화 라이브러리 둘러보기 ................................................................................... 151
7.2 contrib.learn .............................................................................................................. 153 7.2.1 선형회귀............................................................................................................. 155 7.2.2 DNN 분류기 ....................................................................................................... 158 7.2.3 FeatureColumn ................................................................................................. 161 7.2.4 contrib.learn으로 사용자 정의 CNN 만들어보기 ...................................................... 167
7.3 TFLearn..................................................................................................................... 171 7.3.1 설치................................................................................................................... 171 7.3.2 CNN ................................................................................................................. 171 7.3.3 RNN ................................................................................................................. 174 7.3.4 케라스................................................................................................................ 176 7.3.5 TF-Slim에서 사전 학습된 모델 사용하기.................................................................. 186
7.4 마치며........................................................................................................................ 196
CHAPTER
8 큐, 스레드, 데이터 읽기 8.1 입력 파이프라인 ......................................................................................................... 197 8.2 TFRecord .................................................................................................................. 198 8.2.1 TFRecordWriter로 쓰기....................................................................................... 199
8.3 큐 .............................................................................................................................. 202 8.3.1 큐에 넣고 빼기..................................................................................................... 202 8.3.2 멀티스레딩.......................................................................................................... 204 8.3.3 Coordinator와 QueueRunner ............................................................................. 207
8.4 완전한 멀티스레드 입력 파이프라인 ............................................................................. 209 8.4.1 tf.train.string_input_producer()와 tf.TFRecordReader() ......................................... 210
12
8.4.2 tf.train.shuffle_batch()......................................................................................... 211 8.4.3 tf.train.start_queue_runners()와 전체 요약 ............................................................. 212
8.5 마치며........................................................................................................................ 214
CHAPTER
9 분산 텐서플로 9.1 분산 컴퓨팅 ................................................................................................................ 215 9.1.1 분산이 이루어지는 곳은 어디일까? .......................................................................... 216 9.1.2 병렬화의 목적이 무엇인가? .................................................................................... 216
9.2 텐서플로의 병렬처리 요소 ........................................................................................... 217 9.2.1 tf.app.flags ........................................................................................................ 217 9.2.2 클러스터와 서버................................................................................................... 219 9.2.3 디바이스 간 연산 그래프 복제 ................................................................................. 219 9.2.4 관리 세션............................................................................................................ 220 9.2.5 디바이스 배치...................................................................................................... 221
9.3 분산 예제 ................................................................................................................... 223 9.4 마치며........................................................................................................................ 230
CHAPTER
10 모델 엑스포트와 서빙 10.1 모델을 저장하고 내보내기 ......................................................................................... 233 10.1.1 로딩된 가중치 할당 ........................................................................................... 234 10.1.2 Saver 클래스 .................................................................................................. 238
10.2 텐서플로 서빙 소개................................................................................................... 246 10.2.1 개요............................................................................................................... 246 10.2.2 설치............................................................................................................... 247 10.2.3 빌드와 내보내기 ............................................................................................... 249
10.3 마치며 ..................................................................................................................... 257
13
CONTENTS
APPENDIX
A 모델 구축과 텐서플로 서빙 사용에 관한 팁 A.1 모델 구조화 및 사용자 정의 ........................................................................................ 259 A.1.1 모델 구조화......................................................................................................... 259 A.1.2 사용자 정의 손실 함수........................................................................................... 270
A.2 텐서플로 서빙의 필수 및 권장 구성 요소 ...................................................................... 275 A.2.1 도커 컨테이너란 무엇이며 왜 사용할까? ................................................................... 277 A.2.2 몇몇 기본 도커 명령.............................................................................................. 278
APPENDIX
B 한국어판 부록: 텐서플로 1.7의 contrib.learn 폐기
279
APPENDIX
C 한국어판 부록: 7.3.5절 TF-Slim 예제
281
찾아보기 .................................................................................................................................................. 285
14
CHAPTER
1
개요
이 장에서는 텐서플로의 기본 개요와 텐서플로의 주요 기능인 딥러닝 시스템의 구현과 배포에 대해 소개한다. 딥러닝에 대한 간략한 소개와 기계 지능을 구현한 흥미로운 사례들을 보여준 후 주요 기능과 특징에 대해서 이야기할 것이다.
1.1 딥러닝 속으로 대기업에서 막 시작한 스타트업에 이르기까지, 많은 엔지니어와 데이터 과학자는 대량의 데이 터를 수집하고 머신러닝 알고리즘을 사용하여 복잡한 문제의 답을 내며 지능형 시스템을 구축 하고 있다. 이런 사례에서 볼 수 있는 알고리즘은 최근 주목받는 딥러닝과 관련되어 있으며, 과 거의 접근법을 무색하게 만드는 경우가 많다. 오늘날 딥러닝은 모바일 앱에서 자율주행 자동차에 이르기까지 다양한 시스템에서 사진이나 자연어, 음성의 내용을 인식하는 데 사용되고 있다. 또한 신약 물질 발견을 위한 복잡한 화학구 조와 유전자 구조, 공공 의료 분야의 복잡한 진료 기록 등 다양한 분야와 다양한 데이터 유형으 로 급속도로 확장되고 있다. 심층신경망deep neural network (DNN )이라는 이름으로도 불리는 딥러닝 방법론은 상호 연결된 뉴 런neuron으로 이루어진 광활한 인간 두뇌 네트워크를 흉내 내는 방식으로 시작되었다. 딥러닝에 서는 수백만 개의 데이터를 뉴런의 입력으로 밀어 넣고 이 입력으로부터 패턴을 찾아낼 수 있
1장 개요
15
도록 뉴런을 학습시킨다. 심층신경망은 이미지의 픽셀 값 같은 입력 값을 받아 이미지의 모양 이나 가장자리 같은 고수준 특징을 추출하여 입력 값을 적당한 형태로 변환한다. 여기에는 정 보가 담긴 조그마한 단서들을 결합하여 찾아낸 복잡한 의미를 담겨 있으며, 이를 통해 이미 지 분류 같은 까다로운 문제를 풀 수 있다(그림 1-1 ). 네트워크는 데이터에서 관찰된 패턴 에 맞추어 자기 자신을 맞추고 수정하면서 추상화된 표현을 자동으로 만들어나가도록 학습한 다. 데이터의 표현을 자동으로 구성하는 능력은 전통적인 머신러닝과 비교했을 때 심층신경망 의 핵심적인 강점이다. 기존에는 ‘학습’이 진행되기 전에 도메인 전문 기술이나 특징공학feature engineering
과정이 필요했다.
[코끼리]
픽셀(
그림 1-1 심층심경망을 이용한 이미지 분류의 예. 네트워크는 이미지의 픽셀 값을 입력으로 받아 정확한 이미지 분류를 수행하기 위해서 입력값을 의미 있는 표현으로 변환하는 방법을 학습한다.
이 책은 딥러닝을 위한 구글의 프레임워크인 텐서플로에 관한 내용을 담고 있다. 딥러닝 알고 리즘은 검색, 번역, 광고, 컴퓨터 비전, 음성인식 등 구글의 많은 제품 및 서비스 영역에 수년간 사용되어왔다. 사실 텐서플로는 2011년에 시작된 디스트빌리프DistBelief 프로젝트를 계승한 것 으로, 이는 심층신경망을 구현하고 배포하는 데 사용되던 구글의 2세대 시스템이었다. 텐서플로는 2015년 아파치 2.0 라이선스를 사용하여 오픈소스 프레임워크로 공개되었고 구글 의 내부 프로젝트로 그치지 않고 일순간에 산업 현장에 채택되고 있다. 텐서플로를 유지하고 개발하는 구글 엔지니어들의 노력과 텐서플로의 확장성 및 유연성으로 말미암아 텐서플로는 딥러닝 수행의 선도적인 시스템으로 자리매김했다.
16
러닝 텐서플로
1.1.1 인공지능 시스템에 텐서플로 사용하기 텐서플로가 무엇인지, 그리고 그 주요 특징이 무엇인지를 더 깊이 들여다보기 전에 텐서플로가 구글이나 다른 최신 응용프로그램에서 어떻게 사용되는지 흥미로운 사례로 간단히 살펴보자.
사전 학습된 모델 : 모두를 위한 최신 컴퓨터 비전 컴퓨터 비전은 딥러닝이 매우 잘 적용되는 분야 중 하나이다. 컴퓨터 비전의 기본 작업은 이미 지 분류로, 이미지를 입력으로 받아들여 이들을 잘 설명할 수 있는 카테고리의 집합을 출력하 는 알고리즘과 시스템을 만드는 일이다. 연구자, 데이터 과학자, 엔지니어는 영상의 내용을 매 우 정확하게 이해할 수 있는 고급 심층신경망을 설계했다. 이런 네트워크는 대량의 이미지 데 이터로 학습하는 게 일반적이며, 여기에 많은 시간과 자원과 노력이 투입된다. 하지만 사용자 들이 내려받아 각자의 데이터를 적용할 수 있도록 사전 학습된 모델을 공개하는 것이 요즘의 추세이다(그림 1-2 ).
["영양"]
사전 학습된 네트워크
픽셀(
그림 1-2 사전 학습된 텐서플로 모델을 사용한 고급 컴퓨터 비전
텐서플로에서 제공하는 유용한 유틸리티들을 사용하여 최신의 사전 학습된 모델을 구해서 적 용하기만 하면 된다. 여러 실용적인 예제를 통해 이 책 전반에 걸쳐 자세하게 살펴볼 것이다.
1장 개요
17
이미지에 대한 자연어 형태의 설명 만들기 기계 지능 시스템을 구축하는 딥러닝의 흥미로운 분야 중에는 시각적 콘텐츠에 대한 자연어 설 명 생성하기가 있다(그림 1-3 ). 여기서 가장 중요한 작업은 이미지 캡션 달기인데, 이는 이미 지에 대한 간결하고 정확한 캡션을 출력하도록 모델을 학습하는 일이다. 여기에서도 자연어이 해와 컴퓨터 비전을 결합한 사전 학습된 고급 텐서플로 모델을 사용할 수 있다.
사파리에서 얼룩말이 차 옆에 서 있다. 그림 1-3 이미지와 같이 제공되는 이미지 캡션 텍스트(이해를 돕기 위한 예)
텍스트 요약 자연어이해natural language understanding (NLU )는 AI 시스템을 구축하는 데 핵심인 기능이다. 웹 콘텐 츠, 소셜 미디어, 뉴스, 이메일, 사내 문서 등 매일 방대한 양의 텍스트가 만들어지고 있다. 가 장 수요가 많은 기능은 텍스트 요약으로, 긴 문서를 가지고 와 원본 텍스트에서 핵심 정보만 추 출하여 간결하고 일관된 문장을 생성하는 것이다(그림 1-4 ). 이 책의 후반부에서 볼 수 있겠 지만 텐서플로는 심층 자연어이해 네트워크를 학습시키는 데 필요한 강력한 기능을 제공하며, 이를 자동 텍스트 요약에 사용할 수 있다.
18
러닝 텐서플로
그림 1-4 스마트 텍스트 요약의 예시
1.2 텐서플로라는 이름에 담긴 의미 앞에 나온 용어와 예시에서 암시하듯, 심층신경망은 모두 뉴런의 네트워크에 관한 것으로, 각 뉴런이 큰 그림의 일부분으로 동작하도록 학습된다. 이미지와 같은 데이터는 네트워크의 입력 값으로 들어가서 네트워크를 돌아다니는데, 이를 통해 학습 단계의 네트워크는 데이터에 맞춰 지고 배포된 환경의 네트워크는 결과를 예측한다. 텐서는 딥러닝에서 데이터를 표현하는 일반적인 방법이다. 간단히 말하자면 텐서는 행렬로 표 현할 수 있는 2차원 테이블을 높은 차원으로 확장한 다차원 배열에 불과하다. 회색조의 이미지 에서는 각각의 픽셀의 값을 테이블 형태로 표현하는데, RGB 이미지는 각각의 픽셀을 다시 빨 간색, 녹색, 파란색에 해당되는 세 개의 값으로 나타내므로, 이를 텐서(3차원의 값을 가지는 배열)로 표현할 수 있다. 텐서플로에서 계산은 데이터 흐름 그래프dataflow graph로 처리된다(그림 1-5 ). 보통 이 그래프에서 꼭짓점은 더하기나 곱하기 같은 연산을 나타내며, 변은 이 시스템을 돌아다니는 데이터(텐서) 를 나타낸다. 다음 장에서 여러 예제를 통해서 이 개념을 좀 더 깊게 살펴보고 이 구조를 이해 하는 방법을 학습할 것이다.
1장 개요
19
그림 1-5 데이터 흐름으로 나타낸 연산 그래프. 텐서 형태의 데이터는 심층신경망을 구성하는 연산들의 그래프를 돌아 다닌다.
1.3 텐서플로 개괄 일반화해서 이야기하자면, 텐서플로는 데이터 흐름 그래프를 기반으로 하는 수치 계산을 위한 소프트웨어 프레임워크이다. 하지만 머신러닝 알고리즘, 그중에서도 심층신경망을 표현하고 구현하기 위한 인터페이스를 주 목적으로 설계되었다. 텐서플로는 이식 가능성을 고려하여 설계되었으므로 연산 그래프를 다양한 환경과 하드웨어 플랫폼에서 실행할 수 있다. 본질적으로 동일한 코드를 사용해 여러 컴퓨터의 클러스터상에 분 산처리되는 클라우드 환경이건 한 대의 랩톱 환경이건 동일한 텐서플로 신경망을 학습할 수 있 다. 전용 서버가 아니라도 안드로이드나 iOS 등의 모바일 플랫폼, 또는 라즈베리 파이와 같은 단일 보드 컴퓨터를 사용해서도 예측 기능을 제공하도록 배포할 수 있다. 물론 리눅스, 맥OS, 윈도우 운영체제에서도 구동이 가능하다. 텐서플로의 내부는 C++로 구현되어 있으며 연산 그래프를 표현하고 실행하기 위한 두 종류의 고수준 언어 인터페이스를 가지고 있다. 가장 많이 쓰이는 프런트엔드는 파이썬으로, 대부분의 연구자들이나 데이터 과학자들이 파이썬 인터페이스를 사용하고 있다. C++ 프런트엔드는 상 당수의 저수준 API를 제공하는데 임베디드 시스템이나 이와 유사한 환경에서 효율적으로 실행 된다.
20
러닝 텐서플로
이식 가능성 외에도 텐서플로의 또 다른 특징으로 유연함을 들 수 있다. 이 덕분에 연구자들이 나 데이터 과학자들은 모델을 상대적으로 쉽게 표현할 수 있다. 요즘의 딥러닝 연구와 실습은 네트워크의 블록을 바꿔가면서 무슨 일이 일어나는지 살펴보거나 때로는 새로운 블록을 설계 하므로 마치 레고를 가지고 노는 일처럼 느껴지는 때가 있다. 이 책 전체에서 볼 수 있겠지만 텐서플로는 이러한 모듈 블록을 사용하기에 적합한 도구를 유연한 API와 함께 제공한다. 딥러 닝에서 네트워크는 경사 하강법gradient descent을 사용한 역전파backpropagation라는 피드백 과정으로 학습된다. 텐서플로는 많은 최적화 알고리즘을 제공하는데, 모두 미분 과정을 자동으로 처리한 다. 텐서플로는 사용자가 생성한 연산 그래프와 손실 함수를 근거로 알아서 처리하므로 사용자 가 경삿값에 관한 내용을 딕셔너리에 지정하지 않아도 된다. 학습 과정을 모니터링, 수정, 시각 화하고 실험을 간소화하기 위해 텐서플로는 브라우저에서 실행 가능한 시각화 도구인 텐서보드 도 제공한다(그림 1-6 ). 이 책 전체에서 이를 사용할 것이다.
TensorBoard
그림 1-6 학습 및 실험의 모니터링, 디버깅, 분석을 위한 텐서플로의 시각화 도구 텐서보드
데이터 과학자나 연구자에게 유용한 텐서플로의 유연함은 고수준 추상화 라이브러리에서 온 다. 컴퓨터 비전이나 자연어이해를 목적으로 하는 최신 심층신경망에서 텐서플로 코드 작성은
1장 개요
21
괴로운 일이 될 수 있다. 복잡하고 길고 또 번거로울지도 모른다. 케라스1나 TF-Slim2 같은 추 상화 라이브러리들은 저수준 라이브러리의 ‘레고 블록’을 쉽게 쓸 수 있는 고수준 접근 기능을 제공하는데, 이를 통해서 간단하게 데이터 흐름 그래프를 작성하고, 이를 학습시키고, 추론을 수행할 수 있다.
TF-Slim과 텐서플로에 더불어 제공되는 사전 학습된 모델들도 데이터 과학자나 엔지니어를 위한 중요한 요소이다. 이 모델들은 방대한 양의 데이터를 대규모의 컴퓨팅 자원으로 학습한 것으로 대부분의 모델이 만들기도 쉽지 않고, 구하기도 설정하기도 어렵다. 예를 들면 케라스 나 TF-Slim을 사용하면 몇 줄의 코드만으로도 유입되는 데이터에 대한 추론을 수행하는 고급 모델을 적용할 수 있고 새로운 데이터에 맞게 모델을 미세 조정할 수도 있다. 텐서플로의 유연함과 이식 가능성 덕분에 연구 단계에서 생산 단계에 이르기까지의 과정을 매 끄럽게 진행할 수 있고, 데이터 과학자가 모델을 프로덕션에 적용하거나 엔지니어가 알고리즘 을 강력한 코드로 변환하는 데 필요한 시간과 노력을 줄일 수 있다.
NOTE_ 텐서플로 추상화 텐서플로에는 케라스나 TF-Slim 같은 추상화 라이브러리가 있어 텐서플로에 대한 손쉬운 고수준 접근 기능 을 제공한다. 이 책의 뒷부분에서 살펴볼 이런 추상화는 데이터 흐름 그래프의 구성을 간소화하고 짧은 코드 로 학습 및 추론의 수행을 가능하게 한다.
그러나 유연함과 이식 가능성 외에도 텐서플로는 현실 세계의 인공지능 시스템을 구축하는 엔 지니어에게 매력적인 특징과 도구를 여럿 제공한다. 특히 분산 환경에서의 학습 기능을 기본적 으로 제공하는데, 구글이나 다른 큰 회사에서는 엄청나게 많은 수의 장비로 구성된 클러스터상 에서 대량의 데이터를 사용해 거대한 네트워크를 학습시키는 데 텐서플로를 사용하고 있다. 로 컬 환경에서 하나의 장비용으로 사용한 코드를 거의 바꾸지 않고 여러 하드웨어 장비에서 학습 하는 것이 가능하다. 로컬 환경에서 분산 환경으로 전환할 때도 코드의 변화가 작은 편이므로, 아마존 웹 서비스Amazon Web Services (AWS )나 구글 클라우드Google Cloud 같은 클라우드 환경에서 텐 서플로는 특히 매력적이다. 게다가 이 책에서 앞으로 살펴보겠지만, 텐서플로는 확장성을 높이 기 위한 여러 기능을 제공한다. 스레드와 큐를 사용한 비동기 연산, 효율적인 I/O와 데이터 형
1 옮긴이_ 케라스는 파이썬 기반 딥러닝 라이브러리이다. 자세한 것은 https://keras.io를 참고하자. 7장에서도 간단히 다룬다. 2 옮긴이_ 7장 참조
22
러닝 텐서플로
식 등이 여기에 해당한다. 딥러닝은 빠르게 진화하고 있고, 이에 맞추어 텐서플로도 새롭고 흥 미로운 기능을 추가하며 빠르게 진화하고 있어 유용성, 성능과 가치가 향상되고 있다.
1.4 마치며 이 장에서 이야기한 도구나 특징을 살펴보면 텐서플로가 고작 1년 만에 크게 주목받는 이유를 명확하게 알 수 있다. 이 책은 독자들이 빠르게 기초를 익히고 준비할 수 있게 도와준 후 흥미 롭고 실용적인 예제를 통해 텐서플로의 세계에 푹 빠질 수 있게 인도할 것이다.
1장 개요
23
CHAPTER
2
텐서플로 설치에서 실행까지
이번 장에서는 두 개의 텐서플로 예제로 여정을 시작한다. 시작은 언제나 그렇듯 ‘hello
world’ 프로그램인데 짧고 단순하지만 앞으로 자세히 설명할 많은 중요한 요소들이 들어 있 다. 그다음 예제는 처음으로 만들어보는 완전한 머신러닝 모델로, 텐서플로를 사용한 최신 머 신러닝을 향한 첫걸음이 될 것이다. 시작하기 전에 텐서플로의 설치 과정을 간단히 살펴보자. 빠르고 쉽게 시작하기 위해서 CPU 버전만 설치하고 GPU 기능의 설치는 뒤로 미뤄두자(이 말의 뜻조차 모르더라도 지금은 괜찮 다!).1 이미 텐서플로가 설치되어 있다면 다음 절로 넘어가도 좋다.
2.1 텐서플로 설치 (텐서플로를 익히기 위해) 다른 모듈의 추가 없이 파이썬만 설치한 상태라면 간단하게 䵹䵲䵹2로 설치할 수 있다.3 1 설치와 관련된 자세한 내용, 특히 GPU 설치와 관련된 세부 사항은 텐서플로 설치 가이드(https://www.tensorflow.org/install/)를 참 조하자. 2 옮긴이_ 䵹䵲䵹는 파이썬의 기본 패키지 관리자이다. 우분투 환경에서 䵼䵾䵭䵸 䵪䵹䵽䴶䵰䵮䵽 䵲䵷䵼䵽䵪䵵䵵 䵹䶂䵽䵱䵸䵷䴶䵹䵲䵹(파이썬 2.x) 또는 䵼䵾䵭䵸 䵪䵹䵽䴶䵰䵮䵽 䵲䵷䵼䵽䵪䵵䵵 䵹䶂䵽䵱䵸䵷䴼䴶䵹䵲䵹(파이썬 3.x)로 설치할 수 있다. 파이썬 3.x에서 䵹䵲䵹는 䵹䵲䵹䴼으로 파이썬 2.x와 구별된다. 3 옮긴이_ 이 책에서 기본으로 설명하는 설치 환경은 리눅스 환경이다. 윈도우 사용자들은 다음 박스 ‘윈도우 사용자를 위한 텐서플로’ 를 참조하거나, 리눅스용 윈도우 하위 시스템(WSL)을 사용해 우분투 등의 리눅스 패키지 환경을 사용할 수도 있다(https://docs.
microsoft.com/en-us/windows/wsl/install-win10).
2장 텐서플로 설치에서 실행까지
25
䴭 䶁䵺䶁 䵺䵿䶄䶅䵲䵽䵽 䶅䵶䵿䶄䶀䶃䵷䵽䶀䶈
하지만 이미 사용 중인 패키지 중에서 텐서플로가 사용하는 패키지와 겹치는 것이 있다면, 텐 서플로가 설치 과정에서 해당 패키지를 특정 버전으로 덮어쓰므로 문제가 발생할 수 있다. 즉 다른 용도로도 파이썬을 사용하고 있다면 이렇게 하면 안 된다. 이 문제를 해결하는 일반적인 방법 중 하나는 텐서플로를 가상 환경에 설치하는 것인데 䶇䵺䶃䶅䶆䵲䵽䵶䵿䶇라는 이름의 유틸리티로 이 가상 환경을 관리할 수 있다. 사용하는 환경에 따라 䵿䵲䵻䵽䵾䵪䵵䵮䵷䵿가 설치되어 있지 않을 수도 있다. 䵿䵲䵻䵽䵾䵪䵵䵮䵷䵿가 없다면 다 음과 같이 입력해 설치한다. 䴭 䶁䵺䶁 䵺䵿䶄䶅䵲䵽䵽 䶇䵺䶃䶅䶆䵲䵽䵶䵿䶇
자세한 지침은 䵱䵽䵽䵹䵃䴸䴸䵿䵲䵻䵽䵾䵪䵵䵮䵷䵿䴷䵹䶂䵹䵪䴷䵲䵸 를 참조하자. 가상 환경에 텐서플로를 설치하려면 먼저 가상 환경을 생성해야 한다. 이 책에서는 䶇䴸䵮䵷䵿䵼 디 렉터리에 이 공간을 설치하겠지만 독자가 원하는 위치를 자유롭게 선택해도 된다.4 䴭 䵴䵵 䶏 䴭 䵾䵼䵵䵺䶃 䵶䵿䶇䶄 䴭 䶇䵺䶃䶅䶆䵲䵽䵶䵿䶇 䶏䵀䵶䵿䶇䶄䵀䶅䵶䵿䶄䶀䶃䵷䵽䶀䶈
이렇게 하면 䶇䴸䵮䵷䵿䵼 에 䵽䵮䵷䵼䵸䵻䵯䵵䵸䶀 라는 가상 환경이 생성된다(䶇䴸䵮䵷䵿䵼䴸䵽䵮䵷䵼䵸䵻䵯䵵䵸䶀 디렉 터리). 이 가상 환경을 활성화하려면 다음과 같이 입력한다.5 䴭 䶄䶀䶆䶃䵴䵶 䶏䵀䵶䵿䶇䶄䵀䶅䵶䵿䶄䶀䶃䵷䵽䶀䶈䵀䵳䵺䵿䵀䵲䵴䶅䵺䶇䵲䶅䵶
이제 프롬프트가 변경되어 가상 환경이 활성화되었음을 알 수 있다. 䴱䵽䵮䵷䵼䵸䵻䵯䵵䵸䶀䴲䴭
여기서 䵹䵲䵹 䵲䵷䵼䵽䵪䵵䵵 명령을 내려보자.
4 옮긴이_ 윈도우에서는 경로에서 ~/를 빼야 한다. 5 옮긴이_ 윈도우에서는 䵮䵷䵿䵼䵥䵽䵮䵷䵼䵸䵻䵯䵵䵸䶀䵥䵜䵬䵻䵲䵹䵽䵼䵥䵪䵬䵽䵲䵿䵪䵽䵮라고 입력한다.
26
러닝 텐서플로
CHAPTER
3
텐서플로의 기본 이해하기
이 장에서는 텐서플로의 핵심 구축 및 동작 원리를 간단하고 직관적인 예제를 사용해 설명한 다. 데이터 흐름 그래프를 사용해 수치 연산 라이브러리로서의 텐서플로의 기본 사항에 대해서 알아볼 것이다. 구체적으로 말하자면 그래프를 만들고 관리하는 방법과 상수, 플레이스홀더, 변수 같은 텐서플로의 ‘구성 요소’에 대해서 소개한다.
3.1 연산 그래프 텐서플로를 사용하면 서로 상호작용하는 연산을 만들고 실행하면서 머신러닝 알고리즘을 구현 할 수 있다. 이러한 상호작용 형태를 ‘연산 그래프’라고 부르는데, 이 연산 그래프를 사용하여 복잡한 기능 구조를 직관적으로 표현할 수 있다.
3.1.1 연산 그래프란? 일단 독자들이 그래프의 수학적 개념에 대해서 이미 알고 있다고 가정한다. 이를 처음 접하는 분들을 위해서 소개하자면, 그래프는 보통 노드node나 꼭짓점vertex이라고 부르는 서로 연결된 개 체entity의 집합을 부르는 용어이다. 노드들은 변을 통해 서로 연결되어 있다. 데이터 흐름 그래
프에서의 변은 어떤 노드에서 다른 노드로 흘러가는flow 데이터의 방향을 지정한다.
3장 텐서플로의 기본 이해하기
41
텐서플로에서 그래프의 각 노드는 하나의 연산을 나타내는데, 입력값을 받을 수 있으며 다른 노드로 전달할 결괏값을 출력할 수 있다. 비유하자면 그래프를 계산한다는 것은 각각의 설비 (노드)가 원자재(입력)를 가져오거나 생성하여, 원자재를 가공한 후 다른 설비에 전달하는 과 정을 순서대로 수행하여 부품을 만들고, 이러한 부분 생산 과정을 모아 최종 제품을 만들어내 는 것과 같다. 그래프에서의 연산은 빼기와 곱하기 같은 간단한 계산부터 나중에 살펴볼 복잡한 연산까지 모든 종류의 함수를 포함한다. 또한 요약하기, 상수 생성 등과 같은 일반적인 작업까지도 포함한다.
3.1.2 연산 그래프의 장점 텐서플로는 그래프의 연결 상태를 기반으로 연산을 최적화한다. 각 그래프에는 노드 간에 의 존관계dependency가 존재한다. 노드 䶂의 입력이 노드 䶁의 결괏값에 영향을 받을 때 노드 䶂는 노 드 䶁에 의존한다고 말한다. 두 노드가 하나의 변으로 직접 연결되어 있다면 직접적으로 의존direct dependency
한다고 하고, 아닌 경우 간접적으로 의존indirect dependency한다고 한다. 예를 들어 [그림
3-1]의 왼쪽 (A )에서 노드 䵮는 노드 䵬에 직접적으로 의존하고 노드 䵪에는 간접적으로 의존하 는 반면, 노드 䵭와는 아무런 의존관계가 없다.
그림 3-1 (A) 그래프 의존관계의 예시 (B) 노드 e를 계산하는 예. 그래프의 의존관계에 따라 연산량이 최소화된다(노드
c, b, a만 계산).
그래프를 보면 항상 각 노드의 모든 의존관계를 파악할 수 있으며, 이는 그래프 기반 연산 형식 의 기본적인 특징이다. 모델의 수행 단위 간의 의존관계를 찾아내어 사용 가능한 컴퓨팅 자원
42
러닝 텐서플로
에 연산을 분산시키거나 특정 연산과 무관한 부분의 중복 연산을 피하여 더 빠르고 더 효율적 인 연산 방법을 도출한다.
3.2 그래프, 세션, 페치 텐서플로의 동작은 그래프를 (1 ) 만들고 (2 ) 실행하는 두 단계로 크게 나눌 수 있다. 첫 예제 로 아주 기본적인 연산 그래프를 구성해보자(䵌䵱䵪䵹䵽䵮䵻䴼䴷䵲䵹䶂䵷䵫 ).1
3.2.1 그래프 만들기 䵲䵶䵹䵸䵻䵽 䵽䵮䵷䵼䵸䵻䵯䵵䵸䶀 䵪䵼 䵽䵯 구문으로 텐서플로를 임포트하면 그 시점에 비어 있는 기본 그래
프가 만들어지며 우리가 만드는 모든 노드는 이 기본 그래프에 자동으로 연결된다. 䵽䵯䴷䵅䵸䵹䵮䵻䵪䵽䵸䵻 䵇 메서드를 사용해서 임의로 명명된 변수에 할당된 6개의 노드를 만들 것이다.
이 변수의 값은 연산의 출력으로 간주된다. 일단 여기서는 연산과 출력 모두를 해당 변수의 이 름으로 참조하겠다. 첫 세 노드는 상수 값을 출력한다. 䵪, 䵫, 䵬 각각에 䴾, 䴻, 䴼을 대입한다. 䵪 䵆 䵽䵯䴷䵬䵸䵷䵼䵽䵪䵷䵽䴱䴾䴲 䵫 䵆 䵽䵯䴷䵬䵸䵷䵼䵽䵪䵷䵽䴱䴻䴲 䵬 䵆 䵽䵯䴷䵬䵸䵷䵼䵽䵪䵷䵽䴱䴼䴲
다음 세 개의 각 노드는 이미 만든 두 개의 변수를 입력으로 사용해 간단한 계산 연산을 수행한다. 䵭 䵆 䵽䵯䴷䵶䵾䵵䵽䵲䵹䵵䶂䴱䵪䴵䵫䴲 䵮 䵆 䵽䵯䴷䵪䵭䵭䴱䵬䴵䵫䴲 䵯 䵆 䵽䵯䴷䵼䵾䵫䵽䵻䵪䵬䵽䴱䵭䴵䵮䴲
노드 䵭는 노드 䵪와 䵫의 출력값을 곱하고, 노드 䵮는 노드 䵫와 䵬의 출력값을 더한다. 노드 䵯는 노 1 옮긴이_ 몇몇 챕터의 예제는 하나의 파이썬 노트북 형식으로 작성되었으므로 주피터 노트북 등으로 열어서 봐야 한다. 주피터 노트북은 䵹䵲䵹䴼 䵲䵷䵼䵽䵪䵵䵵 䵳䵾䵹䶂䵽䵮䵻(파이썬 2.x의 경우 䵹䵲䵹䴼 대신 䵹䵲䵹)로 설치할 수 있고, 䵳䵾䵹䶂䵽䵮䵻 䵷䵸䵽䵮䵫䵸䵸䵴 명령으로 실행한다.
3장 텐서플로의 기본 이해하기
43
드 䵭의 출력값에서 노드 䵮의 출력값을 뺀다. 이걸로 끝이다! 첫 번째 텐서플로 그래프가 만들어졌다. [그림 3-2]는 방금 만든 그래프를 보 여준다.
그림 3-2 첫 그래프. 소문자로 표시된 각 노드는 노드 위에 표시된 연산을 수행한다. Const는 상수를 생성하는 연산이 며 더하기, 곱하기, 빼기는 각각 Add, Mul, Sub로 표시했다. 각 변 옆의 숫자는 대응되는 노드의 연산 결과이다.
일부 계산 및 논리 연산의 경우 䵽䵯䴷䵅䵸䵹䵮䵻䵪䵽䵸䵻 䵇를 사용하는 대신 축약형 연산자를 사용할 수 있다. 예를 들어 이 그래프에서 䵽䵯䴷䵶䵾䵵䵽䵲䵹䵵䶂 䴱 䴲, 䵽䵯䴷䵪䵭䵭 䴱 䴲, 䵽䵯䴷䵼䵾䵫䵽䵻䵪䵬䵽 䴱 䴲 대신 䴳, 䴴, 䴶를 사용할 수 있다(바로 2장의 ‘hello world’ 예제에서 䵽䵯䴷䵪䵭䵭 䴱 䴲 대신 䴴를 사용했다). [표 3-1] 은 사용 가능한 축약형 연산자의 목록이다.
표 3-1 흔히 사용되는 텐서플로 연산과 축약형 연산자 2 3 텐서플로 연산
축약형 연산자
설명
䵽䵯䴷䵪䵭䵭䴱䴲
䵪 䴴 䵫
대응되는 원소끼리2 䵪와 䵫를 더한다.
䵽䵯䴷䵶䵾䵵䵽䵲䵹䵵䶂䴱䴲
䵪 䴳 䵫
대응되는 원소끼리 䵪와 䵫를 곱한다.
䵽䵯䴷䵼䵾䵫䵽䵻䵪䵬䵽䴱䴲
䵪 䴶 䵫
대응되는 원소끼리 䵪에서 䵫를 뺀다.
䵽䵯䴷䵭䵲䵿䵲䵭䵮䴱䴲
䵪 䴸 䵫
파이썬 3.x의 방식으로 䵪를 䵫로 나눈다.3
䵽䵯䴷䵹䵸䶀䴱䴲
䵪 䴳䴳 䵫
대응되는 원소끼리 䵪의 䵫의 제곱을 계산한다.
2 옮긴이_ 䵪䴵 䵫가 항상 상수인 것은 아니다. 텐서 간의 연산도 가능하다. 3 옮긴이_ 목록에 없는 또 다른 나누기 연산인 䵽䵯䴷䵭䵲䵿䴱䴲는 파이썬 䴻䴷䶁의 방식으로 나눈다. 예를 들어 䵽䵯䴷䵭䵲䵿䴱䴾䴵 䴻䴲의 결과는 2, 䵽䵯䴷䵭䵲䵿䵲䵭䵮䴱䴾䴵 䴻䴲의 결과는 䴻䴷䴾가 나올 것이다.
44
러닝 텐서플로
CHAPTER
4
합성곱 신경망
이 장에서는 합성곱 신경망convolutional neural network (CNN )과 이와 관련된 구성 요소 및 메서드를 소 개한다. 먼저 MNIST 데이터의 분류를 위한 간단한 모델에 합성곱 신경망을 적용해보고, 객체 인식에 사용되는 CIFAR10 데이터를 소개한 후 여러 개의 합성곱 신경망 모델을 적용해볼 것 이다. 이 장의 합성곱 신경망 모델은 작고 빠르지만 객체 인식 작업에서 최첨단의 결과를 얻는 데 실제로 사용되는 모델의 대표적인 유형이다.
4.1 CNN 소개 합성곱 신경망은 특히 전망이 좋은 딥러닝으로 지난 몇 년간 특별한 위치를 차지해왔다. 이미 지 처리에서 파생된 합성곱 계층은 사실상 모든 딥러닝의 일부분으로 들어갔으며 대부분의 경 우 매우 성공적이었다. 완전 연결fully connected 신경망과 합성곱convolution 신경망 간의 근본적인 차이점은 이어지는 계층 간
의 연결 패턴이다. 완전 연결 신경망은 이름에서 알 수 있듯 각각의 유닛은 앞의 계층의 모든 유닛과 연결되어 있다. 이 예를 2장에서 보았는데, 10개의 출력 유닛이 입력 이미지 픽셀 모두 에 연결되어 있었다. 반면 합성곱 계층에서 각각의 유닛은 이전 계층에서 근접해 있는 몇 개의 (보통은 작은 수의) 유닛들에만 연결된다. 게다가 모든 유닛은 이전 계층에 동일한 방법으로 연결되어 같은 값의
4장 합성곱 신경망
73
가중치와 구조를 공유한다. 이 사이에 합성곱convolution이라는 연산이 들어 있어(그림 4-1 ), 이 신경망을 합성곱 신경망이라 부른다. 다음 절에서 합성곱 연산에 대해서 좀 더 자세히 알아보 겠지만, 간단히 말해 뒤에 나올 [그림 4-2]에 묘사된 것처럼 이미지 전체에 가중치의 작은 윈도 window
(필터filter라고도 부름)를 적용한다는 뜻이다.
완전 연결 계층
합성곱 계층
그림 4-1 완전 연결 계층(왼쪽)에서 각 유닛은 이전 계층의 모든 유닛에 연결된다. 합성곱 계층(오른쪽)에서는 각각의 유 닛은 이전 계층의 모여 있는 일정한 수의 유닛에 연결된다. 또한 합성곱 계층에서는 연결선의 종류에서 보이듯 연결의 가중치를 유닛 모두가 공유한다.
CNN이 도입된 배경으로는 동기에 따라 여러 가지 설명이 언급된다. 첫 번째는 모델 뒤에 숨어 있는 소위 신경과학적 영감이다. 두 번째는 이미지의 본질에 대한 통찰과 관련이 있으며, 세 번 째는 학습 이론에 관한 것이다. 실제 구조로 들어가기 전 이들 각각을 살펴보자. 신경망을 설명할 때, 특히 합성곱 신경망을 설명할 때는 생물학에서 영감을 받은 계산 모델로 설명하는 것이 일반적이다. 때로 뇌가 연산을 수행하는 방법을 흉내 낸 것이라고 주장하기까지 한다. 액면 그대로 받아들이면 오해의 여지가 있지만 생물학적 비유는 꽤나 흥미롭다. 노벨상 수상자인 신경생리학자 데이비드 허블과 토르스텐 비셀1은, 1960년대 초반에 뇌의 시 각 처리의 첫 단계가 눈으로 보는 모든 영역에 동일한 필터(예를 들어 가장자리를 찾는 필터) 를 적용하는 것으로 이루어져 있음을 밝혀냈다. 현재 신경과학 커뮤니티에서 이해하는 바로는 시각 처리가 이루어짐에 따라 정보는 입력의 좀 더 넓은 부분으로 증가해가며 통합되고 이는 계층적으로 이루어진다.
1 옮긴이_ 둘은 대뇌 반구의 기능과 시각 정보 처리에 대한 연구로 로저 울컷 스페리와 함께 1981년 노벨 생리의학상을 수상하였다.
74
러닝 텐서플로
CHAPTER
5
텍스트 1: 텍스트와 시퀀스 처리 및 텐서보드 시각화
이번 장에서는 텐서플로에서 시퀀스sequence, 특히 텍스트를 어떻게 다루는지를 보여준다. 우선 순환신경망recurrent neural network (RNN )을 소개하는데, 이는 자연어처리natural language processing (NLP ) 에 특히 유용하고 널리 사용되는 강력한 종류의 딥러닝 알고리즘이다. RNN 모델을 밑바닥부 터 구현하는 방법을 살펴보고, 몇 가지 중요한 텐서플로 기능을 도입할 것이며, 대화형 텐서보 드로 모델을 시각화해볼 것이다. 이어서 단어 임베딩 학습word-embedding training과 함께, 지도 학 습을 사용한 텍스트 분류에 RNN을 사용하는 방법을 탐구한다. 마지막으로 LSTMlong short-term memory1
네트워크를 적용한 고급 RNN 모델을 만드는 방법과 가변 길이의 시퀀스를 다루는 방
법을 다루겠다.
5.1 시퀀스 데이터의 중요성 앞 장에서 이미지의 공간 구조를 사용하여 뛰어난 결과를 보여주는 고급 모델을 만들 수 있음 을 알았고, 구조를 활용하는 것이 매우 중요하다는 교훈을 얻었다. 곧 보게 되겠지만 순차형 sequential
구조 또한 매우 중요하고 유용한 유형의 구조다. 데이터 과학의 측면에서 생각해보면
순차형 구조는 모든 도메인의 많은 데이터에서 찾을 수 있다. 컴퓨터 비전에서 동영상은 시간 의 흐름에 따른 순차적인 시각 콘텐츠이다. 음성에서는 오디오 신호가, 유전체학에서는 유전자
1 옮긴이_ ‘장기-단기 기억’으로 번역하기도 한다.
5장 텍스트 1: 텍스트와 시퀀스 처리 및 텐서보드 시각화
95
서열이 그러하다. 헬스케어 분야에서의 장기간에 걸친 진료 기록이나 주식시장의 재무 데이터 등도 그러하다(그림 5-1 ).
시간에 따른 회사 실적
오디오 신호
그림 5-1 어디에나 있는 시퀀스 데이터
강한 순차형 구조를 가지는 특히 중요한 유형의 데이터는 자연어, 즉 텍스트 데이터이다. 글자, 단어, 문장, 단락, 문서와 같은 텍스트에 내재된 순차형 구조를 활용하는 딥러닝 방법은 자연어 이해natural language understanding (NLU )의 최전방에 있으며 기존에 사용되던 방법들을 역사의 뒤안 길로 보내고 있다. 문서 분류부터 강력한 언어 모델을 구축하는 것까지, 질문에 자동으로 답하 는 것부터 인간 수준의 대화형 에이전트를 만드는 것까지 자연어이해를 통해 해결해야 할 많은 종류의 문제가 있다. 이러한 작업은 난도가 꽤 높아서 학계와 업계 양측 인공지능 커뮤니티 전 체의 노력과 관심이 집중되고 있다. 이 장에서는 기본 구성 요소 및 작업에 중점을 두고 텐서플로에서 시퀀스, 주로 텍스트를 다루 는 방법을 보여준다. 깊은 이해가 가능하도록 텐서플로의 시퀀스 모델의 핵심 요소에 대해서 자세히 살펴보고 그중 일부를 밑바닥부터 구현해볼 것이다. 다음 6장에서는 텐서플로를 사용 한 더 발전된 텍스트 모델링 기법을 보여주며, 7장에서는 더 간단하면서도 고수준으로 모델을 구현할 수 있는 추상화 라이브러리를 사용해볼 것이다. 시퀀스(특히 텍스트)를 다루는 데 가장 중요하고 또 대중적인 딥러닝 모델인 RNN에서 시작 해보자.
96
러닝 텐서플로
APPENDIX
A
모델 구축과 텐서플로 서빙 사용에 관한 팁
A.1 모델 구조화 및 사용자 정의 이 절에서는 이 책에서 계속 다뤄오며 확장한 두 가지 주제에 초점을 맞춘다. 하나는 적당한 모 델을 구성하는 방법, 다른 하나는 모델의 각 구성 요소를 사용자 정의customize하는 방법이다. 먼 저 캡슐화를 통해서 코드를 효과적으로 재구성하고 변수를 공유하고 재사용하는 방법을 설명 한다. 이어서 손실 함수와 연산을 사용자 정의하고 최적화에 이를 이용하는 방법을 다룬다.
A.1.1 모델 구조화 텐서플로 코드를 효율적으로 설계하면 이를 여러 작업에 재사용하거나 주위에서 코드를 이해 하거나 주위에 전파하기도 쉽다. 7장에서 설명했듯 텐서플로 확장 라이브러리의 사용도 이를 위한 좋은 선택 중 하나이다. 하지만 전형적인 네트워크에서는 확장 라이브러리의 사용성이 매 우 뛰어날지 몰라도 구현하고자 하는 새로운 구성 요소가 필요한 모델의 경우 텐서플로의 저수 준 환경을 유연하게 사용해야 할 수도 있다. 앞에서 다뤘던 최적화 코드를 들여다보자. 䵲䵶䵹䵸䵻䵽 䵽䵮䵷䵼䵸䵻䵯䵵䵸䶀 䵪䵼 䵽䵯 䵲䵶䵹䵸䵻䵽 䵷䵾䵶䵹䶂 䵪䵼 䵷䵹 䶁䵨䵭䵪䵽䵪 䵆 䵷䵹䴷䵻䵪䵷䵭䵸䵶䴷䵻䵪䵷䵭䵷䴱䴻䴹䴹䴹䴵䴼䴲
부록 A 모델 구축과 텐서플로 서빙 사용에 관한 팁
259
䶀䵨䵻䵮䵪䵵 䵆 䵤䴹䴷䴼䴵䴹䴷䴾䴵䴹䴷䴺䵦 䵫䵨䵻䵮䵪䵵 䵆 䴶䴹䴷䴻 䵷䵸䵲䵼䵮 䵆 䵷䵹䴷䵻䵪䵷䵭䵸䵶䴷䵻䵪䵷䵭䵷䴱䴺䴵䴻䴹䴹䴹䴲 䴳 䴹䴷䴺 䶂䵨䵭䵪䵽䵪 䵆 䵷䵹䴷䵶䵪䵽䵶䵾䵵 䴱䶀䵨䵻䵮䵪䵵䴵 䶁䵨䵭䵪䵽䵪䴷䵝䴲 䴴 䵫䵨䵻䵮䵪䵵 䴴 䵷䵸䵲䵼䵮 䵗䵞䵖䵨䵜䵝䵎䵙䵜 䵆 䴺䴹 䵰 䵆 䵽䵯䴷䵐䵻䵪䵹䵱䴱䴲 䶀䵫䵨 䵆 䵤䵦 䶀䵲䵽䵱 䵰䴷䵪䵼䵨䵭䵮䵯䵪䵾䵵䵽䴱䴲䵃 䶁 䵆 䵽䵯䴷䵹䵵䵪䵬䵮䵱䵸䵵䵭䵮䵻䴱䵽䵯䴷䵯䵵䵸䵪䵽䴼䴻䴵䵼䵱䵪䵹䵮䵆䵤䵗䵸䵷䵮䴵䴼䵦䴲 䶂䵨䵽䵻䵾䵮 䵆 䵽䵯䴷䵹䵵䵪䵬䵮䵱䵸䵵䵭䵮䵻䴱䵽䵯䴷䵯䵵䵸䵪䵽䴼䴻䴵䵼䵱䵪䵹䵮䵆䵗䵸䵷䵮䴲 䶀䵲䵽䵱 䵽䵯䴷䵷䵪䵶䵮䵨䵼䵬䵸䵹䵮䴱䴰䵲䵷䵯䵮䵻䵮䵷䵬䵮䴰䴲 䵪䵼 䵼䵬䵸䵹䵮䵃 䶀 䵆 䵽䵯䴷䵟䵪䵻䵲䵪䵫䵵䵮䴱䵤䵤䴹䴵䴹䴵䴹䵦䵦䴵䵭䵽䶂䵹䵮䵆䵽䵯䴷䵯䵵䵸䵪䵽䴼䴻䴵䵷䵪䵶䵮䵆䴰䶀䵮䵲䵰䵱䵽䵼䴰䴲 䵫 䵆 䵽䵯䴷䵟䵪䵻䵲䵪䵫䵵䵮䴱䴹䴵䵭䵽䶂䵹䵮䵆䵽䵯䴷䵯䵵䵸䵪䵽䴼䴻䴵䵷䵪䵶䵮䵆䴰䵫䵲䵪䵼䴰䴲 䶂䵨䵹䵻䵮䵭 䵆 䵽䵯䴷䵶䵪䵽䵶䵾䵵䴱䶀䴵䵽䵯䴷䵽䵻䵪䵷䵼䵹䵸䵼䵮䴱䶁䴲䴲 䴴 䵫 䶀䵲䵽䵱 䵽䵯䴷䵷䵪䵶䵮䵨䵼䵬䵸䵹䵮䴱䴰䵵䵸䵼䵼䴰䴲 䵪䵼 䵼䵬䵸䵹䵮䵃 䵵䵸䵼䵼 䵆 䵽䵯䴷䵻䵮䵭䵾䵬䵮䵨䵶䵮䵪䵷䴱䵽䵯䴷䵼䵺䵾䵪䵻䵮䴱䶂䵨䵽䵻䵾䵮䴶䶂䵨䵹䵻䵮䵭䴲䴲 䶀䵲䵽䵱 䵽䵯䴷䵷䵪䵶䵮䵨䵼䵬䵸䵹䵮䴱䴰䵽䵻䵪䵲䵷䴰䴲 䵪䵼 䵼䵬䵸䵹䵮䵃 䵵䵮䵪䵻䵷䵲䵷䵰䵨䵻䵪䵽䵮 䵆 䴹䴷䴾 䵸䵹䵽䵲䵶䵲䶃䵮䵻 䵆 䵽䵯䴷䵽䵻䵪䵲䵷䴷䵐䵻䵪䵭䵲䵮䵷䵽䵍䵮䵼䵬䵮䵷䵽䵘䵹䵽䵲䵶䵲䶃䵮䵻䴱䵵䵮䵪䵻䵷䵲䵷䵰䵨䵻䵪䵽䵮䴲 䵽䵻䵪䵲䵷 䵆 䵸䵹䵽䵲䵶䵲䶃䵮䵻䴷䵶䵲䵷䵲䵶䵲䶃䵮䴱䵵䵸䵼䵼䴲
䵲䵷䵲䵽 䵆 䵽䵯䴷䵰䵵䵸䵫䵪䵵䵨䵿䵪䵻䵲䵪䵫䵵䵮䵼䵨䵲䵷䵲䵽䵲䵪䵵䵲䶃䵮䵻䴱䴲 䶀䵲䵽䵱 䵽䵯䴷䵜䵮䵼䵼䵲䵸䵷䴱䴲 䵪䵼 䵼䵮䵼䵼䵃 䵼䵮䵼䵼䴷䵻䵾䵷䴱䵲䵷䵲䵽䴲 䵯䵸䵻 䵼䵽䵮䵹 䵲䵷 䵻䵪䵷䵰䵮䴱䵗䵞䵖䵨䵜䵝䵎䵙䵜䴲䵃 䵼䵮䵼䵼䴷䵻䵾䵷䴱䵽䵻䵪䵲䵷䴵䶄䶁䵃 䶁䵨䵭䵪䵽䵪䴵 䶂䵨䵽䵻䵾䵮䵃 䶂䵨䵭䵪䵽䵪䶆䴲 䵲䵯 䴱䵼䵽䵮䵹 䴮 䴾 䵆䵆 䴹䴲䵃 䵹䵻䵲䵷䵽䴱䵼䵽䵮䵹䴵 䵼䵮䵼䵼䴷䵻䵾䵷䴱䵤䶀䴵䵫䵦䴲䴲 䶀䵫䵨䴷䵪䵹䵹䵮䵷䵭䴱䵼䵮䵼䵼䴷䵻䵾䵷䴱䵤䶀䴵䵫䵦䴲䴲 䵹䵻䵲䵷䵽䴱䴺䴹䴵 䵼䵮䵼䵼䴷䵻䵾䵷䴱䵤䶀䴵䵫䵦䴲䴲
다음이 출력된다. 䴹 䵤䵪䵻䵻䵪䶂䴱䵤䵤䴹䴷䴻䵂䴽䵂䴺䴹䵁 䴵 䴹䴷䴾䴹䴿䴽䴺䴿䴽 䴵 䴹䴷䴹䵀䴿䵂䴽䴽䵂䴼䵦䵦䴵 䵭䵽䶂䵹䵮䵆䵯䵵䵸䵪䵽䴼䴻䴲䴵 䴶䴹䴷䴺䵂䴾䴼䴺䴾䵁䴾䵦 䴾 䵤䵪䵻䵻䵪䶂䴱䵤䵤䴹䴷䴼䴹䴺䴻䴿䵀䴼䴼䴵 䴹䴷䴾䴹䴹䴼䴻䵁䴼 䴵 䴹䴷䴺䴹䴺䴻䴻䴻䴽䵂䵦䵦䴵 䵭䵽䶂䵹䵮䵆䵯䵵䵸䵪䵽䴼䴻䴲䴵 䴶䴹䴷䴻䴹䴺䴻䴽䴺䵂䴼䵦
260 러닝 텐서플로
APPENDIX
B
한국어판 부록: 텐서플로 1.7의 contrib. learn 폐기
2018년 3월 말 텐서플로 1.7.0이 릴리즈되면서 생긴 여러 변경점 가운데 이 책과 관련하여 가 장 큰 변경점은 7장의 주요 내용 중 하나인 䵬䵸䵷䵽䵻䵲䵫䴷䵵䵮䵪䵻䵷이 폐기deprecated 상태로 바뀌었다는 것이다. 이는 䵬䵸䵷䵽䵻䵲䵫䴷䵵䵮䵪䵻䵷에 포함된 많은 기능이 이제 굳이 ‘䵬䵸䵷䵽䵻䵲䵫’을 붙이지 않아도 될 만큼 성숙했기 때문으로 보인다. 이 변화에 따라 텐서플로는 䵬䵸䵷䵽䵻䵲䵫䴷䵵䵮䵪䵻䵷으로 작성된 기존 코드를 어떻게 바꿔야 할지를 가 이드하고 있다. 이 가이드 중 책의 본문과 관련된 부분만 일부 소개한다. ●
䵬䵸䵷䵽䵻䵲䵫 䴷 䵵䵮䵪䵻䵷 에 포함된 추정자 대부분이 䵽䵯 䴷 䵬䵸䵷䵽䵻䵲䵫 䴷 䵵䵮䵪䵻䵷 에서 䵽䵯 䴷 䵮䵼䵽䵲䵶䵪䵽䵸䵻
로 옮겨졌다. 단 䵍䵗䵗䵎䵼䵽䵲䵶䵪䵽䵸䵻, 䵕䵲䵷䵮䵪䵻䵎䵼䵽䵲䵶䵪䵽䵸䵻, 䵍䵗䵗䵕䵲䵷䵮䵪䵻䵌䵸䵶䵫䵲䵷䵮䵭䵎䵼䵽䵲䵶䵪䵽䵸䵻 는 䵽䵯 䴷 䵬䵸䵷䵽䵻䵲䵫 䴷 䵮䵼䵽䵲䵶䵪䵽䵸䵻 에서 찾을 수 있다. 이에 따라 䵽䵯 䴷 䵬䵸䵷䵽䵻䵲䵫 䴷 䵵䵮䵪䵻䵷 대신 䵽䵯䴷䵮䵼䵽䵲䵶䵪䵽䵸䵻를, 䵽䵯䴷䵬䵸䵷䵽䵻䵲䵫䴷䵵䵮䵪䵻䵷䴷䵎䵼䵽䵲䵶䵪䵽䵸䵻 대신 䵽䵯䴷䵮䵼䵽䵲䵶䵪䵽䵸䵻䴷䵎䵼䵽䵲䵶䵪䵽䵸䵻를 사
용하자. ●
䵲䵷䵹䵾䵽䵨䵯䵷 인수의 레이블의 형태를 변경하려면 䵽䵯䴷䵻䵮䵼䵱䵪䵹䵮를 사용하자. 䵽䵯䴷䵻䵮䵼䵱䵪䵹䵮를 사
용한 예는 4장 MNIST CNN 예제에서 찾을 수 있다. ●
[표 7-1]의 추정자 중 䵕䵸䵰䵲䵼䵽䵲䵬䵛䵮䵰䵻䵮䵼䵼䵸䵻는 사라질 예정이다. 대신 사용자 정의 䵶䵸䵭䵮䵵䵨 䵯䵷을 사용한 䵫䵲䵷䵪䵻䶂䵨䵬䵵䵪䵼䵼䵲䵯䵲䵬䵪䵽䵲䵸䵷䵨䵱䵮䵪䵭나 䵍䵗䵗䵎䵼䵽䵲䵶䵪䵽䵸䵻를 사용하자.
●
䵽䵯 䴷 䵬䵸䵷䵽䵻䵲䵫 䴷 䵵䵮䵪䵻䵷 䴷 䵭䵪䵽䵪䵼䵮䵽䵼 도 폐기된다. 책에 이 모듈 자체가 사용되지는 않지만
MNIST를 포함한 많은 데이터 유틸리티가 이 모듈을 사용한다(책의 MNIST 관련 예
부록 B 한국어판 부록: 텐서플로 1.7의 contrib.learn 폐기
279
제를 실행하면 나오는 수많은 경고는 이 때문이다). 현재 텐서플로 모델 깃허브 저장소 (䵱䵽䵽䵹䵼䵃䴸䴸䵰䵲䵽䵱䵾䵫䴷䵬䵸䵶䴸䵽䵮䵷䵼䵸䵻䵯䵵䵸䶀䴸䵶䵸䵭䵮䵵䵼 )에서 MNIST, CIFAR10 등 주요 데이터셋 을 제공하며 그 외 데이터셋은 사이킷런 등 다른 도구가 제공하는 것을 사용하면 된다. 다시 한번 이야기하지만 위의 가이드 내용 소개는 이 책과 관련된 부분만 발췌하였다. 전체 가 이드는 공식 문서를 참조하자(䵱䵽䵽䵹䵼䵃䴸䴸䵰䵲䵽䵱䵾䵫䴷䵬䵸䵶䴸䵽䵮䵷䵼䵸䵻䵯䵵䵸䶀䴸䵽䵮䵷䵼䵸䵻䵯䵵䵸䶀䴸䵫䵵䵸䵫䴸䵻䴺䴷䵀䴸 䵽䵮䵷䵼䵸䵻䵯䵵䵸䶀䴸䵬䵸䵷䵽䵻䵲䵫䴸䵵䵮䵪䵻䵷䴸䵛䵎䵊䵍䵖䵎䴷䵶䵭 ).
280 러닝 텐서플로
INDEX 주 요 텐 서 플 로 구 성 요 소
䵽䵯䴷䵽䵻䵪䵲䵷䴷䵻䵮䵹䵵䵲䵬䵪䵨䵭䵮䵿䵲䵬䵮䵨䵼䵮䵽䵽䵮䵻䴱䴲
䵽䵯䴷䵅䵸䵹䵮䵻䵪䵽䵸䵻䵇 ̰ѷȝ
䵽䵯䴷䵽䵻䵪䵲䵷䴷䵜䵪䵿䵮䵻䴱䴲
䵽䵯䴷䵪䵭䵭䴱䴲
43, 51, 55
䵽䵯䴷䵽䵻䵪䵲䵷䴷䵼䵱䵾䵯䵯䵵䵮䵨䵫䵪䵽䵬䵱䴱䴲
44
䵽䵯䴷䵪䵹䵹䴷䵯䵵䵪䵰䵼
䵽䵯䴷䵪䵹䵹䴷䵯䵵䵪䵰䵼䴷䵏䵕䵊䵐䵜 䵽䵯䴷䵬䵪䵼䵽䴱䴲
218
䵽䵯䴷䵽䵻䵪䵷䵼䵹䵸䵼䵮䴱䴲
䵽䵯䴷䵬䵸䵷䵽䵻䵲䵫䴷䵻䵷䵷䴷䵋䵪䵼䵲䵬䵕䵜䵝䵖䵌䵮䵵䵵䴱䴲 䵽䵯䴷䵬䵸䵷䵽䵻䵲䵫䴷䵻䵷䵷䴷䵋䵪䵼䵲䵬䵛䵗䵗䵌䵮䵵䵵
120
60, 263
47
䵽䵯䴷䵵䵲䵷䵼䵹䵪䵬䵮䴱䵪䴵 䵫䴵 䵷䴲 䵽䵯䴷䵶䵪䵹䵨䵯䵷䴱䴲
55
57
䵽䵯䴷䵷䵷䴷䵷䵬䵮䵨䵵䵸䵼䵼䴱䴲
112, 116, 120 119, 134
54
그래프 간 복제
䵽䵯䴷䵛䵪䵷䵭䵸䵶䵜䵱䵾䵯䵯䵵䵮䵚䵾䵮䵾䵮
208
64
䵽䵯䴷䵻䵮䵼䵮䵽䵨䵭䵮䵯䵪䵾䵵䵽䵨䵰䵻䵪䵹䵱䴱䴲
꼭짓점
242
단어 임베딩
119
더미 인코딩
162 217
데이터 흐름 그래프
45
도커
165
䵽䵯䴷䵼䵾䵶䵶䵪䵻䶂䴷䵱䵲䵼䵽䵸䵰䵻䵪䵶䴱䴲
동기식
110
두목
211
䵽䵯䴷䵽䵻䵪䵲䵷䴷䵮䶁䵹䵸䵷䵮䵷䵽䵲䵪䵵䵨䵭䵮䵬䵪䶂䴱䴲
135
䵽䵯䴷䵽䵻䵪䵲䵷䴷䵲䵶䵹䵸䵻䵽䵨䵶䵮䵽䵪䵨䵰䵻䵪䵹䵱䴱䴲
244
265
277 217
221
드롭아웃
207
19
247, 277
도커파일
64
䵽䵯䴷䵽䵻䵪䵲䵷䴷䵚䵾䵮䵾䵮䵛䵾䵷䵷䵮䵻
130
41
데커레이터
䵽䵯䴷䵽䵻䵪䵲䵷䴷䵌䵸䵸䵻䵭䵲䵷䵪䵽䵸䵻
120
41
데이터 병렬화
102, 103
䵽䵯䴷䵝䵏䵛䵮䵬䵸䵻䵭䵛䵮䵪䵭䵮䵻䴱䴲
220
기억 메커니즘
노드
54
䵽䵯䴷䵜䵹䵪䵻䵼䵮䵝䵮䵷䵼䵸䵻䴱䴲
146
37, 64
네거티브 샘플링
135
䵽䵯䴷䵻䵪䵷䵭䵸䵶䴷䵷䵸䵻䵶䵪䵵䴱䴲
䵽䵯䴷䵻䵮䵭䵾䵬䵮䵨䵶䵮䵪䵷䴱䴲
37, 64
247
균등분포
䵽䵯䴷䵷䵷䴷䵮䵶䵫䵮䵭䵭䵲䵷䵰䵨䵵䵸䵸䵴䵾䵹䴱䴲
263
41
교차 엔트로피
䵽䵯䴷䵷䵷䴷䵭䶂䵷䵪䵶䵲䵬䵨䵻䵷䵷䴱䴲
䵽䵯䴷䵼䵺䵾䵪䵻䵮䴱䴲
42
관리자
䵽䵯䴷䵷䵷䴷䵫䵲䵭䵲䵻䵮䵬䵽䵲䵸䵷䵪䵵䵨䵭䶂䵷䵪䵶䵲䵬䵨䵻䵷䵷䴱䴲
䵽䵯䴷䵜䵮䵼䵼䵲䵸䵷
272
간접적 의존
경사 하강법
55
104
䵽䵯䴷䵶䵪䵽䵶䵾䵵䴱䵊䴵䵋䴲
䵽䵯䴷䵼䵬䵪䵷䴱䴲
60, 147
가중치 감소
개체
䵽䵯䴷䵒䵷䵽䵮䵻䵪䵬䵽䵲䵿䵮䵜䵮䵼䵼䵲䵸䵷䴱䴲
112
ㄱ ~ ㄷ
䵽䵯䴷䵰䵵䵸䵫䵪䵵䵨䵿䵪䵻䵲䵪䵫䵵䵮䵼䵨䵲䵷䵲䵽䵲䵪䵵䵲䶃䵮䵻䴱䴲 䵽䵯䴷䵐䵻䵪䵹䵱䴱䴲
263
124
57, 193
䵽䵯䴷䵰䵮䵽䵨䵿䵪䵻䵲䵪䵫䵵䵮䵼䴱䴲
䵽䵯䴷䶀䵱䵲䵵䵮䵨䵵䵸䵸䵹
䵽䵯䴷䶃䵮䵻䵸䵼䵨䵲䵷䵲䵽䵲䵪䵵䵲䶃䵮䵻䴱䴲
112
䵽䵯䴷䵬䵸䵷䵽䵻䵲䵫䴷䵻䵷䵷䴷䵖䵾䵵䵽䵲䵛䵗䵗䵌䵮䵵䵵䴱䴲 䵽䵯䴷䵮䶁䵹䵪䵷䵭䵨䵭䵲䵶䵼䴱䴲
59, 263
䵽䵯䴷䵿䵪䵻䵲䵪䵫䵵䵮䵨䵼䵬䵸䵹䵮䴷䵻䵮䵾䵼䵮䵨䵿䵪䵻䵲䵪䵫䵵䵮䴱䴲
43, 50
210
57
䵽䵯䴷䵟䵪䵻䵲䵪䵫䵵䵮䴱䴲
147
䵽䵯䴷䵬䵸䵷䵼䵽䵪䵷䵽䴱䴲
212
䵽䵯䴷䵽䵻䵪䵲䵷䴷䵼䵽䵻䵲䵷䵰䵨䵲䵷䵹䵾䵽䵨䵹䵻䵸䵭䵾䵬䵮䵻䴱䴲
52
䵽䵯䴷䵬䵸䵷䵬䵪䵽䴱䴲
211
䵽䵯䴷䵽䵻䵪䵲䵷䴷䵼䵽䵪䵻䵽䵨䵺䵾䵮䵾䵮䵨䵻䵾䵷䵷䵮䵻䵼䴱䴲
218
220, 229
239
79
디바이스 배치
221
208
찾아보기
285
INDEX ㄹ ~ ㅂ
절단정규분포
로더
정규분포
247
매개변수 서버 맷플롯립
반복
115
조기 정지
63
미니배치
75
제로 패딩
88
목적 함수
밀집된
정규화
219
주성분
65
180 181
지도 학습
178
36
지역 응답 정규화(LRN)
174
변수 객체
59
직렬화
분포 가설
129
직접적 의존
불변성
빌드
추상화
217
42
축소
238
149
추정자
275
172
242
체크포인트 파일
75
비동기식
54
54
153 61
ㅅ ~ ㅇ 서버블
ㅋ ~ ㅎ
247
선형
155
컨테이너
소스
247
케라스
소스 연산
텐서
51
소프트맥스 회귀 손실 함수
31
스킵-그램
97
129
시그모이드 함수
53
텐서 객체
53
텐서보드
37, 63
순환 신경망(RNN)
277 176
69
21
텐서플로 서빙
76
팬더스
163
시애노
153
평가
154
식별자
117
풀링
79
예측
완전 연결 워커 원자적 윈도 이미지
프로토버퍼
154
오토인코더
181 73
119
277
인스턴스화
154
적합
154
286 찾아보기
60
74
하이퍼파라미터
105
73, 74
합성곱 신경망(CNN) 혼동 행렬 활성화 함수
ㅈ ~ ㅊ
198, 243
플레이스홀더
합성곱
74
198, 243
프로토콜 버퍼
필터
219
246
특징 맵
160 78
73
INDEX A ~ C
G ~ K
abstraction
149
GloVe
activation function asynchronous atomic
gradient descent
78
identifier
119
between-graph replication
220
chief
indirect dependency
75
iteration
container
L ~ N
73, 74
linear
convolution neural network cross entropy
176
160
277
convolution
174
Keras
85
confusion matrix
42
154
invariance
238
221
CIFAR10
277
instantiate
275
105
117
image
181
checkpoint file
37, 64
hyperparameter
217
autoencoder
build
140
73
155
loader
247
local response normalization
37, 64
long short-term memory
D ~ F
loss function 217
LSTM
dataflow graph
19
manager
247
matplotlib
88
decorator
265
device placement
221
direct dependency
42
distributional hypothesis Docker dockerfile
41
object function Pandas
54
placeholder
154 76
pooling
79
predict
154
219
60
principal component
74
protobuf
154
fully connected
63
163
parameter server 153
feature map filter
162
180
41
estimator
fit
node
130
O ~ R
early stopping
evaluate
65
negative sampling 129
120
277 79
dummy encoding
entity
mini-batch
normal distribution
247, 277
dropout
95, 120
memory mechanism
178
95, 120
37, 63
data parallelism
dense
172
73
181
198, 243
Protocol Buffers
198, 243
찾아보기
287
INDEX recurrent neural network reduce
97
61
regularization
75
S ~ U serialization servable
242
247
sigmoid function skip-gram
69
129
softmax regression source
31
247
source operation
51
supervised learning synchronous tensor
53
Tensor
53
TensorBoard
36
217
21
TensorFlow Serving TF-Slim
187
TFLearn
171
TFRecord Theano
246
198 153
truncated normal distribution uniform distribution
54
V ~ Z Variable vertex
59 41
weight decay window
272
74
word embedding word2vec worker
119
127, 129
219
zero-padding
288 찾아보기
115
54