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

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

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

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

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

589閲覧

tf.padを使用するとGANの損失がおかしくなる。

37458

総合スコア70

Keras

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

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/07/25 22:49

編集2021/07/25 22:57

###問題
tensorflow2.3.0です。
generatorにtf.pad(x,shape,"REFLECT")を用いるとdiscriminatorのlossが正しく計算されません。
discriminatorのreal学習の際に目標値として渡した値が、fake学習の際にも目標値として使用されているようです。

このようになる原因は何でしょうか?ご教授いただけると幸いです;;

###コード

Python

1def mirror_padding(v,padding): 2 return tf.pad(v, [(x,x) for x in padding], "REFLECT") 3def build_generator(input_shape): 4 input_ = Input(shape=input_shape) 5 a = mirror_padding(input_,(0,1,1,0)) 6 a = Conv2D(3,kernel_size=3)(a) 7 out = Activation("tanh")(a) 8 return Model(input_,out) 9def build_discriminator(input_shape): 10 input_ = Input(shape=input_shape) 11 12 a = Conv2D(32,kernel_size=4,strides=2,padding="same",activation="relu")(input_) 13 a = Conv2D(64,kernel_size=4,strides=2,padding="same")(a) 14 a = BatchNormalization()(a) 15 a = Activation("relu")(a) 16 a = Conv2D(128,kernel_size=4,strides=2,padding="same")(a) 17 a = BatchNormalization()(a) 18 a = Activation("relu")(a) 19 20 a = Conv2D(8,kernel_size=3)(a) 21 a = BatchNormalization()(a) 22 a = Activation("relu")(a) 23 a = Flatten()(a) 24 out = Dense(1,activation="sigmoid")(a) 25 26 return Model(input_,out) 27 28input_shape = ...#8n(n>2) 29generator = build_generator(input_shape) 30discriminator = build_discriminator(input_shape) 31 32discriminator.compile(loss="mae",optimizer=Adam(0.0002,0.5)) 33discriminator.trainable = False 34comb_model = Model(generator.input,discriminator(generator.output)) 35comb_model.compile(loss="mae",optimizer=Adam(0.0002,0.5)) 36 37 38batch_size,iteration = 8,2000 39ones = np.ones(batch_size) 40for i in range(iteration): 41 imgs = ... 42 imgs_fake = generator.predict(imgs) 43 44 #feedback_g = comb_model.train_on_batch(imgs,ones) 45 feedback_dr = discriminator.train_on_batch(imgs,ones) 46 feedback_df = discriminator.train_on_batch(imgs_fake,ones*0) 47 48 if (i+1)%(iteration//10)==0: 49 dr_p = np.mean(discriminator.predict(imgs)) 50 df_p = np.mean(discriminator.predict(imgs_fake)) 51 print(f"iter:{i} g:{feedback_g} dr:{feedback_dr} df:{feedback_df}") 52 print(f"dr_p:{dr_p} df_p:{df_p}\n")

feedback_drの行をコメントアウトすると、df_pは0へ向かいます。
onesをほかの値へ変更すればdr_p,df_pともにその値へ向かいます。
###結果

iter:1599 g:0.3473527133464813 dr:2.8058886528015137e-05 df:3.782395651796833e-05 dr_p:0.9858870506286621 df_p:0.8046140670776367 iter:1799 g:0.3473527133464813 dr:2.2172927856445312e-05 df:4.157442526775412e-05 dr_p:0.9862720370292664 df_p:0.8174797296524048 iter:1999 g:0.3473527133464813 dr:4.082918167114258e-05 df:2.7258996851742268e-05 dr_p:0.9876103401184082 df_p:0.736126720905304

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

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

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

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

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

guest

回答1

0

自己解決

tf.padの問題ではありませんでした。
tf.padを除くと正常に動いたのですが、違うモデル構造では除いても解決しませんでした。

投稿2021/07/26 18:14

編集2021/07/26 23:33
37458

総合スコア70

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問