Machine Learning/TensorFlow

[Machine Learning] TensorFlow with Keras

데이터 세상 2021. 3. 2. 22:59
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
반응형