작성일: 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
[6] Dense Layer란?