더북(TheBook)

① 인코더 역할은 데이터(x)가 주어졌을 때 디코더가 원래 데이터로 잘 복원할 수 있는 z를 샘플링하여 이상적인 확률 분포 p(z|x)를 찾는 것입니다. 변형 오토인코더에서는 이상적인 확률 분포를 찾는 데 변분추론을 사용합니다.

② 디코더는 추출한 샘플을 입력으로 받아 다시 원본 데이터와 유사한 데이터를 재구축하는 역할을 수행합니다.

앞서 생성한 네트워크를 이용하여 모델을 정의합니다.

코드 13-12 모델 정의

model = VAE(
    enc=encoder,
    dec=decoder,
    optimizer=tf.keras.optimizers.Adam(1e-3)
)

모델 훈련 결과를 시각화하는 함수를 생성합니다.

코드 13-13 모델 훈련 결과 시각화

example_data = next(iter(test_dataset))
def plot_reconstruction(model, example_data, nex=8, zm=2):

    example_data_reconstructed = model.reconstruct(example_data)
    samples = model.decode(tf.random.normal(shape=(BATCH_SIZE,2)))
    fig, axs = plt.subplots(ncols=nex, nrows=3, figsize=(zm*nex, zm*3))
    for axi, (dat, lab) in enumerate(
        zip(
            [example_data, example_data_reconstructed, samples],
            ["data", "data recon", "samples"],
        )
    ):
        for ex in range(nex):
            axs[axi, ex].matshow(
                dat.numpy()[ex].squeeze(), cmap=plt.cm.Greys, vmin=0, vmax=1
            )
            axs[axi, ex].axes.get_xaxis().set_ticks([])
            axs[axi, ex].axes.get_yaxis().set_ticks([])
        axs[axi, 0].set_ylabel(lab)
    plt.show()
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.