tf.keras.models.Sequential([]) 로 list의 형태로 layer 들을 넣어주고 compile , fit, evaluate 과정으로 모델을 생성하는 방법
# 예시
model = Sequential([
Dense(5, actication='relu', input_shape=(4,)),
Dense(10, activation='relu'),
Dense(3, activation='softmax'),
])
model.summary()
model = tf.keras.Sequential() 로 add() 함수를 사용해서 tensorflow가 미리 만들어준 Dense layer와 같은 layer를 넣어준다.
model = tf.keras.Sequential()
model.add(tf.keras.layers.Dense(8))
model.add(tf.keras.layers.Dense(1))
model.compile(optimizer='sgd', loss='mse')
model.fit(x, y, batch_size=32, epochs=10)
배우지 않았음
input를 마치 함수처럼 사용해서 layer의 뒤에 붙여주고 x에 return을 넣어줌을써 연쇄적으로 반응하도록 한다. 모델을 만들면서 한번에 통과시킨다.
# 예시
inputs = Input(shape=(4,))
x = Dense(5, activation='relu')(input)
x = Dense(10, activation='relu')(x)
outputs = Dense(3, activation='softmax')(x)
model = Model(inputs=inputs, outputs=outputs)
model.summary()
model subclassing
# 예시
class ResnetIdentityBlock(tf.keras.Model):
def __init__(self, kernel_size, filters):
super(ResnetIdentityBlock, self).__init__(name='')
filters1, filters2, filters3 = filters
self.conv2a = tf.keras.layers.Conv2D(filters1, (1, 1))
self.bn2a = tf.keras.layers.BatchNormalization()
self.conv2b = tf.keras.layers.Conv2D(filters2, kernel_size, padding='same')
self.bn2b = tf.keras.layers.BatchNormalization()
self.conv2c = tf.keras.layers.Conv2D(filters3, (1, 1))
self.bn2c = tf.keras.layers.BatchNormalization()
def call(self, input_tensor, training=False):
x = self.conv2a(input_tensor)
x = self.bn2a(x, training=training)
x = tf.nn.relu(x)
x = self.conv2b(x)
x = self.bn2b(x, training=training)
x = tf.nn.relu(x)
x = self.conv2c(x)
x = self.bn2c(x, training=training)
x += input_tensor
return tf.nn.relu(x)
block = ResnetIdentityBlock(1, [1, 2, 3])
custom layer subclassing

add() 함수로 많이 늘어나는 모델을 inception model 을 통해 여러개의 모듈을 만들어 놓은 상태에서 custom layer를 만들고 add() 함수에 넣어줌으로써 가시성이 있게 만들어 줄 수 있다.
사용자 정의층을 만들어본다.
이전의 tf.keras.model 과 달리 class MyDenseLayer(tf.keras.layers.Layer): 로 만들어진다. custom layer를 만들 때, model subclassing을 통해서 만들고 model.add() 를 사용해서 작성한다.
class MyDenseLayer(tf.keras.layers.Layer):
def __init__(self, num_outputs):
super(MyDenseLayer, self).__init__()
self.num_outputs = num_outputs
def build(self, input_shape):
self.kernel = self.add_weight("kernel",
shape=[int(input_shape[-1]),
self.num_outputs])
def call(self, inputs):
return tf.matmul(inputs, self.kernel)
layer = MyDenseLayer(10)
모델 내에 들어가는 layer 들이 custom layer 일 때 layer를 subclass으로 해준다. 모델의 내부에 sequential 로 custom layer 를 넣어준다.
tf.keras.models
tf.keras.layers