GANとは Generative Adversarial Network の略語、簡単に言うと贋作をつくるやつ。 例によって MNIST のデータセットを使う。
MNIST を使って cGAN( Conditional Generative Adversarial Network ) を使うと、 数字を指定して、その数字の贋作手描き数字画像をつくれるとのこと。
ここではまだ GAN / DCGAN を試しただけです。
一番基本的な GAN。Dense 層を使ったモデルにて訓練。
順にトレーニング回数が 1000 → 5000 → 15000 → 20000回:
モデルに CNN (Conv2D など) を使うもの。
順にトレーニング回数が 1000 → 5000 → 15000 → 20000回:
TensorFlow v2.13.0 を使用。
書籍 実践GAN のコードは TensorFlow v1 ベースの例なので、TensorFlow v2 で使う場合は注意が必要でした。
BatchNormalization を tensorflow.keras.layers.BatchNormalization ではなく、 TensorFlow v1 時代の tensorflow.compat.v1.keras.layers.BatchNormalization を使う必要がありました。
このページ( https://www.tensorflow.org/tutorials/generative/dcgan )を参考に TensorFlow v2 対応の記述に変更して試した結果。
順にトレーニング エポック数 1 → 15 → 30 → 50エポック目:
モデルは先程と変わらないので、結果は似たようなものです。 こちらのコードは、 サンプルとして生成させた画像 16個のシードを常に同じシード値を使っている関係で、 同じ位置には同じ数字が生成されている。このことによりエポックごとの変化が比較しやすい。