[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이 만들어지는 걸까?
  • tf.GradientTape()

    • 자동미분으로 gradient를 계산해준다.
    • tf.GradientTape().gradients(loss, model.trainable_variables)를 통해 자동 미분된 gradient를 가질 수 있는데,
      • 여기서 losstf.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()를 해야 구성이된단다.

알고리즘

  • 그냥 느낀점만 쓰자면, 알고리즘 풀이는
    • 우선적으로 해줘야 하는 것들이 있다.
    • 그리고 뭔가를 구하는 핵심적인 조건을 정하고
      • 예) 카운트를 더해갈 건지,
      • 뭔가 있는 그대로를 수정할건지
    • 그리고 직관적인 것들을 일단 설계해간다.

좋은 웹페이지 즐겨찾기