케라스 창시자에게 배우는 딥러닝 2판

이 책은 케라스(Keras) 라이브러리의 창시자이고 현재 구글의 소프트웨어 엔지니어인 프랑소와 숄레(François Chollet)가 쓴 <Deep Learning with Python 2nd Edition>의 번역서입니다.

<Deep Learning with Python 2nd Edition>은 1판과 마찬가지로 아마존에서 높은 평가를 받고 있고 인공지능, 딥러닝 분야의 장기 베스트 셀러입니다.

이 책은 딥러닝을 설명하기 위해 어려운 수식을 사용하지 않습니다. 직관적인 설명과 꼼꼼한 예를 통해서 누구나 쉽게 딥러닝과 신경망 이면의 원리를 터득할 수 있습니다. 저자가 말한것 처럼 딥러닝은 신비하거나 마법 같은 것이 아니기 때문입니다. 이 책에서는 기본적인 신경망은 물론, 합성곱 신경망을 사용한 컴퓨터 비전, 순환 신경망을 사용한 자연어 처리 예제를 자세히 다룹니다. 특히 최신 트랜스포머 아키텍처를 밑바닥부터 직접 구현해 보면서 이 알고리즘의 구동 원리를 이해할 수 있습니다. 또 딥드림, 스타일 트랜스퍼, 오토인코더, GAN 등을 사용한 생성 모델도 다루고 있습니다. 2판에서는 특히 머신러닝 워크플로와 실전 모범 사례를 위한 많은 팁이 추가되었습니다. 글자 그대로 머신러닝 바이블입니다!

2판 번역서는 특별히 양장으로 출간되었습니다. 이 책의 가치와 유용함을 믿고 아낌없는 투자를 해주신 길벗 출판사에 깊이 감사드립니다. 개인적으로도 양장 도서를 출간하게 되어 큰 영광입니다. 아마도 IT 전문서 분야에 이런 책은 쉽게 나오기 힘듭니다. 제 여정에 큰 이정표를 남기게 되어 정말 기쁩니다!

바쁜 와중에도 시간을 내어 베타 테스트에 참여해 주신 김미수 님, 박가단 님, 박서현 님, 박찬웅 님, 장대혁 님, 이혜민 님, 배윤성 님, 이승표 님 감사드립니다. 작업의 모든 과정을 친절히 안내해 주신 길벗 출판사의 안윤경 님과 둔탁한 글을 다듬어 주신 김윤지 님께 감사드립니다. 그 외 책을 만드는 데 도움을 주신 모든 분들에게 감사드립니다.

  • 온라인/오프라인 서점에서 판매 중입니다! [예스24] [교보문고] [알라딘]
  • 628페이지, 풀 컬러, 양장: 48,000원 –> 43,200원, 전자책: 38,400원
  • 이 책에 실린 코드는 깃허브에서 주피터 노트북으로 제공합니다:
  • 이 책의 코드는 코랩, 텐서플로 2.8 버전에서 테스트되었습니다.

1판과 2판의 차이점을 알고 싶다면 다음 도표를 참고하세요. 2판 각 장의 내용을 대략적으로 파악하고 싶다면 [Deep Learning with Python] 2판 번역 완료! 포스트를 참고하세요.

이 페이지에서 책의 에러타와 텐서플로와 케라스 버전 변경에 따른 변경 사항을 계속 업데이트하겠습니다.궁금한 점이나 오류가 있다면 페이지 맨 아래 ‘Your Inputs’에 자유롭게 글을 써 주세요. 또 제 이메일을 통해서 알려 주셔도 되고 구글 그룹스 머신러닝 도서 Q&A에 글을 올려 주셔도 좋습니다.

감사합니다! 🙂


Outputs (aka. errata)

  • ~22: 2쇄에 반영되었습니다.
  1. (p104) 아래에서 5번째 줄, (p133) 아래에서 2번째 줄과 14번째 줄, (p134) 위에서 1번째 줄에 NavieDenseNaiveDense로 정정합니다.(이*재 님)
  2. (p155) 코드 4-8에서 epochs = range(1, len(loss) + 1)epochs = range(1, len(loss_values) + 1)로 정정합니다.(이*재 님)
  3. (p72) 2.2.10절 아래 2번째 줄에서 “각 샘플은 벡터(랭크-2 텐서)의 시퀀스로 인코딩되므로”를 “각 샘플은 벡터의 시퀀스(랭크-2 텐서)로 인코딩되므로”로 정정합니다.(현* 님)
  4. (p177) 4.3.5절 아래 문장에서 “ 이진 분류 모델에서 … 가 반환되었습니다. 다중 분류 모델이므로 각 샘플마다 …”를 “앞서 이진 분류 모델에서 … 가 반환되었습니다. 다중 분류 모델에서는 각 샘플마다 …”로 수정합니다.(이*재 님)
  5. (p189) 위에서 8번째 줄에 “다루는 데이터 포인트 보간할 수 있다면..”을 “다루는 데이터 포인트 보간할 수 있다면..”로 정정합니다.(이*재 님)
  6. (p196) 코드 5-6 아래에서 4번째 줄 validation_score = np.average(validation_scores)를 들여쓰기 하지 않습니다.(이*재 님)
  7. (p228) 6.1.4절 아래 7번째 줄에서 “또는 정확도 ROC AUC의 가중치 평균을…”을 “또는 정확도 ROC AUC의 가중치 평균을…”로 정정합니다.(이*재 님)
  8. (p238) 아래에서 4번째 줄에서 “또한, 전체 모델 사용자 장치에 내려받기 때문에…”를 “또한, 전체 모델 사용자 장치에 내려받기 때문에…”로 정정합니다.(이*재 님)
  9. (p285) 코드 8-4 출력에서 “Test accuracy: 0.991″을 “테스트 정확도: 0.991″로 정정합니다.(이*재 님)
  10. (p587) 위에서 11번째 줄에 “훨씬 실용적고 다재다능합니다”를 “훨씬 실용적고 다재다능합니다”로 정정합니다.(이*재 님)
  11. (p303) 아래에서 14번째 줄에서 “원소 크기를 (16,)에서 (4,)로”를 “원소 크기를 (16,)에서 (4, 4)로”로 정정합니다.(이*재 님)
  12. (p334) 페이지 중간 코드 주석에서 “3개의 유닛과 소프트맥스 활성화 함수를 가진 밀집 층으로 모델을 종료합니다”를 “3개의 필터와 소프트맥스 활성화 함수를 가진 Conv2D 층으로 모델을 종료합니다”로 정정합니다.(이*재 님)
  13. (p338) 아래에서 3번째 줄에서 “이런 선택 모델의 가설 공간”을 “이런 선택이 모델의 가설 공간”으로 정정합니다.(이*재 님)
  14. (p344) 주석 3번 마지막 줄에 “오른쪽과 아래에 2픽셀씩 패딩이 추가되어”를 “오른쪽과 아래에 1픽셀씩 패딩이 추가되어”로 정정합니다.(이*재 님)
  15. (p351) 위에서 4번째 줄에 “적은 파라미터 개수 과대적합의 위험이”를 “적은 파라미터 개수는 과대적합의 위험이”로 정정합니다.(이*재 님)
  16. (p353) 아래에서 6번째 줄에서 “DeepLabV3의 표준 합성곱을 기반으로”를 “DeepLabV3+의 표준 합성곱 기반으로”로 정정합니다.(이*재 님)
  17. (p358) 코드 9-10 바로 위 문장, 코드 9-10 제목, 그림 9-13 제목에서 “다섯 번째 채널”을 “여섯 번째 채널”로 정정합니다.(이*재 님)
  18. (p361) 위에서 12번째 줄에 “점점 더 추상적이 됩니다. 깊은 층의 활성화는 특정 입력에 관한 정보는 점점 줄어들고”를 “점점 더 추상적으로 됩니다. 깊은 층의 활성화에는 특정 입력에 관한 정보가 점점 줄어들고”로 정정합니다.(이*재 님)
  19. (p380) 코드 10-1 바로 아래와 코드 10-2 위 세 번째 줄에서 “42만 551줄”을 “42만 451줄”로 정정합니다.(이*재 님)
  20. (p406) 22번 주석에서 “<핸즈온 머신러닝 2판>(한빛미디어, 2020)의 14장”을 “<핸즈온 머신러닝 2판>(한빛미디어, 2020)의 15장“으로 정정합니다.(이*재 님)
  21. (p423) 아래에서 6번째 줄에 “문자열을 반환하는 Dataset 객체로“를 “문자열을 반환하는 Dataset 객체나 파이썬 문자열의 리스트로“로 정정합니다.(이*재 님)
  22. (p546) search_space_summary() 결과에서 "min_value": 128"min_value": 16으로, "max_value": 1024"max_value": 64로, "step": 128"step": 16으로 정정합니다.(이*재 님)
  23. (p166) 아래에서 4번째 줄에 hist_array.mean()hits_array.mean()으로 정정합니다.(나*현 님)
  24. (p98) 위에서 6번째 줄과 7번째 줄에서 yx2로 정정합니다.(전*기 님)
  25. (p126) 코드 3-13의 첫 번째 설명에서 ‘100의 랜덤한 2D 포인트’를 ‘1000의 랜덤한 2D 포인트’로 정정합니다.(이*강 님)
  26. (p57) 아래에서 3번째 줄에 “오늘날 딥러닝 기술을 해결 가능한 모든 문제에 해결 가능한 모든 문제에“를 “오늘날 딥러닝 기술을 해결 가능한 모든 문제에“로 정정합니다.(김*원 님)
  27. (p492) 아래에서 6번째 줄에 sample_next(predictions[0, i, :])sample_next(predictions[0, i, :], temperature)로 정정합니다.(이*강 님)
  28. (p73) 그림 2-4의 제목에서 “(채널 우선 표기)”를 삭제합니다.(박*희 님)
  29. (162) 코드 4-14 블록 아래 3번째 줄에서 from keras.utils.np_utils import to_categoricalfrom tensorflow.keras.utils import to_categorical로 수정합니다.(김*식 님)
  30. (p200) 코드 5-7 블록 아래 두 번째 줄에서 “조금 더 합리적인 값“를 “조금 더 합리적인 값“으로 수정합니다.(김*식 님)
  31. (p597) 아래에서 8번째 줄에 “유형이 분명합니다“를 “유형이 분명히 있습니다“로 수정합니다.(김*식 님)
  32. 최신 케라스 체크포인트 콜백에서 .keras 포맷으로 저장하는데 버그가 있어 .h5로 수정합니다.
    (p265) 코드 7-19의 7번째 줄, 페이지 마지막 줄에서 checkpoint_path.kerascheckpoint_path.h5로 수정합니다.
    (p304) 코드 8-11의 3번째 줄, (p306) 코드 8-13의 1번째 줄에 convnet_from_scratch.kerasconvnet_from_scratch.h5로 수정합니다.
    (p309) 코드 8-17의 3번째 줄, (p310) 코드 8-18의 2번째 줄에 convnet_from_scratch_with_augmentation.kerasconvnet_from_scratch_with_augmentation.h5로 수정합니다.
    (p317) 코드 8-21의 12번째 줄에 feature_extraction.kerasfeature_extraction.h5로 수정합니다.
    (p320) 아래에서 11번째 줄, (p321) 코드 8-26 2번째 줄에 feature_extraction_with_data_augmentation.kerasfeature_extraction_with_data_augmentation.h5로 수정합니다.
    (p325) 코드 8-28의 6번째 줄, 아래에서 7번째 줄에 fine_tuning.kerasfine_tuning.h5로 수정합니다.
    (p336) 코드 위에서 16번째 줄, (p337) 아래에서 12번째 줄에 oxford_segmentation.kerasoxford_segmentation.h5로 수정합니다.
    (p355) 위에서 10번째 줄에 convnet_from_scratch_with_augmentation.kerasconvnet_from_scratch_with_augmentation.h5로 수정합니다.
    (p388) 아래에서 6번째 줄, (p389) 위에서 3번째 줄에 jena_dense.kerasjena_dense.h5로 수정합니다.
    (p391) 위에서 11번째 줄, 18번째 줄에 jena_conv.kerasjena_conv.h5로 수정합니다.
    (p392) 아래에서 9번째 줄, 2번째 줄에 jena_lstm.kerasjena_lstm.h5로 수정합니다.
    (p403) 코드 10-22의 7번째 줄에 jena_lstm_dropout.kerasjena_lstm_dropout.h5로 수정합니다.
    (p406) 코드 10-23 8번째 줄, 15번째 줄에 jena_stacked_gru_dropout.kerasjena_stacked_gru_dropout.h5로 수정합니다.
    (p431) 코드 11-6의 4번째 줄, 11번째 줄에 binary_1gram.kerasbinary_1gram.h5로 수정합니다.
    (p432) 코드 11-8의 14번째 줄, 20번째 줄에서 binary_2gram.kerasbinary_2gram.h5로 수정합니다.
    (p435) 위에서 6번째 줄, 13번째 줄에서 tfidf_2gram.kerastfidf_2gram.h5로 수정합니다.
    (p437) 코드 11-14의 2번째 줄, 7번째 줄에서 one_hot_bidir_lstm.kerasone_hot_bidir_lstm.h5로 수정합니다.
    (p441) 코드 11-16의 12번째 줄, 17번째 줄에서 embedding_bidir_lstm.kerasembedding_bidir_lstm.h5로 수정합니다.
    (p443) 코드 11-17의 13번째 줄, 18번째 줄에서 embedding_bidir_lstm_with_masking.kerasembedding_bidir_lstm_with_masking.h5로 수정합니다.
    (p446) 코드 11-20의 12번째 줄, 17번째 줄에서 glove_embeddings_sequence_model.kerasglove_embeddings_sequence_model.h5로 수정합니다.
    (p457) 코드 11-23의 2번째 줄, (p458) 위에서 2번째 줄에서 transformer_encoder.kerastransformer_encoder.h5로 수정합니다.
  33. 트랜스포머 디코더 구현에서 MultiHeadAttention 층의 use_causal_mask 매개변수를 사용하도록 설명과 코드를 수정합니다.
    (p475) 페이지 맨 아래 마지막 문장을 다음과 같이 수정합니다. “이를 위해 TransformerDecoder 클래스를 만들 때 MultiHeadAttention 층의 use_causal_mask 매개변수를 True로 설정하여 코잘 마스킹을 적용할 수 있습니다.
    (p476) 코드 11-34를 삭제합니다.
    (p476) 코드 11-35를 다음과 같이 수정합니다(코드를 복사하려면 깃허브를 참고하세요).

Your Inputs

댓글 남기기

이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.