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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Keras

Kerasは、TheanoやTensorFlow/CNTK対応のラッパーライブラリです。DeepLearningの数学的部分を短いコードでネットワークとして表現することが可能。DeepLearningの最新手法を迅速に試すことができます。

深層学習

深層学習は、多数のレイヤのニューラルネットワークによる機械学習手法。人工知能研究の一つでディープラーニングとも呼ばれています。コンピューター自体がデータの潜在的な特徴を汲み取り、効率的で的確な判断を実現することができます。

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python 3.x

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

Q&A

0回答

654閲覧

深層学習pix2pixのように入力に画像を用いるGANの実装 学習部分generator内の値更新方法についての質問

oriharas

総合スコア12

Keras

Kerasは、TheanoやTensorFlow/CNTK対応のラッパーライブラリです。DeepLearningの数学的部分を短いコードでネットワークとして表現することが可能。DeepLearningの最新手法を迅速に試すことができます。

深層学習

深層学習は、多数のレイヤのニューラルネットワークによる機械学習手法。人工知能研究の一つでディープラーニングとも呼ばれています。コンピューター自体がデータの潜在的な特徴を汲み取り、効率的で的確な判断を実現することができます。

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python 3.x

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

0グッド

0クリップ

投稿2019/01/19 01:30

編集2022/01/12 10:55

前提・実現したいこと。

Kerasを用いて、以下のようなGANの実装を行なっています。
生成部分はAutoencoderのように入力は画像で出力は入力と同じ画像を復元した画像です、復元された画像を判別器に入力し自作データセット上にある画像かどうかを判別してもらい、生成器、判別器を共に学習させ、生成器の方では入力を行なった画像たちに共通している特徴を得てもらうというのが目的のGANの実装を行なっています。

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

モデルの構築は多分出来ていると思うのですが、、、
学習部分main()のコードを書く際にgenerater内の画像の更新のさせ方、画像の入力方法などが曖昧で理解が追いついてなく、色々と調べたのですが実装できていません...
分かる方がいらっしゃればご教授お願いします。

Traceback (most recent call last): File "keras_dcgan_copy.py", line 213, in <module> main() File "keras_dcgan_copy.py", line 188, in main noise = np.array(size=[batch_size, batch_images], low=-1.0, high=1.0) TypeError: Required argument 'object' (pos 1) not found

該当のソースコード

python

1from keras.models import Sequential 2from keras.layers import Dense 3from keras.layers import Reshape 4from keras.layers.core import Activation 5from keras.layers.normalization import BatchNormalization 6from keras.layers.convolutional import UpSampling2D 7from keras.layers.convolutional import Conv2D, MaxPooling2D 8from keras.layers.advanced_activations import LeakyReLU 9from keras.layers.core import Flatten,Dropout 10from keras.optimizers import Adam 11import numpy as np 12from PIL import Image 13import os 14import glob 15import random 16 17n_colors = 3 18 19def generator_model(): 20 model = Sequential() 21 #encode 22 model.add(Conv2D(64, (5, 5),input_shape=(64, 64, n_colors),activation='relu', padding='same')) 23 model.add(MaxPooling2D(pool_size=(2, 2),padding='same')) 24 25 model.add(Conv2D(32, (5, 5),activation='relu', padding='same')) 26 model.add(MaxPooling2D(pool_size=(2, 2),padding='same')) 27 28 model.add(Conv2D(16, (5, 5),activation='relu', padding='same')) 29 model.add(MaxPooling2D(pool_size=(2, 2),padding='same')) 30 #decode 31 model.add(Conv2D(16,(5,5),activation='relu',padding='same')) 32 model.add(UpSampling2D(size=(2, 2))) 33 34 model.add(Conv2D(32,(5,5),activation='relu',padding='same')) 35 model.add(UpSampling2D(size=(2, 2))) 36 37 model.add(Conv2D(64,(5,5),activation='relu')) 38 model.add(UpSampling2D(size=(2, 2))) 39 40 model.add(Conv2D(n_colors,(5,5),activation='sigmoid', border_mode='same')) 41 return model 42 43def discriminator_model(): 44 model = Sequential() 45 46 model.add(Conv2D(64, (5, 5), input_shape=(64, 64, n_colors), padding='same')) 47 model.add(Activation('tanh')) 48 model.add(MaxPooling2D(pool_size=(2, 2))) 49 50 model.add(Conv2D(128, (5, 5))) 51 model.add(Activation('tanh')) 52 model.add(MaxPooling2D(pool_size=(2, 2))) 53 model.add(Flatten()) 54 55 model.add(Dense(1024)) 56 model.add(Activation('tanh')) 57 58 model.add(Dense(1)) 59 model.add(Activation('sigmoid')) 60 return model 61 62def generator_containing_discriminator(generator, discriminator): 63 model = Sequential() 64 model.add(generator) 65 model.add(discriminator) 66 return model 67 68def image_batch(batch_size): 69 files = glob.glob("./in_images/**/*.jpg", recursive=True) 70 files = random.sample(files, batch_size) 71 print(files) 72 res = [] 73 for path in files: 74 img = Image.open(path) 75 img = img.resize((64, 64)) 76 arr = np.array(img) 77 arr = (arr - 127.5) / 127.5 78 arr.resize((64, 64, n_colors)) 79 res.append(arr) 80 return np.array(res) 81 82def combine_images(generated_images, cols=5, rows=5): 83 shape = generated_images.shape 84 h = shape[1] 85 w = shape[2] 86 image = np.zeros((rows * h, cols * w, n_colors)) 87 for index, img in enumerate(generated_images): 88 if index >= cols * rows: 89 break 90 i = index // cols 91 j = index % cols 92 image[i*h:(i+1)*h, j*w:(j+1)*w, :] = img[:, :, :] 93 image = image * 127.5 + 127.5 94 image = Image.fromarray(image.astype(np.uint8)) 95 return image 96 97def set_trainable(model, trainable): 98 model.trainable = trainable 99 for layer in model.layers: 100 layer.trainable = trainable 101 102def main(): 103 batch_size = 64 104 105 discriminator = discriminator_model() 106 generator = generator_model() 107 108 discriminator_on_generator = generator_containing_discriminator(generator, discriminator) 109 110 set_trainable(discriminator, False) 111 discriminator_on_generator.compile(loss='binary_crossentropy', optimizer=Adam(lr=0.0002, beta_1=0.5)) 112 113 print(generator.summary()) 114 print(discriminator_on_generator.summary()) 115 116 set_trainable(discriminator, True) 117 discriminator.compile(loss='binary_crossentropy', optimizer=Adam(lr=0.0002, beta_1=0.5)) 118 119 print(discriminator.summary()) 120 121 for i in range(30 * 1000): 122 batch_images = image_batch(batch_size) 123 124 # generator更新 125 #noise = np.random.uniform(size=[batch_size, batch_images], low=-1.0, high=1.0) 126 noise = np.array(size=[batch_size, batch_images], low=-1.0, high=1.0) 127 128 generated_images = generator.predict(image_batch) 129 130 # discriminatorを更新 131 X = np.concatenate((batch_images, generated_images)) 132 # 訓練データのラベルが1、生成画像のラベルが0になるよう学習する 133 y = [1] * batch_size + [0] * batch_size 134 d_loss = discriminator.train_on_batch(X, y) 135 136 # generator更新 137 noise = np.array(size=[batch_size, batch_images], low=-1.0, high=1.0) 138 139 # 生成画像をdiscriminatorにいれたときに 140 # 出力が1に近くなる(訓練画像と識別される確率が高くなる)ように学習する 141 g_loss = discriminator_on_generator.train_on_batch(noise, [1] * batch_size) 142 143 if i % 100 == 0: 144 print("step %d d_loss, g_loss : %g %g" % (i, d_loss, g_loss)) 145 image = combine_images(generated_images) 146 os.system('mkdir -p ./generate_images') 147 image.save("./gen_images/gen%05d.jpg" % i) 148 generator.save_weights('generator.h5', True) 149 discriminator.save_weights('discriminator.h5', True) 150 151main()

乱数を入力させるのではなく画の入力を行うため、numpyなどで使えそうな関数はないかと調べたのですが、いまいち分からず、、、

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

quickquip

2019/01/19 01:54

これはまったくの興味なのですが、Computer Visionの分野では「Autoencoder生成器を用いたGAN」と言われたら自明に想像できるようなタスク/手法(の名称)なのでしょうか。どういうタスクなのか全く想像できないのですが、分野の人はそう言われて、やりたいことやネットワークの構造が容易に想像できるのでしょうか……?
oriharas

2019/01/19 02:21 編集

すいません、自分も初心者で、Computer Visionの分野を長くやっているわけではありません、、、 ただ、GANやAutoencoderといった言葉を見出しに使った方が機械学習でもGANなどに詳しい方々からのVIP数が多くなり、分かる方やアドバイスいただける方から質問の答えが得られのではないかと思い、以上のようなタイトルにしました。 前提・実現したいこと、またコードの方は一応記述していますので、そちらを読んで頂ければ幸いです
Q71

2019/01/19 23:00

chainer、tensorflow、keras、実際どれですか?「機械学習」か「深層学習」にすればいいのでは?
oriharas

2019/01/20 04:19

実際はKerasです、わかりづらくすいません
Q71

2019/01/20 06:31

で、質問はなんですか?エラーは、メッセージの通りです。必須の引数objectが指定されていないので、objectを渡してください。 他の人の、GAN以外の質問も見ていますか?自分が直面している問題と同じものだけでなく、「この先問題になるんじゃないか?」という問題も見ておくといいと思います。
oriharas

2019/01/20 07:02

発生している問題・エラーメッセージの部分に質問が書いてありますが?
Q71

2019/01/21 03:08

> 分かる方がいらっしゃればご教授お願いします。 問題の丸投げと理解しています。teratailでは丸投げはしないように、とのことなのですが? とりあえず、大元のコードで、入力データのshapeは、どうなっていますか。 他のkerasタグがついた質問で、画像を読み込んでいるものはなかったでしょうか。 最低限、リファレンスは読みましょう。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問