728x90
반응형
Keras
케라스를 활용한 모델 구축 방법
Seuqential API
- tf.keras.Sequential
- 순차적인 레이어의 스택 구현 가능
from tensorflow.keras import layers
model = tf.keras.Sequential()
model.add(layers.Dense(64, activation='relu'))
model.add(layers.Dense(64, activation='relu'))
model.add(layers.Dense(10, activation='softmax'))
- 모델 구현 제약
- 모델의 층들이 순차적으로 구성되어 있지 않은 경우 Sequential 모듈을 사용해 구현 어려움
Functional API
- 다중 입력값 모델(Multi-input models)
- 다중 출력값 모델(Multi-output models)
- 공유 층을 활용하는 모델(Models with shared layers)
- 데이터 흐름이 순차적이지 않은 모델(Models with non-sequential data flows)
from tensorflow.keras import layers
inputs = tf.keras.Input(shape=(32,))
x = layers.Dense(64, activation='relu')(inputs)
x = layers.Dense(64, activation='relu')(x)
predictions = layers.Dense(10, activation='softmax')(x)
Custom Layers
여러 layers를 하나로 묶어 재사용성을 높이고 싶은 경우 사용자 정의 층 정의
# layers 패키지의 Layer 클래스 상속
class CustomLayer(layers.Layer):
# 하이퍼파라미터는 객체를 생성할 때 호출되도록 __init__메서드에서 정의
def __init__(self, hidden_dimension, hidden_dimension2, output_dimension):
self.hidden_dimension = hidden_dimension
self.hidden_dimension2 = hidden_dimension2
self.output_dimension = output_dimension
super(CustomLayer, self).__init__()
# 모델의 가중치와 관련된 값은 buid 메서드에서 생성되도록 정의
def build(self, input_shape):
self.dense_layer1 = layers.Dense(self.hidden_dimension, activation = 'relu')
self.dense_layer2 = layers.Dense(self.hidden_dimension2, activation = 'relu')
self.dense_layer3 = layers.Dense(self.output_dimension, activation = 'softmax')
# 정의된 값들을 이용해 call 메서드에서 해당 층의 로직을 정의
def call(self, inputs):
x = self.dense_layer1(inputs)
x = self.dense_layer2(x)
return self.dense_layer3(x)
from tensorflow.keras import layers
model = tf.kears.Sequential()
model.add(CustomLayer(64, 64, 10))
Subclassing (Custom Model)
tf.keras.Model을 상속받고 모델 내부 연산들을 직접 구현
class MyModel(tf.keras.Model):
# 객체를 생성할 때 호출되는 메서드
def __init__(self, hidden_dimension, hidden_dimension2, output_dimension):
super(MyModel, self).__init__(name='my model')
self.dense_layer1 = layers.Dense(hidden_dimension, activation = 'relu')
self.dense_layer2 = layers.Dense(hidden_dimension2, activation = 'relu')
self.sense_layer3 = laerys.Dense(output_dimension, activation = 'softmax')
#생성된 인스턴스를 호출할 때(즉, 모델 연산이 사용될 때) 호출되는 메서드
def call(self, inputs):
x = self.dense_layer1(inputs)
x = self.dense_layer2(x)
return self.dense_layer3(x)
모델학습
Tensorflow2.0 모델 학습 방법
- keras 모델의 내장 API 활용
- model.fit()
- model.evaluate()
- model.predict()
- 학습, 검증, 예측 등 모든 과정을 GradientTape 객체를 활용해 직접 구현하는 방법
학습 과정 정의
model.compile(optimizer = tf.keras.optimizers.Adam(),
loss = tf.keras.losses.CategoricalCrossentropy(),
metrics = [tf.keras.metrics.Accuracy()])
model.compile(optimizer = 'adam',
loss = 'categorical_crossentropy',
metrics = ['accuracy'])
학습 진행
model.fit(x_train, y_train, batch_size=64, epochs=3)
# epoch마다 검증 결과를 보기 위해 데이터를 추가
model.fit(x_train, y_train, batch_size=64, epochs=3, validation_data=(x_val, y_val))
References
728x90
반응형
'Machine Learning > TensorFlow' 카테고리의 다른 글
[Machine Learning] Neural Network MNIST 데이터 처리 (0) | 2021.03.04 |
---|---|
[Machine Learning] Model Save & Load (0) | 2021.03.03 |
[Machine Learning] TensorFlow Function (0) | 2021.02.27 |
[Machine Learning] TensorFlow Matrix (0) | 2021.02.27 |
[Machine Learning] TensorFlow Basic (0) | 2021.02.26 |