Search

[Archive] tf.keras.(Input & Model) & tf.keras.layers.(Lambda & Add & ZeroPadding2D & Dense)

Created
2022/08/17
Last modified date
2022/08/19
Tags
ai
URL
💡
작성일: 2022.08.17 (Wed)

What is Input func?

Input()은 Keras 텐서를 인스턴스화하기 위해 사용.
tf.keras.Input( shape=None, batch_size=None, name=None, dtype=None, sparse=None, tensor=None, ragged=None, type_spec=None, **kwargs )
Python
복사
Parameter of Input()

What is Lambda func?

임의의 표현식을 Layer Object로 감싸기 위해 사용.
tf.keras.layers.Lambda( function, output_shape=None, mask=None, arguments=None, **kwargs )
Python
복사
Parameter of Lambda()

What is Add func?

Input list를 더하는 Layer로 사용.
tf.keras.layers.Add( **kwargs )
Python
복사
Parameter of Add()
input1 = tf.keras.layers.Input(shape=(16,)) x1 = tf.keras.layers.Dense(8, activation='relu')(input1) input2 = tf.keras.layers.Input(shape=(32,)) x2 = tf.keras.layers.Dense(8, activation='relu')(input2) # equivalent to `added = tf.keras.layers.add([x1, x2])` added = tf.keras.layers.Add()([x1, x2]) out = tf.keras.layers.Dense(4)(added) model = tf.keras.models.Model(inputs=[input1, input2], outputs=out)
Python
복사
Usage of Add()
위의 예시에서, Add function은 x1 과 x2 를 더하여 out 를 얻기 위한 input 을 만듦. 예를 들어, x1 = |x1_11| x2 = |x2_11| |x1_21| |x2_21| input = Add()([x1, x2]) # 예상 # input = |x1_11 + x2_11| # |x1_21 + x2_21|
💡
작성일: 2022.08.18 (Thu)

What is ZeroPadding2D func?

Input에 padding 추가할 때 사용.
2 개의 튜플 중 2 개의 튜플 인 경우 : ((top_pad, bottom_pad), (left_pad, right_pad)) 로 해석.
tf.keras.layers.ZeroPadding2D( padding=(1, 1), data_format=None, **kwargs )
Python
복사
Parameter of ZeroPadding2D()
x = ZeroPadding2D(((1,0),(1,0)))(x) # Zero padding as darknet prefer left and top
Python
복사
Usage of ZeroPadding2D()
💡
작성일: 2022.08.19 (Fri)

What is Model func?

Model 함수는 훈련 및 추론 기능을 사용하여 Layer를 Object로 그룹화할 때 사용.
tf.keras.Model( *args, **kwargs )
Python
복사
Parameter of Model()
Model을 인스턴스화하는 방법 두 가지 존재.
Method 1: Input 함수 사용
Input 에서 시작하는 Functional API를 통해 Layer 호출을 연결하여 모델의 정방향(forward pass) 지정하고 마지막으로 입력 및 출력에서 모델 만듦.
import tensorflow as tf inputs = tf.keras.Input(shape=(3,)) x = tf.keras.layers.Dense(4, activation=tf.nn.relu)(inputs) outputs = tf.keras.layers.Dense(5, activation=tf.nn.softmax)(x) model = tf.keras.Model(inputs=inputs, outputs=outputs)
Python
복사
Usage of Model() - 1
inputs = keras.Input(shape=(None, None, 3)) processed = keras.layers.RandomCrop(width=32, height=32)(inputs) conv = keras.layers.Conv2D(filters=2, kernel_size=3)(processed) pooling = keras.layers.GlobalAveragePooling2D()(conv) feature = keras.layers.Dense(10)(pooling) full_model = keras.Model(inputs, feature) backbone = keras.Model(precessed, conv) activations = keras.Model(conv, feature)
Python
복사
Usage of Model() - 2
backbone 및 activations 모델은 keras.Input 객체에서 생성된 텐서로 생성.
keras.Input 함수를 통해 생성되는 객체가 아님.
Hood 아래서 Layer가 Weights는 이런 모델 간에 공유되기에, 사용자는 full_model 을 훈련하고 특징 추출을 위해 backbone 또는 activations 사용 가능.
모델의 Input과 Output은 텐서의 중첩 구조일 수 있으며, 생성된 모델은 기존의 모든 API를 지원하는 표준 Functional API 모델임.
Mothod 2: Model 클래스의 서브클래싱
Model 클래스를 서브클래싱하는 경우, __init__() 에서 Layer를 정의하고 call() 에서 모델의 정방향(forward pass) 전달 구현.
import tensorflow as tf class MyModel(tf.keras.Model): def __init__(self): super().__init__() self.dense1 = tf.keras.layers.Dense(4, activation=tf.nn.relu) seld.dense2 = tf.keras.layers.Dense(5, activation=tf.nn.softmax) def call(self, inputs): x = self.dense1(inputs) return self.dense2(x) model = MyModel()
Python
복사
Usage of sub-classing Model() - 1
Model 을 서브클래싱하는 경우, 선택적으로 call() 에 training 인수(부울)를 가질 수 있음. 이를 사용하여 훈련 및 추론에서 다른 동작 지정 가능.
import tensorflow as tf class MyModel(tf.keras.Model): def __init__(self): super().__init__() self.dense1 = tf.keras.layers.Dense(4, activation=tf.nn.relu) self.dense1 = tf.keras.layers.Dense(5, activation=tf.nn.softmax) seld.dropout = tf.keras.layers.Dropout(0.5) def call(self, inputs, training=False): x = self.dense1(inputs) if training: x = self.dropout(x, training=training) return self.dense2(x) model = MyModel
Python
복사
Usage of sub-classing Model() - 2
이렇게 모델 생성 이후,
model.compile() 을 통해, loss 등 모델 설정(config) 가능.
model.fit() 을 통해, 모델 학습(train) 가능.
model.predict() 을 통해, 모델 예측(prediction) 가능.
Q&A
model = keras.models.Sequential() model.add(keras.layers.Flatten(input_shape=[28,28])) model.add(keras.layers.Dense(300, activation='relu')) model.add(keras.layers.Dense(100, activation='relu')) model.add(keras.layers.Dense(10, activation='softmax'))
Python
복사
model = keras.models.Sequential([ keras.layers.Flatten(input_shape=[28,28]), keras.layers.Dense(300, activation='relu'), keras.layers.Dense(100, activation='relu'), keras.layers.Dense(10, activation='softmax') ])
Python
복사
def compose(*funcs): return reduce(lambda f, g: lambda *a, **kw: g(f(*a, **kw)), funcs) outputs = compose(keras.layers.Flatten(input_shape=[28,28]), keras.layers.Dense(300, activation='relu'), keras.layers.Dense(100, activation='relu'), keras.layers.Dense(10, activation='softmax')) model = tf.keras.models.Model(inputs, outputs)
Python
복사
ETC.
model.summary() : 간략한 모델 구조 확인 가능.
Result of model.summary()
model.layers : 모델 구성하는 Layer 정보 확인 가능.

What is Dense Layer?

Dense Layer 는 Fully Connected Layer(FC) 라고도 불리며, 모든 값들을 연결하여 압축해줌. 이는 모델에서 가장 일반적으로 사용되는 Layer.
Dense Layer 은,
백그라운드에서 행렬(벡터) 곱셈 연산을 수행.
연산 결과에 sigmod , softmax 함수 등을 통해 확률값으로 변환.
Dense Layer 의 input 값은 매개변수.
역전파를 통해 저장 및 업데이트 가능.
Dense Layer 의 output 는 flatten된 ‘m’ 차원 벡터.
차원 변경을 위해 Dense Layer 사용 가능.
tf.keras.layers.Dense( units, activation=None, use_bias=True, kernel_initializer='glorot_uniform', bias_initializer='zeros', kernel_regularizer=None, bias_regularizer=None, activity_regularizer=None, kernel_constraint=None, bias_constraint=None, **kwargs )
Python
복사
Parameter of Dense()
Reference