다시 이음

두번째 도서 : 케라스 창시자에게 배우는 딥러닝 본문

데이터 도서 정리

두번째 도서 : 케라스 창시자에게 배우는 딥러닝

Taeho(Damon) 2022. 3. 4. 16:09

안녕하세요.

 

오늘은 딥러닝과 관련한 도서를 소개하려고 합니다.

 

두번째 도서는

케라스 창시자에게 배우는 딥러닝  / 출판사 : 길벗 / 프랑소와 숄레 지음

입니다.

 

출처 : 알라딘


난이도 : ★★★★☆

주요 내용 : 딥러닝 전반에 대한 기본적인 내용과 이해, 소스코드까지 기본을 이해하기 좋은 책이다.

목적 : 딥러닝에 대한 공부를 했지만 하나하나 자세한 내용보다는 실전에 가까운 내용을 배웠는데 기본이 부족하다는 생각이 들었고 기본기를 채우기 위해 좀더 쉽지만 왜? 이걸 이때 사용하는가? 에 대한 조금의 해결책이 되었다.


목차는 접은 글과 같습니다.

더보기

1부 딥러닝의 기초

1장 딥러닝이란 무엇인가?

1.1 인공 지능과 머신 러닝, 딥러닝
1.1.1 인공 지능
1.1.2 머신 러닝
1.1.3 데이터에서 표현을 학습하기
1.1.4 딥러닝에서 ‘딥’이란 무엇일까?
1.1.5 그림 3개로 딥러닝의 작동 원리 이해하기
1.1.6 지금까지 딥러닝의 성과
1.1.7 단기간의 과대 선전을 믿지 말자
1.1.8 AI에 대한 전망
1.2 딥러닝 이전: 머신 러닝의 간략한 역사
1.2.1 확률적 모델링
1.2.2 초창기 신경망
1.2.3 커널 방법
1.2.4 결정 트리, 랜덤 포레스트, 그래디언트 부스팅 머신
1.2.5 다시 신경망으로
1.2.6 딥러닝의 특징
1.2.7 머신 러닝의 최근 동향
1.3 왜 딥러닝일까? 왜 지금일까?
1.3.1 하드웨어
1.3.2 데이터
1.3.3 알고리즘
1.3.4 새로운 투자의 바람
1.3.5 딥러닝의 대중화
1.3.6 지속될까?

2장 시작하기 전에: 신경망의 수학적 구성 요소
2.1 신경망과의 첫 만남
2.2 신경망을 위한 데이터 표현
2.2.1 스칼라(0D 텐서)
2.2.2 벡터(1D 텐서)
2.2.3 행렬(2D 텐서)
2.2.4 3D 텐서와 고차원 텐서
2.2.5 핵심 속성
2.2.6 넘파이로 텐서 조작하기
2.2.7 배치 데이터
2.2.8 텐서의 실제 사례
2.2.9 벡터 데이터
2.2.10 시계열 데이터 또는 시퀀스 데이터
2.2.11 이미지 데이터
2.2.12 비디오 데이터
2.3 신경망의 톱니바퀴: 텐서 연산
2.3.1 원소별 연산
2.3.2 브로드캐스팅
2.3.3 텐서 점곱
2.3.4 텐서 크기 변환
2.3.5 텐서 연산의 기하학적 해석
2.3.6 딥러닝의 기하학적 해석
2.4 신경망의 엔진: 그래디언트 기반 최적화
2.4.1 변화율이란?
2.4.2 텐서 연산의 변화율: 그래디언트
2.4.3 확률적 경사 하강법
2.4.4 변화율 연결: 역전파 알고리즘
2.5 첫 번째 예제 다시 살펴보기
2.6 요약

3장 신경망 시작하기
3.1 신경망의 구조
3.1.1 층: 딥러닝의 구성 단위
3.1.2 모델: 층의 네트워크
3.1.3 손실 함수와 옵티마이저: 학습 과정을 조절하는 열쇠
3.2 케라스 소개
3.2.1 케라스, 텐서플로, 씨아노, CNTK
3.2.2 케라스를 사용한 개발: 빠르게 둘러보기
3.3 딥러닝 컴퓨터 셋팅
3.3.1 주피터 노트북: 딥러닝 실험을 위한 최적의 방법
3.3.2 케라스 시작하기: 두 가지 방법
3.3.3 클라우드에서 딥러닝 작업을 수행했을 때 장단점
3.3.4 어떤 GPU 카드가 딥러닝에 최적일까?
3.4 영화 리뷰 분류: 이진 분류 예제
3.4.1 IMDB 데이터셋
3.4.2 데이터 준비
3.4.3 신경망 모델 만들기
3.4.4 훈련 검증
3.4.5 훈련된 모델로 새로운 데이터에 대해 예측하기
3.4.6 추가 실험
3.4.7 정리
3.5 뉴스 기사 분류: 다중 분류 문제
3.5.1 로이터 데이터셋
3.5.2 데이터 준비
3.5.3 모델 구성
3.5.4 훈련 검증
3.5.5 새로운 데이터에 대해 예측하기
3.5.6 레이블과 손실을 다루는 다른 방법
3.5.7 충분히 큰 중간층을 두어야 하는 이유
3.5.8 추가 실험
3.5.9 정리
3.6 주택 가격 예측: 회귀 문제
3.6.1 보스턴 주택 가격 데이터셋
3.6.2 데이터 준비
3.6.3 모델 구성
3.6.4 K-겹 검증을 사용한 훈련 검증
3.6.5 정리
3.7 요약

4장 머신 러닝의 기본 요소
4.1 머신 러닝의 네 가지 분류
4.1.1 지도 학습
4.1.2 비지도 학습
4.1.3 자기 지도 학습
4.1.4 강화 학습
4.2 머신 러닝 모델 평가
4.2.1 훈련, 검증, 테스트 세트
4.2.2 기억해야 할 것
4.3 데이터 전처리, 특성 공학, 특성 학습
4.3.1 신경망을 위한 데이터 전처리
4.3.2 특성 공학
4.4 과대적합과 과소적합
4.4.1 네트워크 크기 축소
4.4.2 가중치 규제 추가
4.4.3 드롭아웃 추가
4.5 보편적인 머신 러닝 작업 흐름
4.5.1 문제 정의와 데이터셋 수집
4.5.2 성공 지표 선택
4.5.3 평가 방법 선택
4.5.4 데이터 준비
4.5.5 기본보다 나은 모델 훈련하기
4.5.6 몸집 키우기: 과대적합 모델 구축
4.5.7 모델 규제와 하이퍼파라미터 튜닝
4.6 요약

2부 실전 딥러닝

5장 컴퓨터 비전을 위한 딥러닝

5.1 합성곱 신경망 소개
5.1.1 합성곱 연산
5.1.2 최대 풀링 연산
5.2 소규모 데이터셋에서 밑바닥부터 컨브넷 훈련하기
5.2.1 작은 데이터셋 문제에서 딥러닝의 타당성
5.2.2 데이터 내려받기
5.2.3 네트워크 구성하기
5.2.4 데이터 전처리
5.2.5 데이터 증식 사용하기
5.3 사전 훈련된 컨브넷 사용하기
5.3.1 특성 추출
5.3.2 미세 조정
5.3.3 정리
5.4 컨브넷 학습 시각화
5.4.1 중간층의 활성화 시각화하기
5.4.2 컨브넷 필터 시각화하기
5.4.3 클래스 활성화의 히트맵 시각화하기
5.5 요약

6장 텍스트와 시퀀스를 위한 딥러닝

6.1 텍스트 데이터 다루기
6.1.1 단어와 문자의 원-핫 인코딩
6.1.2 단어 임베딩 사용하기
6.1.3 모든 내용을 적용하기: 원본 텍스트에서 단어 임베딩까지
6.1.4 정리
6.2 순환 신경망 이해하기
6.2.1 케라스의 순환 층
6.2.2 LSTM과 GRU 층 이해하기
6.2.3 케라스를 사용한 LSTM 예제
6.2.4 정리
6.3 순환 신경망의 고급 사용법
6.3.1 기온 예측 문제
6.3.2 데이터 준비
6.3.3 상식 수준의 기준점
6.3.4 기본적인 머신 러닝 방법
6.3.5 첫 번째 순환 신경망
6.3.6 과대적합을 감소하기 위해 순환 드롭아웃 사용하기
6.3.7 스태킹 순환 층
6.3.8 양방향 RNN 사용하기
6.3.9 더 나아가서
6.3.10 정리
6.4 컨브넷을 사용한 시퀀스 처리
6.4.1 시퀀스 데이터를 위한 1D 합성곱 이해하기
6.4.2 시퀀스 데이터를 위한 1D 풀링
6.4.3 1D 컨브넷 구현
6.4.4 CNN과 RNN을 연결하여 긴 시퀀스를 처리하기
6.4.5 정리
6.5 요약

7장 딥러닝을 위한 고급 도구
7.1 Sequential 모델을 넘어서: 케라스의 함수형 API
7.1.1 함수형 API 소개
7.1.2 다중 입력 모델
7.1.3 다중 출력 모델
7.1.4 층으로 구성된 비순환 유향 그래프
7.1.5 층 가중치 공유
7.1.6 층과 모델
7.1.7 정리
7.2 케라스 콜백과 텐서보드를 사용한 딥러닝 모델 검사와 모니터링
7.2.1 콜백을 사용하여 모델의 훈련 과정 제어하기
7.2.2 텐서보드 소개: 텐서플로의 시각화 프레임워크
7.2.3 정리
7.3 모델의 성능을 최대로 끌어올리기
7.3.1 고급 구조 패턴
7.3.2 하이퍼파라미터 최적화
7.3.3 모델 앙상블
7.3.4 정리
7.4 요약

8장 생성 모델을 위한 딥러닝
8.1 LSTM으로 텍스트 생성하기
8.1.1 생성 RNN의 간단한 역사
8.1.2 시퀀스 데이터를 어떻게 생성할까?
8.1.3 샘플링 전략의 중요성
8.1.4 글자 수준의 LSTM 텍스트 생성 모델 구현
8.1.5 정리
8.2 딥드림
8.2.1 케라스 딥드림 구현
8.2.2 정리
8.3 뉴럴 스타일 트랜스퍼
8.3.1 콘텐츠 손실
8.3.2 스타일 손실
8.3.3 케라스에서 뉴럴 스타일 트랜스퍼 구현하기
8.3.4 정리
8.4 변이형 오토인코더를 사용한 이미지 생성
8.4.1 이미지의 잠재 공간에서 샘플링하기
8.4.2 이미지 변형을 위한 개념 벡터
8.4.3 변이형 오토인코더
8.4.4 정리
8.5 적대적 생성 신경망 소개
8.5.1 GAN 구현 방법
8.5.2 훈련 방법
8.5.3 생성자
8.5.4 판별자
8.5.5 적대적 네트워크
8.5.6 DCGAN 훈련 방법
8.5.7 정리
8.6 요약

9장 결론
9.1 핵심 개념 리뷰
9.1.1 AI를 위한 여러 방법
9.1.2 머신 러닝 분야에서 딥러닝이 특별한 이유
9.1.3 딥러닝에 대하여
9.1.4 핵심 기술
9.1.5 일반적인 머신 러닝 작업 흐름
9.1.6 주요 네트워크 구조
9.1.7 딥러닝의 가능성
9.2 딥러닝의 한계
9.2.1 머신 러닝 모델의 의인화 위험
9.2.2 지역 일반화 vs. 궁극 일반화
9.2.3 정리
9.3 딥러닝의 미래
9.3.1 프로그램 같은 모델
9.3.2 역전파와 미분 가능 층을 넘어서
9.3.3 자동화된 머신 러닝
9.3.4 영구 학습과 모듈화된 서브루틴 재사용
9.3.5 장기 비전
9.4 빠른 변화에 뒤처지지 않기
9.4.1 캐글의 실전 문제로 연습하기
9.4.2 아카이브(arXiv)를 통해 최신 논문 읽기
9.4.3 케라스 생태계 탐험하기
9.5 맺음말

부록 A 윈도에 텐서플로와 케라스 설치하기
A.1 아나콘다 설치하기
A.2 텐서플로, 케라스 설치하기
A.3 예제 노트북 실행하기

부록 B 우분투 리눅스에 케라스와 필수 라이브러리 설치하기
B.1 파이썬 과학 라이브러리 설치하기
B.2 GPU 설정하기
B.3 씨아노 설치하기(선택 사항)
B.4 케라스 설치하기
B.5 아나콘다 환경 파일을 사용하여 설치하기

부록 C EC2 GPU 인스턴스에서 주피터 노트북 실행하기
C.1 주피터 노트북은 무엇일까? 왜 주피터 노트북을 AWS GPU에서 실행할까?
C.2 딥러닝 주피터 노트북을 위해 AWS를 사용하지 않는 이유는 무엇일까?
C.3 AWS GPU 인스턴스 설정하기
C.4 주피터 설정하기
C.5 케라스 설치하기
C.6 로컬 포트포워딩 설정하기
C.7 로컬 브라우저에서 주피터 사용하기
C.8 코랩을 사용하여 주피터 노트북 실행하기

 

1~4장은 딥러닝의 개념과 할 수 있는 일, 작동원리에 대한 기본적인 설명입니다.

5~9장은 딥러닝을 사용하여 실전 문제를 해결하는 데 실용적인 직관을 얻고 필수적인 딥러닝 모범 사례를 안내합니다.


정리

 

1장 딥러닝이란?

 

머신러닝은 새로운 프로그래밍 패러다임입니다.

기존 = 규칙+데이터 ->해답 / 머신러닝 = 데이터+해답 -> 규칙

 

머신러닝을 위해 필요한 조건 3가지

- 입력 데이터 포인트 : Input data

- 기대 출력 : label

- 알고리즘의 성능을 측정하는 방법 : 평가지표(metric)

 

딥러닝의 딥이란?

- 머신러닝의 특정한 한 분야로서 연속된 층(layer)에서 점진적으로 의미있는 표현을 배우는 데 강점을 가진 데이터로부터 표현을 학습하는 새로운 방식

- 다른 이름으로 층 기반 표현 학습, 계층적 표현 학습

 

딥러닝의 작동원리

1. 층에서 입력 데이터가 처리되는 상세 내용은 가중치(weight)에 저장이 되고, 학습이란 이런 가중치의 정확한 값을 찾는 것을 목표로 합니다.

2. 출력을 제어하기 위해서 출력이 기대 값보다 얼마나 벗어났는지 측정해야합니다. (손실 함수, 목적 함수, 비용함수가 담당)

3. 측정값(손실함수)가 감소하는 방향으로 가중치값을 조금씩 수정(역전파 알고리즘을 구현한 옵티마이저가 담당)

4. 위의 과정을 반복하여 (훈련 반복) 손실함수를 최소화하는 가중치 값을 산출

 

머신러닝의 역사

1. 확률적 모델링 ( 나이브 베이즈, 로지스틱 회귀)

2. 초창기 신경망

3. 커널 방법 (분류 알고리즘 ,대표적으로 SVM)

더보기

SVM(Support Vector Machine) : 분류 문제 해결을 위해 2개의 다른 범주에 속한 데이터 포인트 그룹 사이에 좋은 결정 경계(decision boundary)를 찾음.

 

결정 경계 = 2개의 범주에 대응하는 영역으로 나눈 직선이나 표면

 

실제 데이터의 좌표를 찾을 필요 없이 커널 함수를 통하여 두 데이터 포인트 사이의 거리를 계산을 하여 구함.

 

단점 : 대용량 데이터셋에 좋은 성능 발휘 못함.

4. 결정트리, 랜덤 포레스트, 그래디언트 부스팅 머신

 

딥러닝의 특징

- 특성공학을 완전히 자동화

- 층을 거치면서 점진적으로 더 복잡한 표현이 만들어진다.

- 점진적인 중간 표현이 공동으로 학습된다.

 

2장 신경망의 수학적 구성요소

 

1. 데이터 표현

 

텐서 : 데이터를 위한 컨테이너

 

- 스칼라(0D 텐서) : 하나의 숫자만 담고 있는 텐서

- 벡터(1D 텐서) : 숫자의 배열, 1개의 축(axis)를 가짐.

- 행렬(2D 텐서) : 벡터의 배열, 2개의 축을 가짐. 

- 3D 텐서 : 시계열 데이터 ( 샘플 수 x 특성 x 타임스텝 ) 

- 4D텐서 : 이미지 데이터 (samples, height, width, color_depth)

(예시) 256x256 크기의 흑백 이미지에 대한 128개의 배치는 (128,256,256,1)크기의 텐서에 저장

- 5D텐서 : 동영상 데이터 (samples, frames, height, width, color_depth)

(예시) 60초짜리 144x256 클립을 초당 4프레임으로 샘플링하면 240프레임. 이런 클립 4개를 가지면 (4, 240, 144, 256, 3) 크기

 

핵심 속성

- 축의 개수(rank)

- 크기(shape)

- 데이터 타입

 

2. 텐서 연산

-원소별 연산

-브로드 캐스팅

- 텐서 점곱(내적)

- 텐서 크기 변환

 

3. 그래디언트(기울기) 기반 최적화

 

가중치 행렬을 원소마다 +값,-값으로 계산하여 손실함수를 통해 가중치 값을 조정하는 방식은 비효율적

 

미분을 통한 그래디언트(기울기)를 계산하는 것이 효율적

 

-확률적(무작위) 경사 하강법

: 미분 가능한 함수를 미분을 통해 함수 최소값을 모두 구하고(도함수(변화율)이 0인 지점) 그 중 가장 작은 값을 가지는 함수값 찾기

 

이러한 경사하강법에서 여러가지 다른 방식을 고려하는 것 : 옵티마이저(최적화 방법)

 

3장 : 신경망 시작하기

 

1. 신경망의 구조

 

(1) layer(층)

 

층마다 적절한 텐서 포맷과 데이터 처리 방식이 다름.

 

2D 텐서(벡터) : 완전 연결-  층(Fully connected layer) or 밀집 층(dense layer)

3D 텐서(시퀀스) : LSTM과 같은 순환 층(recurrent layer)

4D 텐서(이미지) : 2D 합성곱 층(convolution layer)

 

(2) 입력 데이터, 타깃

 

(3) 손실 함수, 옵티마이저(학습 진행 방식)

 

손실함수

- 2개의 분류 문제 : 이진 크로스엔트로피(binary crossentropy)

- 다중 클래스 분류 문제 : 범주형 크로스엔트로피(categorical crossentropy)

- 회귀 문제 : 평균제곱오차(MSE)

- 시퀀스 학습 문제 : CTC(connection temporal classification)

 

 

2. 케라스

 

- 케라스 : 딥러닝 프레임워크

- 텐서플로, 씨아노, CNTK : 케라스의 백엔드 엔진

- 케라스 모델 정의 방식 : Sequential 클래스, 함수형 API 지정

 

 

4장 : 머신러닝의 기본 요소

 

1. 머신러닝 분류

 

-지도학습 : 시퀀스 생성(sequence generation), 구문 트리 예측(syntax tree), 물체감지(object detection), 이미지 분할(image segmentation)

-비지도학습 : 차원축소, 클러스터링

-자기 지도 학습 : 오토인코더

-강화학습

 

2. 모델 평가

 

데이터 세트 : 홀드아웃 검증, k 교차 검증

 

3. 데이터 전처리, 특성 공학, 특성 학습

 

-전처리 : 벡터화, 값 정규화, 결측치 관리

-특성공학

 

4.과대적합, 과소적합

 

-최적화,일반화,규제

-신경망의 네트워크 구조가 클 수록 과대 적합이 쉽게 생긴다.

-과대적합을 완화하기 위해 네트워크의 복잡도에 제한(가중치가 작은 값을 가지도록 강제)

-드롭아웃

 

5. 머신 러닝 작업 흐름

 

- 문제 정의 및 데이터셋 수집

- 성공지표 선택

- 평가 방법 선택

- 데이터 준비(정규화)

- 베이스 모델 설정

- 과대적합 모델 설정

- 모델 규제, 하이퍼 파라미터 튜닝

 

 

5장 : 컴퓨터 비전

 

1. 합성곱 신경망

 

- 합성곱 연산

- 스트라이드, 패딩

- 최대 풀링 연산

*다운샘플링 이유 : 처리할 특성 맵의 가중치 개수를 줄이기 위함

 

2. 합성곱 신경망 훈련 절차

 

- 데이터 선정

- 네트워크 설정(컨볼루션 layer 쌓기)

- 데이터 전처리(이미지의 경우 디코딩 및 픽셀값으로 나누어주어 조정)

- 데이터 증강(Data Augmentation)

 

3. 사전 훈련된 합성곱 신경망 사용하기

 

- 특성 추출 : 사전에 학습된 가중치를 통해 새로운 샘플에서 특성을 추출하는 것.

- 미세조정(Fine-tuning) : 사전 훈련된 layer의 일부를 새로운 샘플을 통해서 훈련하는 것.

 

4. 합성곱 신경망 시각화

 

- 처음의 신경망에선 엣지 부분을 감별하고 뒤로 갈수록 추상적인 부분을 추출하는 방식을 보인다.

 

 

6장 텍스트와 시퀀스를 위한 딥러닝

시퀀스 데이터를 처리하는 기본적인 딥러닝 모델 : 순환 신경망(RNN), 1D 합성곱 신경망

 

1. 텍스트 데이터 다루기

 

컴퓨터 비전 = 픽셀에 적용한 패턴 인식

자연어처리(NLP) = 단어,문장,문단에 적용한 패턴 인식

- 딥러닝에 입력하기 위해 수치형 텐서로 변환해야 합니다. = 텍스트 벡터화(vectorizing)

- 텍스트 벡터화 방법

  • 텍스트를 단어로 나누고 단어 단위로 벡터화
  • 텍스트를 문자로 나누고 문자 단위로 벡터화
  • 텍스트에서 단어,문자의 n-gram을 추출하여 n-gram 단위로 벡터화  ** n-gram : 연속된 단어나 문자의 그룹

- 위에서 언급한 단위를 토큰

- 벡터화는 토큰화 과정을 거치고 생성된 토큰을 수치형 벡터를 연결하는 것.

 

여기서 토큰과 벡터를 연결하는 방법으로 원핫인코딩, 단어 임베딩(word embeding)이 있다.

 

- 원핫인코딩 : 생성된 벡터는 희소하며 고차원 형태

- 단어 임베딩 : 저차원, 실수형 벡터

 

단어 임베딩 만들기

1. 관심 문제와 함께 단어 임베딩 학습.

2. 미리 연산된 단어 임베딩 로드하여 사용.

 

    (추후 추가 예정입니다 ㅠ 현재 배우고 있는 파이토치와 내용이 겹치면서 복합적으로 이해하려 애쓰다보니 이해가 어려워져서 읽는데 집중하고 다시 한번 읽고 정리 하려고 합니다.)

 


핵심

 

1. 머신러닝 작업 흐름

-문제 정의

-사용할 방법, 평가지표 설정

-검증과정 설정

-벡터화,전처리(정규화)

-베이스 모델 생성

-하이퍼파라마터 수정(성능위주), 추후 과대적합 규제 추가, 모델크기 줄이기

 

2. 네트워크 구조 정리

 

데이터 별

 

-벡터 이미지 : 완전 연결 네트워크(Dense)

-이미지 데이터 : 2D conv

-사운드 데이터 : 1D conv ,RNN

-텍스트 데이터 : 1D conv, RNN

-시계열 데이터 : RNN, 1d conv

-다른 종류의 시퀀스 데이터 : RNN, 1D conv

-비디오 데이터 : 3D conv(연속동장 감지필요할때), 2D conv(특성 추출 담당 프레임별) + RNN,1D conv(시퀀스 처리용)

-볼륨을 가진 데이터 : 3D conv

 

네트워크별

 

완전 연결 네트워크(Dense)
    : 층의 유닛이 다음 층 유닛과 모두 연결되어 있어서 완전 연결 층, 범주형 데이터 자주 사용, 분류기 생성을 위해 사용되기도 함.

 

컨브넷(합성곱 신경망)

    : 합성곱과 최대 풀링층이 쌓여 구성, Flatten 연산이나 전역 풀링 층으로 끝나는 경우 다수, 마지막은 분류기 층인 Dense층이 포함됨

 

RNN(순환 신경망)

    : 순차적 패턴의 시퀀스라면 1D conv보다 좋은 성능

 


느낀 점

 

이 책은 케라스의 창시자 프랑소와 숄레가 지은 책입니다.

2017-18년 즈음 발간된 책으로 현재 최신화 기술에 대한 이야기는 담고 있지 않습니다.

 

앞서 읽었던 책 은 초급의 느낌이라면 오늘의 이 책은 그렇지 않습니다.

기본적인 딥러닝 기술을 알고 있으며 좀더 상세히 하나하나 차근차근 짚어 나갈 수 있는 책이라고 생각됩니다.

 

무려 478페이지 정도에 해당하는 분량이고 기본지식에 대한 내용을 차근차근 풀어나가다 보니 내용이 가득 차있다는 느낌이 들었습니다. 그래서 아무리 빨리 읽으려고 해도 하나하나 코드해석을 해가면서 읽으려고 하니 쉽지 않았습니다. 이 많은 양의 소스코드를 보고 외우거나 모두 이해하려는 생각을 하지 않기 때문에 책 중반부터는 책을 훑어서 읽자 라는 마음으로 읽게 되었고 추후 다시 한번 읽어서 이해를 하려고 합니다.

 

마지막에서는 케라스 창시자가 보는 딥러닝의 미래? 어떻게 기술이 진화해야하는가 에 대한 생각을 잠시나마 읽을 수 있고 그 내용이 책 전반에 사용된 기법과 일치하는 방법이기 때문에 새로운 시야를 가지게 된 느낌이 듭니다.

 

텐서플로우를 사용하고 딥러닝을 배우기 시작 혹은 배운 분들이라면 코드가 어렵지도 않고 눈으로 읽으면서도 따라갈 수 있도록 해설이 잘 되었기 때문에 추천드립니다.

 

그러나 유일한 단점으로는 책에서 사용하는 단어가 현재 통상되는 단어랑 조금의 차이가 있는 것 같습니다. 그렇다고 오류를 범할 정도는 아니기 때문에 괜찮습니다.