-
[HandsOn]12. 텐서플로를 사용한 사용자 정의 모델과 훈련 - 내용 정리 1[도서완독]Hands On Machine Learning 2022. 7. 19. 19:14
10,11과에서 고수준 API인 tf.keras 를 통해 여러가지를 해 보았음!
사실 딥러닝 작업의 95%는 tf.keras나 tf.data(13장에서 다룰것) 외에 다른 것은 필요하지 않다고 함...
하지만 저수준 파이썬API도 한번 해보자.
나만의 손실 함수나, 지표 등을 만들어 세부적으로 제어하고 싶을 때 필요하기 때문.
12.1 텐서플로 훑어보기
대부분 고수준 API를 사용하지만, 자유도가 필요한 경우 저수준 API를 사용하여 텐서를 직접 다루게 됨.
구글의 텐서플로 허브를 사용하면 사전훈련된 신경망을 손쉽게 다운로드하여 재사용할 수 있다.
혹은 텐서플로 모델 저장소(https://github.com/tensorflow/models)에서 많은 신경망 구조를 다운로드할 수 있음.
텐서플로 리소스 페이지(https://www.tensorflow.org/resources)나,
https://github.com/jtoy/awesome-tensorflow에서 다양한 텐서플로 기반 프로젝트를 확인할 수 있음.
깃허브에서 수백 개의 텐서플로 프로젝트 저장소를 찾을 수 있음!
12.2 넘파이처럼 텐서플로 사용하기
텐서는 넘파이 ndarray와 매우 비슷한 다차원 배열! 그러나 스칼라 값도 가질 수 있음.
12.2.1 텐서와 연산
tf.constant([[1.,2.,3.],[4.,5.,6.]]) tf.constant(42)
tf.constant() 함수로 텐서를 만들 수 있음.
모든 종류의 텐서 연산이 가능함!
기본 수학 연산 (tf.add(), tf.multiply(), tf.square(),...) 나 넘파이에서 볼수 있는 대부분의 연산을 제공!
12.2.2 텐서와 넘파이
텐서는 넘파이와 함께 사용하기 편리함. 넘파이 배열로 텐서 만들기 가능, 그 반대도 가능.
넘파이 배열에 텐서플로 연산 가능, 반대도 가능.
12.2.3 타입 변환
텐서플로는 어떤 타입 변환도 자동으로 수행하지 않음!
실수 텐서와 정수 텐서를 더할 수 없고, 32비트 실수와 64비트 실수도 더할 수 없음.
tf.cast()를 통해 타입 변환 가능
12.2.4 변수
tf.Tensor는 변경이 불가능하므로, 역전파로 변경되어야 하는 신경망의 가중치를 구현할 수 없음.
tf.Variable이 그럴 때 필요.
v=tf.Variable([[1.,2.,3.],[4.,5.,6.]])
v.assign(),v.scatter_nd_update()등으로 변숫값 수정 가능
케라스는 add_weight()메서드로 변수 생성을 대신 처리해주기 때문에 실전에서 변수를 직접 만드는 일은 매우 드뭄.
또한 모델 파라미터는 일반적으로 옵티마이저가 업데이트하므로 수동으로 변수를 업데이트하는 일은 매우 드뭄.
'[도서완독]Hands On Machine Learning' 카테고리의 다른 글
[HandsOn]12. 텐서플로를 사용한 사용자 정의 모델과 훈련 - 연습문제 풀이 (0) 2022.07.21 [HandsOn]12. 텐서플로를 사용한 사용자 정의 모델과 훈련 - 내용 정리 2 (0) 2022.07.20 [HandsOn]11. 심층 신경망 훈련하기 - 내용 정리 3 (0) 2022.07.08 [HandsOn]11. 심층 신경망 훈련하기 - 내용 정리 2 (0) 2022.07.06 [HandsOn]11. 심층 신경망 훈련하기 - 내용 정리 1 (0) 2022.07.05