GAN(Generate Advertise network)のコードについての質問です。
GANのこちらのサイトを見本にして、コードを作成しました。
その結果、mnistのような28×28ピクセルの画像では、Generator、Discriminator共に学習が進むと共に誤差が減っていって学習データに近い画像を出力できるようになるのですが、200×200ピクセルのように画像サイズを大きくすると誤差が小さくならずに、一定の値になって学習が進まなくなってしまいます。
以下、Generator、Discriminatorのコードを記載します。
Generatorのコード
Python
1 def build_generator(self): 2 3 # z_dim:Generatorに与えるノイズの次元数 4 noise_shape = (self.z_dim,) 5 model = Sequential() 6 7 model.add(Dense(256, input_shape=noise_shape)) 8 model.add(LeakyReLU(alpha=0.2)) 9 model.add(BatchNormalization(momentum=0.8)) 10 model.add(Dense(512)) 11 model.add(LeakyReLU(alpha=0.2)) 12 model.add(BatchNormalization(momentum=0.8)) 13 model.add(Dense(1024)) 14 model.add(LeakyReLU(alpha=0.2)) 15 model.add(BatchNormalization(momentum=0.8)) 16 # Discriminatorへの入力になるため、Discriminatorの入力に次元数を合わせる 17 model.add(Dense(np.prod(self.img_shape), activation='tanh')) 18 model.add(Reshape(self.img_shape)) 19 20 model.summary() 21 22 return model
Discriminatorのコード
Python
1 def build_discriminator(self): 2 img_shape = (self.img_rows, self.img_cols, self.channels) 3 4 model = Sequential() 5 model.add(Flatten(input_shape=img_shape)) 6 7 model.add(Dense(512)) 8 model.add(LeakyReLU(alpha=0.2)) 9 model.add(Dense(256)) 10 model.add(LeakyReLU(alpha=0.2)) 11 model.add(Dense(1, activation='sigmoid')) 12 model.summary() 13 14 return model
また、最適化関数はAdamで学習率は0.0002です。
やはり200×200ピクセルの画像を学習させようと思ったら、model.add(Dense(ノード数))のノード数をもっと増やさないとできないのでしょうか?
それとも、最適化関数の学習率を調整しないといけないのでしょうか?
原因、改善方法が分かる方がおられましたら宜しくお願い致します。
あなたの回答
tips
プレビュー