Tensorflow 에서 레이어를 구성하는 방법에는 두가지가 있는데, 하나는 Sequential 나머지 하나는 Functional 이다.
Sequential 방법이 보기에는 비교적 직관적이라 코딩하기 쉬울수는 있지만, 레이어간의 입력과 출력을 직접 만지는 것은 불가능해서 복잡한 모델을 구성하기에는 부적합 할때가 있다.
그럴때 쓰는 방법이 Functional 방법이다.
model = model.Sequential()
model.add(layers.Conv2D(32, (3, 3), activation='relu'm input_shape=(28, 28, 1)))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu'))
model.add(layers.Flatten())
model.add(layers.Dense(64, activation='relu'))
model.add(layers.Dense(10, activation='softmax'))
model.complie(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
위에 코딩이 Sequential 방법
inputs_img = kereas.Input(shape=(28, 28, 1), name='Images')
x = layers.Conv2D(32, (3, 3), activateion='relu')(input_img)
x = layers.MaxPooling2D((2, 2))(x)
x = layers.Conv2D(64, (3, 3), activateion='relu')(input_img)
x = layers.MaxPooling2D((2, 2))(x)
outputs_img = layers.Conv2D(64, (3, 3), activation='relu')(x)
x = layers.Flatten()(outputs_img)
x = layers.Dense(64, activation='relu')(x)
outputs = layers.Dense(10, activation='softmax')(x)
model = keras.Model(inputs = inputs_img, outputs = outputs, name='MNIST_model')
model.compile(optimizer = 'adam',
loss='sparse_cross_categorical',
metrics=['accuracy'])
이 방법이 Functional 방법이다. 같이 놓고 비교하면 큰 차이는 없지만 약간 진행 방법이 다르다.
Sequential 은 model 이라는 인스턴스를 먼저 생성해놓고 그 안에 레이어를 순서대로 쌓아가는 느낌이고,
Functional 은 시작점 부터 시작해서 레이어의 출력과 다음 레이어의 입력을 노드로 이어가는 느낌이다.