###問題
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
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。