[회고] 신입 iOS 개발자가 되기까지 feat. 카카오 자세히보기

🛠 기타/Data & AI

TensorFlow 레이어

inu 2020. 8. 7. 00:04
반응형


레이어

  • 레이어 : 유용한 연산자 집합
  • 머신러닝 모델은 단순한 레이어를 쌓고 조합하여 표현할 수 있다.
  • 텐서플로우는 여러 표준 레이어를 제공하기 때문에 처음부터 고유의 프로그램에 최적화된 레이어를 작성하거나 기존 레이어를 조합해 쉽게 모델을 만들 수 있다.
  • 텐서플로우는 케라스의 모든 API를 tf.keras에 포함하고 있다. 여기서 얻어낸 케라스 레이어로 모델을 구축하면 된다.
  • 대부분의 레이어는 처음 파라미터로 출력차원의 크기 혹은 채널을 가진다.
  • 입력 차원의 수는 따로 설정하지 않아도 유추하지만 그래도 모델이 복잡할 경우 입력해주는 것이 좋다.
layer = tf.keras.layers.Dense(10, input_shape=(None, 5))
  • 위는 레이어의 한 종류인 완전 연결 레이어이다.
layer.kernel, layer.bias
  • kernel 변수와 bias 변수 내에 레이어의 가중치와 편향에 관련된 정보가 존재한다.

사용자 정의 레이어 구현

  • 사용자 레이어를 구현하는 간단한 방법은 tf.keras.Layer 클래스를 상속받아 재정의 하는 것이다.
class MyDenseLayer(tf.keras.layers.Layer):
    def __init__(self, num_outputs):
        super(MyDenseLayer, self).__init__()
        self.num_outputs = num_outputs

    def build(self, input_shape):
        self.kernel = self.add_variable("kernel",
                                    shape=[int(input_shape[-1]),
                                           self.num_outputs])

    def call(self, input):
        return tf.matmul(input, self.kernel)
  • __init__ : 레이어에 필요한 매개변수를 입력고 레이어 클래스의 멤버변수들을 초기화한다.
  • build : init에서 초기화하지 못한 남은 멤버변수를 초기화한다.
  • call : 정방향 연산의 방식을 정의한다.
  • 위 코드는 대표적인 예시일 뿐이며, 얼마든지 형태는 바뀔 수 있다. (멤버변수 추가, 계산방식 변경 등)
  • 이렇게 설정된 사용자 레이어는 일반 레이어와 같이 사용할 수 있다.

기존 레이어 구성 모델 제작

  • 대부분의 머신러닝 모델은 기존 레이어 조합으로 구성된다.
  • ex. 레즈넷(resnet) : 합성곱, 배치 정규화, 쇼트컷 등으로 구성
# 레즈넷(resnet)
my_seq = tf.keras.Sequential([tf.keras.layers.Conv2D(1, (1, 1), input_shape=(None, None, 3)),
                             tf.keras.layers.BatchNormalization(),
                             tf.keras.layers.Conv2D(2, 1, padding='same'),
                             tf.keras.layers.BatchNormalization(),
                             tf.keras.layers.Conv2D(3, (1, 1)),
                             tf.keras.layers.BatchNormalization()])
  • Sequential에 각종 레이어를 쌓아 모델을 만든다.
반응형