③ GradientTape는 미분을 자동으로 계산합니다. 즉, 미분을 자동 계산해서 동적으로 기울기 값들을 확인할 수 있는 장점이 있습니다. 따라서 tape.gradient(loss, self.trainable_variables)는 손실에 대한 self.trainable_variables의 미분 값을 계산한다는 의미입니다.
인코더와 디코더를 위한 네트워크(신경망)를 생성합니다.
코드 13-11 인코더와 디코더 네트워크 생성
encoder = [
tf.keras.layers.InputLayer(input_shape=(28,28,1)),
tf.keras.layers.Conv2D(
filters=32, kernel_size=3, strides=(2,2), activation="relu"
),
tf.keras.layers.Conv2D(
filters=64, kernel_size=3, strides=(2,2), activation="relu"
),
tf.keras.layers.Flatten(),
tf.keras.layers.Dense(units=2*2),
] ------ ①
decoder = [
tf.keras.layers.Dense(units=7 * 7 * 64, activation="relu"),
tf.keras.layers.Reshape(target_shape=(7,7,64)),
tf.keras.layers.Conv2DTranspose(
filters=64, kernel_size=3, strides=(2,2), padding="SAME", activation="relu"
),
tf.keras.layers.Conv2DTranspose(
filters=32, kernel_size=3, strides=(2,2), padding="SAME", activation="relu"
),
tf.keras.layers.Conv2DTranspose(
filters=1, kernel_size=3, strides=(1,1), padding="SAME", activation="sigmoid"
),
] ------ ②