텐서플로로 구현하는 딥러닝과 강화학습 [초보자도 쉽게 배우는(Tensorflow v1.10 반영)]
- 원서명Deep Learning with TensorFlow: Delve into neural networks, implement deep learning algorithms, and explore layers of data abstraction with the help of this comprehensive TensorFlow guide (ISBN 9781786469786)
- 지은이잔카를로 자코네(Giancarlo Zaccone), 레자울 카림(Rezaul Karim), 아메드 멘시(Ahmed Menshawy)
- 옮긴이정사범
- ISBN : 9791161750682
- 33,000원
- 2017년 10월 30일 펴냄
- 페이퍼백 | 396쪽 | 188*235mm
- 시리즈 : acorn+PACKT
책 소개
소스 코드 파일은 여기에서 내려 받으실 수 있습니다.
본문에 쓰인 컬러 이미지는 여기에서 내려 받으세요.
요약
텐서플로를 이용해 딥러닝 프로그램을 개발하는 방법을 알려주는 소개서다. 이 책을 통해 다음과 같은 내용을 배울 수 있다.
■ 딥러닝의 역사적 발전 과정
■ 최신 텐서플로 1.3과 GPU 컴퓨팅을 이용한 딥러닝 프로그램 개발 과정
■ 텐서플로를 사용해 데이터를 로드, 처리, 변환하는 방법
■ 이미지나 텍스트를 포함한 실제 데이터 집합에 텐서플로를 사용해 CNN, RNN을 구현하는 방법
■ 딥러닝 모델의 성능을 평가하는 방법
■ 강화학습에 대한 기술적 개요 및 구현 방법
■ 케라스에 대한 개요 및 사용 방법
이 책에서 다루는 내용
■ 딥러닝의 역사적 발전 및 진보와 함께 머신 러닝에 대해 학습
■ 최신 텐서플로 1.x를 사용한 딥 머신 지능과 GPU 컴퓨팅
■ 공용 데이터 집합에 액세스하고 텐서플로를 사용한 데이터 로드, 처리 및 변형
■ 이미지, 텍스트 등을 비롯한 실제 데이터 집합에 텐서플로 사용
■ 딥러닝 모델의 성능을 평가하는 방법
■ 확장 가능한 객체 탐지 및 모바일 컴퓨팅을 위한 딥러닝 사용
■ 강화 학습 기법을 탐색해 데이터를 신속하게 학습시키는 방법
■ 딥러닝 연구와 응용의 활발한 분야 탐색
이 책의 대상 독자
개발자, 데이터 분석가 또는 복잡한 수치 계산에 대한 배경 지식이 부족하지만, 딥러닝이 무엇인지 알고 싶어하는 딥러닝 애호가를 위해 작성됐다. 이 책은 딥러닝을 통해 실제 경험을 쌓기 위한 빠른 가이드를 원하는 초보자에게 큰 도움이 될 것이다. 컴퓨터 하드웨어 및 알고리즘에 대한 기본 인식을 비롯해 컴퓨터과학 기술 및 기술에 대한 기본지식이 있는 것으로 간주돼 하나의 언어로 프로그래밍하는 초보적인 수준을 전제로 한다. 초급 선형 대수학 및 미적분학 수준의 수학 능력이 필요하다.
이 책의 구성
1장, ‘텐서플로 시작하기’에서는 2~10장에서 찾아봐야 하는 몇 가지 기본 개념에 대해 설명한다. 1장에서는 머신 러닝과 딥러닝 아키텍처에 대해 소개할 것이다. 마지막으로 소위 Deep Neural Networks라고 불리는 딥러닝 아키텍처를 소개한다. 딥러닝 아키텍처는 망의 깊이 측면에서 일반적으로 알려진 단일 은닉층 신경망과는 다르다. 즉, 패턴 인식의 다단계 프로세스에서 데이터가 통과하는 노드 계층의 수가 많다. 1장에서는 딥러닝 아키텍처에 대한 비교 분석을 한다. 여기에는 대부분의 딥러닝 알고리즘이 진화한 모든 신경 네트워크가 요약돼 있다.
2장, ‘텐서플로를 처음으로 살펴보기’에서는 텐서플로 1.x의 주요 기능 및 내용을 다룬다. 계산 그래프, 데이터 모델, 프로그래밍 모델 및 텐서보드(TensorBoard)로 시작한다. 2장의 마지막 부분에서는 단일 입력 뉴런(Single Input Neuron)을 구현해 텐서플로가 실제로 작동하는 것을 볼 수 있다. 마지막으로 텐서플로 0.x에서 텐서플로 1.x로 업그레이드하는 방법을 살펴본다.
3장, ‘피드 포워드 신경망 텐서플로 사용하기’에서는 피드 포워드 뉴럴 네트워크에 대해 자세히 설명한다. 3장은 기본 아키텍처를 사용해 많은 응용 프로그램 예제를 구현하므로 매우 실용적이다.
4장, ‘컨볼루션 신경망(Convolutional Neural Network)’에서는 딥러닝 기반 이미지 분류기의 기본 블록인 CNN 네트워크를 소개한다. CNN 네트워크의 두 가지 예를 개발해볼 것이다. 첫 번째 예제는 고전적인 MNIST 숫자 분류 문제이며, 두 번째 예제의 목적은 일련의 얼굴 이미지에 대한 네트워크를 학습해 감정적인 스트레칭을 분류하는 것이다.
5장, ‘텐서플로 오토인코더’에서는 최적화 입력 패턴을 변형하기 위해 설계하고 학습시킨 오토인코더(autoencoder) 네트워크를 설명한다. 따라서 입력 패턴의 성능 저하나 불완전한 버전이 있는 경우, 원래 패턴을 얻을 수 있다. 5장에서는 몇 가지 응용 프로그램 예제로 작동하는 오토인코더 프로그램을 볼 수 있다.
6장, ‘순환 신경망(Reverse Neural Networks)’에서는 다양한 길이의 데이터를 처리하도록 설계된 기본 아키텍처를 설명한다. 순환 신경망은 다양한 자연어 처리 작업에 널리 사용된다. 텍스트 처리 및 이미지 분류 문제는 6장에서 구현한다.
7장, ‘GPU 컴퓨팅’에서는 GPU 컴퓨팅을 위한 텐서플로 기능을 보여준다. 이 장에서는 텐서플로를 사용해 GPU를 처리하는 몇 가지 기술을 살펴본다.
8장, ‘고급 텐서플로 프로그래밍’에서는 케라스(Keras), Pretty Tensor, TFLearn 같은 텐서플로 기반 라이브러리에 대한 개요를 설명한다. 각 라이브러리에 관련된 응용 프로그램 예제를 통해 주요 기능을 설명할 것이다.
9장, ‘텐서플로를 사용한 고급 멀티미디어 프로그래밍’에서는 텐서플로를 사용해 멀티미디어 프로그래밍의 일부 고급 기술 및 새로운 측면을 다룬다. 텐서플로를 사용해 안드로이드에서 확장할 수 있는 객체 탐지 및 심층 학습을 위한 심층 신경망을 예제로 들어 설명한다. 논의를 좀 더 구체화하기 위해 예제로 가속 선형 대수(XLA)와 케라스를 논의할 것이다.
10장, ‘강화 학습(Reinforcement Learning)에서는 RL 기본 개념을 다룬다. 가장 보편적인 강화 학습 알고리즘 중 하나인 Q-learning 알고리즘을 경험할 것이다. 더욱이 텐서플로에서 사용할 수 있는 강화 학습 알고리즘을 개발하고 비교해보기 위한 툴킷인 OpenAI gym 프레임워크를 소개한다.
목차
목차
- 1장. 딥러닝 시작하기
- 머신 러닝 소개
- 지도 학습
- 비지도 학습
- 강화 학습
- 딥러닝이란 무엇인가?
- 인간의 뇌는 어떻게 작동하는가?
- 딥러닝의 역사
- 적용 분야
- 신경망
- 생물학적 뉴런
- 인공 신경 세포
- 인공 신경망은 어떻게 학습하는가?
- 역전파 알고리즘
- 가중치 최적화
- 확률적 경사 하강
- 신경망 구조
- 다층 퍼셉트론
- DNN 구조
- 컨벌루션 뉴럴 네트워크
- 제약 볼츠만 머신
- 오토인코더
- 순환 신경망
- 딥러닝 프레임워크 비교
- 요약
- 머신 러닝 소개
- 2장. 텐서플로 살펴보기
- 일반 개요
- 텐서플로 1.x의 새로운 기능은 무엇인가?
- 텐서플로는 사람들이 사용하는 방식을 어떻게 변화시켰는가?
- 텐서플로 설치 및 시작하기
- 리눅스에서 텐서플로 설치하기
- 플랫폼에 어떤 텐서플로를 설치해야 하는가?
- NVIDIA에서 GPU로 텐서플로를 실행하기 위한 필요 요건
- 단계 1: NVIDIA CUDA 설치
- 단계 2: NVIDIA cuDNN v5.1+ 설치
- 단계 3: CUDA 컴퓨팅 기능 3.0+ 이 있는 GPU 카드
- 단계 4: libcupti-dev 라이브러리 설치
- 단계 5: Python(또는 Python3) 설치
- 단계 6: PIP(또는 PIP3) 설치 및 업그레이드
- 단계 7: 텐서플로 설치
- 텐서플로 설치 방법
- pip로 텐서플로 설치하기
- virtualenv로 설치하기
- 윈도우에서 텐서플로 설치하기
- 소스를 이용해 설치하기
- 윈도우에 설치하기
- 텐서플로 설치를 테스트하기
- 계산 그래프
- 왜 계산 그래프가 중요한가?
- 계산 그래프로 신경망 표현하기
- 프로그래밍 모델
- 데이터 모델
- 랭크
- 구조
- 데이터 유형
- 변수
- 텐서 가져오기
- 피드
- 텐서보드
- 텐서보드는 어떻게 작동하는가?
- 단일 입력 뉴런 구현하기
- 단일 입력 뉴런에 대한 소스 코드
- 텐서플로 1.x로 마이그레이션
- 업그레이드 스크립트를 사용하는 방법
- 제안
- 수작업 코드 업그레이드 방법
- 변수
- 요약 함수
- 단순화한 수학 변형
- 기타 변경 사항
- 요약
- 일반 개요
- 3장. 순방향 신경망에 텐서플로 사용하기
- 순방향 신경망 소개
- 순방향 및 역전파
- 가중치와 바이어스
- 전이 함수
- 자필 숫자의 분류
- MNIST 데이터 집합 살펴보기
- 소프트맥스 분류기
- 가시화
- 텐서플로 모델을 저장하고 복구하는 방법
- 모델 저장하기
- 모델 복구하기
- 소프트맥스 소스 코드
- 소프트맥스 로더 소스 코드
- 5층 신경망 구현
- 가시화
- 5층 신경망 소스 코드
- ReLU 분류기
- 가시화
- ReLU 분류기 소스 코드
- 드롭아웃 최적화
- 가시화
- 드롭아웃 최적화를 적용한 소스 코드
- 요약
- 순방향 신경망 소개
- 4장. 컨볼루션 신경망에 텐서플로 사용하기
- CNN 소개
- 컨볼루션 뉴럴 네트워크 구조
- CNN 모델 - LeNet
- 첫 번째 CNN 구축
- 손으로 쓴 분류기의 소스 코드
- CNN으로 감정 인식하기
- 감정 분류기 소스 코드
- 여러분이 보유한 이미지로 모델 테스트하기
- 소스 코드
- 요약
- 5장. 텐서플로 오토인코더 최적화하기
- 오토인코더 소개
- 오토인코더 구현하기
- 오토인코더에 대한 소스 코드
- 오토인코더 견고성 개선하기
- 노이즈 제거 오토인코더 구축하기
- 노이즈 제거 오토인코더 소스 코드
- 컨볼루션 오토인코더
- 인코더
- 디코더
- 컨볼루션 오토인코더 소스 코드
- 요약
- 6장. RNN 순환 신경망
- RNN 기본 개념
- RNN 실행 메커니즘
- RNN의 펼쳐진 버전
- 그레이디언트 소멸 문제
- LSTM 네트워크
- RNN을 이용한 이미지 분류기
- RNN 이미지 분류 프로그램의 소스 코드
- 양방향 RNN
- 양방향 RNN 소스 코드
- 텍스트 예측
- 데이터 집합
- 혼잡도
- PTB 모델
- 예제 실행하기
- 요약
- 7장. GPU 연산
- GPGPU 연산
- GPGPU 역사
- CUDA 구조
- GPU 프로그래밍 모델
- 텐서플로 GPU 설정
- 텐서플로 업데이트
- 텐서플로 GPU 관리
- 프로그래밍 예제
- GPU 계산을 위한 소스 코드
- 프로그래밍 예제
- GPU 메모리 관리
- 복수 GPU 시스템에서 단일 GPU 할당
- 소프트 배치로 GPU에 대한 소스 코드
- 복수 GPU 사용하기
- 복수 GPU 관리를 위한 소스 코드
- 요약
- 8장. 고급 텐서플로 프로그래밍
- 케라스 소개
- 설치
- 딥러닝 모델 만들기
- 영화 평론 내용에 근거한 감정 분류
- 케라스 무비 분류 프로그램의 소스 코드
- 컨볼루션층을 추가하기
- 컨볼루션층을 갖는 영화 분류기에 대한 소스 코드
- Pretty Tensor
- 층 연결
- 일반 모드
- 순차 모드
- 분기 및 조인
- 층 연결
- 숫자 분류기
- 숫자 분류기용 소스 코드
- TFLearn
- TFLearn 설치
- 타이타닉 생존 예측기
- 타이타닉 분류기 소스 코드
- 요약
- 케라스 소개
- 9장. 텐서플로를 이용한 고급 멀티미디어 프로그래밍하기
- 멀티미디어 분석 소개
- 가변적인 객체 감지를 위한 딥러닝
- 병목
- 재학습 모델 사용
- 가속화한 선형 대수학
- 텐서플로의 주요 강점
- XLA를 통한 Just-In-Time 컴파일
- JIT 컴파일
- XLA의 존재와 장점
- XLA의 후드 작업
- 여전히 실험적인 상태다
- 지원 플랫폼
- 보다 실험적인 자료
- 텐서플로와 케라스
- 케라스는 무엇인가?
- 케라스의 효과
- 비디오 질문 응답 시스템
- 실행 불가능한 코드!
- 안드로이드에서 딥러닝
- 텐서플로 데모 예제
- 안드로이드 시작하기
- 구조 요구 사항
- 사전 빌드한 APK.
- 데모 실행
- 안드로이디 스튜디오로 구현하기
- 좀 더 시도해본다 - Bazel로 구축하기
- 요약
- 10장. 강화 학습
- 강화 학습의 기본 개념
- Q-러닝 알고리즘
- OpenAI Gym 프레임워크 소개
- frozenlake-v0 구현 문제
- frozenlake-v0 문제에 대한 소스 코드
- 텐서플로를 사용한 Q-러닝
- Q 러닝 신경망 소스 코드
도서 오류 신고
정오표
정오표
[p.74 그림 : XOR 문제에 대한 신경망 구조]
입력층 | 입력층 | 출력층
->
입력층 | 은닉층 |출력층
[p.77 그림 : 상수 1.0을 입력 배열 x에 곱하는 연산을 표현한 계산 그래프]
1 -> 2
b -> z
+ -> ×
[p.77 : 아래에서 1행, 코드]
상수(=1.0)
->
상수(=2.0)
b=tf.constant(1.0)
->
z=tf.constant(2.0)
[p.78 : 3행, 코드]
y=x×b
->
y=x×z
세션내에서 x와 b를
->
세션내에서 x와 z를
[p.81 : 2행]
텐서플로 API는 NumPy 배열과의 데이터를 관리하기 위해 구현한다.
->
텐서플로 API는 NumPy 배열과 데이터를 관리하기 위해 구현됐다.
[p.87]
다음 예제는 임의의 2x3행렬을 만들기 위해 데이터를 제공하는 방법이다.
->
다음 예제는 임의의 3x2행렬을 만들기 위해 데이터를 제공하는 방법이다.
[p.89 : (이미지) 단일 입력 뉴런을 나타내는 스키마]
출력=f(입력, 출력)
->
출력=f(입력, 가중치)
[p.93 : 2행]
터미널을 열고 다음을 숫자화한다.
->
터미널을 열고 명령창에서 다음내용을 입력하면 된다.
[p.93 : 3행]
실행에 문제가 없다면 logsimplestats 파일이 작성된 동일 디렉터리에 다음과 같은 메시지가 표시된다.
->
실행에 문제가 없다면 logsimplestate 파일이 생성된 동일 디렉터리에 다음과 같은 메시지가 나타난다.
[p.93 : 5행]
즉, 텐서보드를 사용하려면 웹 브라우저를 열고 localhost:6006 사이트 주소를 열어야 한다.
->
즉, 텐서보드를 보려면 웹 브라우저로 localhost:6006에 접속해 해당 결과를 볼 수 있다.
[p.136 : 마지막 코드]
[p.181]
다음으로 길이가 12x12x64 = 9,126인 단일 벡터로 병합된다.
->
다음으로 길이가 12x12x64 = 9,216인 단일 벡터로 병합된다.
[p.284(286)]
GPU는 신경망 학습에 필요한 시간을 10/20까지 획기적으로 줄였다.
->
GPU는 신경망 학습에 필요한 시간을 1/20까지 획기적으로 줄였다.