3.3 Conditional GAN

Conditional GAN の概要

DCGAN はノイズ $z$ から $0$ ~ $9$ の数字の画像を生成したが、生成する数字の種類を指定することはできなかった。指定できるように変更したのが Conditional GAN (CGAN) である。

損失関数

$\displaystyle \min{G} \max{D} L(D, G) = \mathbb{E}{x \thicksim p{data}(x)} [\log D(x|y)]

$x$: データ分布 $p_{addr}(x)$ から取得される画像
$y$: 条件
$z$: ランダムノイズ

DCGAN はノイズ $z$ を生成器に入力したが、CGAN はノイズ $z$ にクラスを指定する one hot vector を結合して生成器に入力する。

識別器に入力する画像にもクラスを指定する情報が必要となる。 識別器への入力は(C, H, W)形式の画像で3次元となる。 one hot vector を画像サイズに拡大したクラス数ぶんの条件画像をチャネル方向に結合する。 このとき、「すべての要素が1」の条件画像が1枚と、残りは「すべての要素が0」の条件画像となる。

Contitional GAN の実装

DCGAN はチャネル数 100 のランダムノイズを B 個用意した。

CGAN は、チャネル数 100 にクラス数10を追加し、(B, 110, 1, 1) のTensorを作成する。

データセットの作成

2.1の「データセットの作成」で示したように、MNISTのデータはダウンロードするときにエラーが起きるようになった。そのため、MNISTは手動でダウンロードして ../ch02/data/"にMNISTとして展開してある。

2.1章では画像データをTensorに変換した後、x.view(-1)を行った。 今回は transform.Normalize((0.5,), (0.5,)) する点が異なる。

ネットワークの定義

学習の実行

epoch10におけるfake画像