質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

解決済

DCGANの実装について

matt17
matt17

総合スコア0

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

2回答

0評価

1クリップ

6閲覧

投稿2018/10/18 12:19

https://github.com/triwave33/GAN/tree/master/GAN/dcganを参考にkerasでDCGANを実装しています

epochが先に進まないのでどなたかご教授お願い致します。

発生している問題・エラーメッセージ

FileNotFoundError: [Errno 2] No such file or directory: '/img/img/mnist__0.png'

該当のソースコード

python

from __future__ import print_function, division from keras.datasets import mnist from keras.layers import Input, Dense, Reshape, Flatten, Dropout from keras.layers import BatchNormalization, Activation, ZeroPadding2D from keras.layers.advanced_activations import LeakyReLU from keras.layers.convolutional import UpSampling2D, Convolution2D from keras.models import Sequential, Model, load_model from keras.optimizers import Adam import matplotlib.pyplot as plt import sys import numpy as np class DCGAN(): def __init__(self): self.path = "/vans/img/img/" self.img_rows = 28 self.img_cols = 28 self.channels = 1 self.img_shape = (self.img_rows, self.img_cols, self.channels) self.z_dim = 5 self.row = 5 self.col = 5 self.row2 = 1 self.col2 = 10 # 画像生成用の固定された入力潜在変数 self.noise_fix1 = np.random.normal(0, 1, (self.row * self.col, self.z_dim)) # 連続的に潜在変数を変化させる際の開始、終了変数 self.noise_fix2 = np.random.normal(0, 1, (1, self.z_dim)) self.noise_fix3 = np.random.normal(0, 1, (1, self.z_dim)) # 横軸がiteration数のプロット保存用np.ndarray self.g_loss_array = np.array([]) self.d_loss_array = np.array([]) self.d_accuracy_array = np.array([]) self.d_predict_true_num_array = np.array([]) self.c_predict_class_list = [] discriminator_optimizer = Adam(lr=1e-5, beta_1=0.1) combined_optimizer = Adam(lr=2e-4, beta_1=0.5) # discriminatorモデル self.discriminator = self.build_discriminator() self.discriminator.compile(loss='binary_crossentropy', optimizer=discriminator_optimizer, metrics=['accuracy']) # Generatorモデル self.generator = self.build_generator() # generatorは単体で学習しないのでコンパイルは必要ない #self.generator.compile(loss='binary_crossentropy', optimizer=optimizer) self.combined = self.build_combined1() #self.combined = self.build_combined2() self.combined.compile(loss='binary_crossentropy', optimizer=combined_optimizer) # Classifierモデル self.classifier = self.build_classifier() def build_generator(self): noise_shape = (self.z_dim,) model = Sequential() model.add(Dense(1024, input_shape=noise_shape)) model.add(BatchNormalization()) model.add(Activation('relu')) model.add(Dense(128*7*7)) model.add(BatchNormalization()) model.add(Activation('relu')) model.add(Reshape((7,7,128), input_shape=(128*7*7,))) model.add(UpSampling2D((2,2))) model.add(Convolution2D(64,5,5,border_mode='same')) model.add(BatchNormalization()) model.add(Activation('relu')) model.add(UpSampling2D((2,2))) model.add(Convolution2D(1,5,5,border_mode='same')) model.add(Activation('tanh')) model.summary() return model def build_discriminator(self): img_shape = (self.img_rows, self.img_cols, self.channels) model = Sequential() model.add(Convolution2D(64,5,5, subsample=(2,2),\ border_mode='same', input_shape=img_shape)) model.add(LeakyReLU(0.2)) model.add(Convolution2D(128,5,5,subsample=(2,2))) model.add(LeakyReLU(0.2)) model.add(Flatten()) model.add(Dense(256)) model.add(LeakyReLU(0.2)) model.add(Dropout(0.5)) model.add(Dense(1)) model.add(Activation('sigmoid')) return model def build_combined1(self): self.discriminator.trainable = False model = Sequential([self.generator, self.discriminator]) return model def build_combined2(self): z = Input(shape=(self.z_dim,)) img = self.generator(z) self.discriminator.trainable = False valid = self.discriminator(img) model = Model(z, valid) model.summary() return model def build_classifier(self): model = load_model("cnn_model.h5") model.load_weights('cnn_weight.h5') return model def train(self, epochs, batch_size=128, save_interval=50): (X_train, _), (_, _) = mnist.load_data() X_train = (X_train.astype(np.float32) - 127.5) / 127.5 X_train = np.expand_dims(X_train, axis=3) half_batch = int(batch_size / 2) self.g_loss_array = np.zeros(epochs) self.d_loss_array = np.zeros(epochs) self.d_accuracy_array = np.zeros(epochs) self.d_predict_true_num_array = np.zeros(epochs) for epoch in range(epochs): noise = np.random.normal(0, 1, (half_batch, self.z_dim)) gen_imgs = self.generator.predict(noise) idx = np.random.randint(0, X_train.shape[0], half_batch) imgs = X_train[idx] d_loss_real = self.discriminator.train_on_batch(imgs, np.ones((half_batch, 1))) d_loss_fake = self.discriminator.train_on_batch(gen_imgs, np.zeros((half_batch, 1))) d_loss = 0.5 * np.add(d_loss_real, d_loss_fake) d_predict = self.discriminator.predict_classes(np.concatenate([gen_imgs,imgs]), verbose=0) d_predict = np.sum(d_predict) c_predict = self.classifier.predict_classes(np.concatenate([gen_imgs,imgs]), verbose=0) noise = np.random.normal(0, 1, (batch_size, self.z_dim)) valid_y = np.array([1] * batch_size) g_loss = self.combined.train_on_batch(noise, valid_y) print ("%d [D loss: %f, acc.: %.2f%%] [G loss: %f]" % (epoch, d_loss[0], 100*d_loss[1], g_loss)) self.g_loss_array[epoch] = g_loss self.d_loss_array[epoch] = d_loss[0] self.d_accuracy_array[epoch] = 100*d_loss[1] self.d_predict_true_num_array[epoch] = d_predict self.c_predict_class_list.append(c_predict) if epoch % save_interval == 0: self.save_imgs(self.row, self.col, epoch, '', noise) self.save_imgs(self.row, self.col, epoch, 'fromFixedValue', self.noise_fix1) total_images = self.row*self.col noise_trans = np.zeros((total_images, self.z_dim)) for i in range(total_images): t = (i*1.)/((total_images-1)*1.) noise_trans[i,:] = t * self.noise_fix2 + (1-t) * self.noise_fix3 self.save_imgs(self.row2, self.col2, epoch, 'trans', noise_trans) noise = np.random.normal(0, 1, (10000, self.z_dim)) class_res = self.classifier.predict_classes(self.generator.predict(noise), verbose=0) plt.hist(class_res) plt.savefig("/img/img/mnist_hist_%d.png" % epoch) plt.ylim(0,2000) plt.close() fig, ax = plt.subplots(4,1, figsize=(8.27,11.69)) ax[0].plot(self.g_loss_array[:epoch]) ax[0].set_title("g_loss") ax[1].plot(self.d_loss_array[:epoch]) ax[1].set_title("d_loss") ax[2].plot(self.d_accuracy_array[:epoch]) ax[2].set_title("d_accuracy") ax[3].plot(self.d_predict_true_num_array[:epoch]) ax[3].set_title("d_predict_true_num_array") fig.suptitle("epoch: %5d" % epoch) fig.savefig(self.path + "training_%d.png" % epoch) plt.close() self.generator.save_weights(self.path + "generator_%s.h5" % epoch) self.discriminator.save_weights(self.path + "discriminator_%s.h5" % epoch) def save_imgs(self, row, col, epoch, filename, noise): gen_imgs = self.generator.predict(noise) gen_imgs = 0.5 * gen_imgs + 0.5 fig, axs = plt.subplots(row, col) cnt = 0 if row == 1: for j in range(col): axs[j].imshow(gen_imgs[cnt, :,:,0], cmap='gray') axs[j].axis('off') cnt += 1 else: for i in range(row): for j in range(col): axs[i,j].imshow(gen_imgs[cnt, :,:,0], cmap='gray') axs[i,j].axis('off') cnt += 1 fig.suptitle("epoch: %5d" % epoch) fig.savefig("/img/img/mnist_%s_%d.png" % (filename, epoch)) plt.close() if __name__ == '__main__': gan = DCGAN() gan.train(epochs=100000, batch_size=32, save_interval=1000)

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。