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은 x1x2 를 더하여 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
backboneactivations 모델은 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 LayerFully Connected Layer(FC) 라고도 불리며, 모든 값들을 연결하여 압축해줌. 이는 모델에서 가장 일반적으로 사용되는 Layer.
Dense Layer 은,
백그라운드에서 행렬(벡터) 곱셈 연산을 수행.
연산 결과에 sigmod , softmax 함수 등을 통해 확률값으로 변환.
Dense Layerinput 값은 매개변수.
역전파를 통해 저장 및 업데이트 가능.
Dense Layeroutput 는 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