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

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

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

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

Q&A

解決済

1回答

393閲覧

サンプル画像生成時の損失関数の値が変化しない問題について

trafalbad

総合スコア303

Python

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

0グッド

0クリップ

投稿2017/08/16 14:43

DCGANで画像を生成しようとしています。下記コードでは10回に一回サンプル画像を生成するためのものですが、出力結果を見ると10回目と20回目の損失関数の値が全く同じです。

訓練した時の値は変化しているのですが、サンプル画像を生成する時の損失関数の値が変化しないのは何故なのでしょうか?また変化させるためにはどうした良いのでしょうか?

このコードはこのサイトのmodel.pyを参考にしています。

何か心当たりがあればご教授いただけないでしょうか?

run_config = tf.ConfigProto() run_config.gpu_options.allow_growth=True with tf.Session(config=run_config) as sess: sess.run(tf.global_variables_initializer()) sample_files=X_image[0:64] sample_images = [sample_file for sample_file in sample_files] epochs=100 counter = 1 start_time=time.time() for epoch in range(epochs): batch_idxs= min (len(X_image), np.inf) // 64 for idx in range (0, batch_idxs): bacth_files= X_image[idx*64:(idx+1)*64] batch_images = [batch_file for batch_file in bacth_files] sess.run(d_optim, feed_dict = {z: batch_z, image: batch_images}) sess.run(g_optim, feed_dict = {z: batch_z}) # Run g_optim twice to realize loss value sess.run(g_optim, feed_dict = {z: batch_z}) errD_fake = tf.convert_to_tensor(d_loss_fake).eval({z: batch_z }) errD_real = tf.convert_to_tensor(d_loss_real).eval({image: batch_images}) errG = tf.convert_to_tensor(g_loss).eval({z: batch_z}) counter +=1 print("Epoch: [%2d] [%4d/%4d] time:%4.4f, d_loss: %.8f, g_loss: %.8f" % (epoch, idx, batch_idxs, time.time()-start_time, errD_fake+errD_real, errG)) if np.mod(counter, 10) == 1: samples, d_loss, g_loss = sess.run([sampler, tf.convert_to_tensor(d_loss), tf.convert_to_tensor(g_loss)], feed_dict={z: sample_z, image: sample_images}) print("[Sample] d_loss:%.8f, g_loss:%.8f" % (d_loss, g_loss)) col=8 rows=[] for i in range(8): rows.append(np.hstack(samples[col * i + 0:col * i + col])) vnari=np.vstack(rows) scipy.misc.imsave('/Users/Downloads/sampler.html/sampler%s_%s.png'% (epoch, counter), vnari) Epoch: [ 0] [ 0/ 79] time:18.3605, d_loss: 1.76777852, g_loss: 0.94351727 Epoch: [ 0] [ 1/ 79] time:38.0518, d_loss: 1.53364301, g_loss: 0.83790785 Epoch: [ 0] [ 2/ 79] time:61.0091, d_loss: 1.65185094, g_loss: 0.75579810 Epoch: [ 0] [ 3/ 79] time:82.3861, d_loss: 1.47628033, g_loss: 0.69551533 Epoch: [ 0] [ 4/ 79] time:102.1952, d_loss: 1.50729263, g_loss: 0.64897960 Epoch: [ 0] [ 5/ 79] time:121.1743, d_loss: 1.53387451, g_loss: 0.61321557 Epoch: [ 0] [ 6/ 79] time:140.6043, d_loss: 1.47368515, g_loss: 0.58655268 Epoch: [ 0] [ 7/ 79] time:163.4642, d_loss: 1.45185685, g_loss: 0.56644368 Epoch: [ 0] [ 8/ 79] time:184.6301, d_loss: 1.41283786, g_loss: 0.55147195 Epoch: [ 0] [ 9/ 79] time:204.6764, d_loss: 1.44278061, g_loss: 0.53732765 [Sample] d_loss:1.04946280, g_loss:1.07786107 Epoch: [ 0] [ 10/ 79] time:225.3612, d_loss: 1.34403777, g_loss: 1.07786107 Epoch: [ 0] [ 11/ 79] time:242.3119, d_loss: 1.36160469, g_loss: 1.07786107 Epoch: [ 0] [ 12/ 79] time:259.3803, d_loss: 1.32203937, g_loss: 1.07786107 Epoch: [ 0] [ 13/ 79] time:276.2399, d_loss: 1.30332232, g_loss: 1.07786107 Epoch: [ 0] [ 14/ 79] time:293.2793, d_loss: 1.30108142, g_loss: 1.07786107 Epoch: [ 0] [ 15/ 79] time:310.2347, d_loss: 1.12413549, g_loss: 1.07786107 Epoch: [ 0] [ 16/ 79] time:327.0944, d_loss: 1.14331162, g_loss: 1.07786107 Epoch: [ 0] [ 17/ 79] time:343.9995, d_loss: 1.12982583, g_loss: 1.07786107 Epoch: [ 0] [ 18/ 79] time:361.5020, d_loss: 1.08887148, g_loss: 1.07786107 Epoch: [ 0] [ 19/ 79] time:378.5278, d_loss: 1.17705202, g_loss: 1.07786107 [Sample] d_loss:1.04946280, g_loss:1.07786107 Epoch: [ 0] [ 20/ 79] time:397.6606, d_loss: 1.15337718, g_loss: 1.07786107

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

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

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

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

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

guest

回答1

0

自己解決

if np.mod(counter, 10) == 1: samples, d_loss, g_loss = sess.run([sampler, tf.convert_to_tensor(d_loss), tf.convert_to_tensor(g_loss)],

の部分でd_loss, g_lossの変数名が同じなため2回目以降1回目の数値がそのまま使われてしまってるためです。

d_loss, g_losssees.runの部分の変数と異なるものに変えて下さい。

投稿2017/08/17 05:29

trafalbad

総合スコア303

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問