[AIFFEL] 22.Jan.28 - Tensorflow2_APIs
오늘의 학습 리스트
-
Sequential API
- input 1개, output 1개를 전제로 한다.
-
Functional API
keras.Model
을 사용해서 모델을 만든다는 것이 특징이다.- 어떻게 보면 Sequential Model은 그냥
keras.Model
클래스를 상속받아서 쓰는 것이다. - 입력과 출력을 규정해서 모델을 설계한다.
-
Subclassing
keras.Model
은__init__()
이라는 메서드 안에서 레이어 구성을 정의call()
메소드에서forward propagation
을 구현- 문득 의문이 든 건
call()
을 쓰지도 않았는데 어떻게 모델의 forward propagation이 만들어지는 걸까?https://stackoverflow.com/questions/59473267/why-in-keras-subclassing-api-the-call-method-is-never-called-and-as-an-alternat
결론적으로Model
이라는 class를 상속한 나의 customised model은 알고보니Model
내부에__call__
이라는 것이 있고, 그것이 자동으로 호출되는 거란다.(그리고 난def call(self, input):
을 통해 그 부분을 override 해준 거란다.
-
tf.GradientTape()
- 자동미분으로 gradient를 계산해준다.
tf.GradientTape().gradients(loss, model.trainable_variables)
를 통해 자동 미분된 gradient를 가질 수 있는데,- 여기서
loss
는tf.keras.losses.SparseCategoricalCrossentropy()
같은 거로 정의된 함수의 손실함수값이다.
- 여기서
- 위에서 graidents를 얻었다면...
optimizer.apply_gradients(zip(gradients, model.trainable_variables))
를 통해 gradient 값을 업데이트 시킨다.- 그리고 이것으로 내가 정의하는 1번의 iteration에서의 graident 최적화가 실행된다.(batch일 수도 있고, 그 batch를 데이터셋 1개씩마다 주면 SGD인 것이고... 그렇게 보면 될 것 같다.)
-
fit()
라는 건 결국tf.GradientTape()
를 활용해서 gradient를 업데이트해주는 거로 보면 되는 것 같다...- 그리고 그렇게 step마다 혹은 batch마다 loss를 확인하고 싶으면 나만의 함수를 만들어서 그때마다 계산된 loss나 accuracy등을 프린트하게 하고...
- 이러면 진짜
fit()
을 handmade로 만드는 게 되는 것 같다.
-
@tf.function
은 왜 있는 건가?- 결과적으로 함수의 실행 성능을 향상시키기 위해 있단다.
- 단, 내부적으로 디버깅하는 게 왠지 어렵단다. 아래는 official Korean document 내 설명
성능을 높이고 이식성이 좋은 모델을 만들려면 tf.function을 사용해 그래프로 변환하세요. 하지만 조심해야 할 점이 있습니다. tf.function은 무조건 속도를 높여주는 마법의 은총알이 아닙니다!
-
numpy에서
...
의 의미- 쉽게 얘기해서 '전체적으로 slicing'해주는 것 같다.
- 아래의 예시를 보자
from numpy import arange a = arange(16).reshape(2,2,2,2) a[..., 0].flatten() >>> array([ 0, 2, 4, 6, 8, 10, 12, 14]) 그리고 저건 a[:,:,:,0].flatten()과 같다.
- 실험
np.arange(16).reshape(4,2,2)[:,np.newaxis,...].shape >>(4, 1, 2, 2)
-
모델을 구성만 하고
model.summary()
하면 오류가 난다.fit()
이나build()
를 해야 구성이된단다.
알고리즘
- 그냥 느낀점만 쓰자면, 알고리즘 풀이는
- 우선적으로 해줘야 하는 것들이 있다.
- 그리고 뭔가를 구하는 핵심적인 조건을 정하고
- 예) 카운트를 더해갈 건지,
- 뭔가 있는 그대로를 수정할건지
- 그리고 직관적인 것들을 일단 설계해간다.
Author And Source
이 문제에 관하여([AIFFEL] 22.Jan.28 - Tensorflow2_APIs), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@moondeokjong/AIFFEL-22.Jan.28-Tensorflow2APIs저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)