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

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

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

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

Python 3.x

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

機械学習

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

Q&A

解決済

1回答

3035閲覧

AdamOptimizer.minimizeのgradients計算のところでエラーがでます

theta_fon

総合スコア6

Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

Python 3.x

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

機械学習

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

0グッド

0クリップ

投稿2017/03/30 12:09

###前提・実現したいこと
PythonとTensorFlowを勉強し始めて一か月の初心者です.
TensorFlowでhttps://github.com/sugyan/face-generatorを参考に2層GANの実装を試みています。
2層目のGeneratorの変数の最適化のところで以下のエラーメッセージが出ました。
いろいろと調べてみましたがこのエラーの解決方法がわからなかったので教えていただきたいです。
###発生している問題・エラーメッセージ

python

1Traceback (most recent call last): 2 File "C:\Users\username\AppData\Local\Programs\Python\Python35\lib\site-packages\tensorflow\python\framework\tensor_shape.py", line 581, in merge_with 3 new_dims.append(dim.merge_with(other[i])) 4 File "C:\Users\username\AppData\Local\Programs\Python\Python35\lib\site-packages\tensorflow\python\framework\tensor_shape.py", line 135, in merge_with 5 self.assert_is_compatible_with(other) 6 File "C:\Users\username\AppData\Local\Programs\Python\Python35\lib\site-packages\tensorflow\python\framework\tensor_shape.py", line 108, in assert_is_compatible_with 7 % (self, other)) 8ValueError: Dimensions 4 and 1 are not compatible 9 10During handling of the above exception, another exception occurred: 11 12Traceback (most recent call last): 13 File ".\run_exp.py", line 180, in <module> 14 tf.app.run() 15 File "C:\Users\username\AppData\Local\Programs\Python\Python35\lib\site-packages\tensorflow\python\platform\app.py", line 44, in run 16 _sys.exit(main(_sys.argv[:1] + flags_passthrough)) 17 File ".\run_exp.py", line 89, in main 18 train_op2 = stage2_gan.build(h_input_images , h_wrong_images, h_input_labels, feature_matching=False) 19 File "C:\Users\username\Desktop\Coding_Space\gans\OriginalGAN\Stage2_GAN.py", line 285, in build 20 h_g_opt_op = h_g_opt.minimize(self.losses['h_g'], var_list=self.g.variables) 21 File "C:\Users\username\AppData\Local\Programs\Python\Python35\lib\site-packages\tensorflow\python\training\optimizer.py", line 288, in minimize 22 grad_loss=grad_loss) 23 File "C:\Users\username\AppData\Local\Programs\Python\Python35\lib\site-packages\tensorflow\python\training\optimizer.py", line 354, in compute_gradients 24 colocate_gradients_with_ops=colocate_gradients_with_ops) 25 File "C:\Users\username\AppData\Local\Programs\Python\Python35\lib\site-packages\tensorflow\python\ops\gradients_impl.py", line 500, in gradients 26 in_grad.set_shape(t_in.get_shape()) 27 File "C:\Users\username\AppData\Local\Programs\Python\Python35\lib\site-packages\tensorflow\python\framework\ops.py", line 425, in set_shape 28 self._shape = self._shape.merge_with(shape) 29 File "C:\Users\username\AppData\Local\Programs\Python\Python35\lib\site-packages\tensorflow\python\framework\tensor_shape.py", line 585, in merge_with 30 (self, other)) 31ValueError: Shapes (4, 4, 4, 234) and (4, 1, 1, 234) are not compatible

###該当のソースコード
どこまでソースコードを張ればよいかわからず,中途半端なコードになりましたのでわからないところがあればすぐ追加,修正します.

python

1 2class Generator: 3 def __init__(self, depths=[1024, 512, 256, 128], f_size=16): 4 self.reuse = False 5 self.f_size = f_size 6 self.depths = depths + [3] 7 8 def model(self, x_images,c_labels): 9 i_depth = self.depths[0:4] 10 o_depth = self.depths[1:5] 11 reverse_i_depth = self.depths[::-1][0:4] 12 reverse_o_depth = self.depths[::-1][1:5] 13 out = [] 14 with tf.variable_scope('h_g', reuse=self.reuse): 15 # reshape from inputs 16 outputs = x_images 17 with tf.variable_scope('fc_reshape'): 18 for i in range(4): 19 with tf.variable_scope('conv%d' % i): 20 w0 = tf.get_variable('w0',[5, 5, reverse_i_depth[i], reverse_o_depth[i]],tf.float32,tf.truncated_normal_initializer(stddev=0.02)) 21 b0 = tf.get_variable('b0',[reverse_o_depth[i]],tf.float32,tf.zeros_initializer()) 22 fc = tf.nn.conv2d(outputs, w0, [1, 2, 2, 1], 'SAME') 23 mean, variance = tf.nn.moments(fc, [0, 1, 2]) 24 outputs = ops.leaky_relu(tf.nn.batch_normalization(fc, mean, variance, b0, None, 1e-5)) 25 out.append(outputs) 26 """ 27 outputs = tf.get_variable( 28 'sam', 29 [tf.shape(x_images)[0] ,self.f_size, self.f_size, self.depths[0]], 30 tf.float32, 31 tf.zeros_initializer()) 32 """ 33 outputs = ops.connect_label(outputs,c_labels) 34 out.append(outputs) 35 i_depth[0] += 18 #ラベルの次元分拡張する 36 # deconvolution (transpose of convolution) x 4 37 for i in range(4): 38 with tf.variable_scope('conv%d' % (i + 1)): 39 w = tf.get_variable( 40 'w', 41 [5, 5, o_depth[i], i_depth[i]], 42 tf.float32, 43 tf.truncated_normal_initializer(stddev=0.02)) 44 b = tf.get_variable( 45 'b', 46 [o_depth[i]], 47 tf.float32, 48 tf.zeros_initializer()) 49 dc = tf.nn.conv2d_transpose( 50 outputs, 51 w, 52 [ 53 int(outputs.get_shape()[0]), 54 self.f_size * 2 ** (i + 1), 55 self.f_size * 2 ** (i + 1), 56 o_depth[i] 57 ], 58 [1, 2, 2, 1]) 59 if i < 3: 60 mean, variance = tf.nn.moments(dc, [0, 1, 2]) 61 outputs = tf.nn.relu(tf.nn.batch_normalization(dc, mean, variance, b, None, 1e-5)) 62 else: 63 outputs = tf.nn.tanh(tf.nn.bias_add(dc, b)) 64 out.append(outputs) 65 self.reuse = True 66 self.variables = tf.get_collection(tf.GraphKeys.TRAINABLE_VARIABLES, scope='h_g') 67 return out 68 69 def __call__(self, inputs,labels): 70 return self.model(inputs,labels)

python

1def build(self, input_images,wrong_images,input_labels, 2 learning_rate=0.0002, beta1=0.5, feature_matching=False): 3 4 z = self.stage1_gan.z 5 c = self.stage1_gan.c 6 z_c = tf.concat([z,c],1) 7 generated_images = self.g(self.stage1_gan.g(z_c)[-1],c)[-1] 8 outputs_from_g = self.d(generated_images,self.c) 9 outputs_from_i = self.d(input_images,input_labels) 10 outputs_from_w = self.d(wrong_images,ops.make_C_noise(self.batch_size)) 11 logits_from_g = outputs_from_g[-1] 12 logits_from_i = outputs_from_i[-1] 13 logits_from_w = outputs_from_w[-1] 14 # losses 15 tf.add_to_collection( 16 'h_g_losses', 17 tf.reduce_mean( 18 tf.nn.sparse_softmax_cross_entropy_with_logits( 19 labels=tf.ones([self.batch_size], dtype=tf.int64), 20 logits=logits_from_g))) 21 tf.add_to_collection( 22 'h_d_losses', 23 tf.reduce_mean( 24 tf.nn.sparse_softmax_cross_entropy_with_logits( 25 labels=tf.ones([self.batch_size], dtype=tf.int64), 26 logits=logits_from_i))) 27 tf.add_to_collection( 28 'h_d_losses', 29 tf.reduce_mean( 30 tf.nn.sparse_softmax_cross_entropy_with_logits( 31 labels=tf.zeros([self.batch_size], dtype=tf.int64), 32 logits=logits_from_g))) 33 tf.add_to_collection( 34 'h_d_losses', 35 tf.reduce_mean( 36 tf.nn.sparse_softmax_cross_entropy_with_logits( 37 labels=tf.zeros([self.batch_size], dtype=tf.int64), 38 logits=logits_from_w))) 39 40 self.losses['h_g'] = tf.add_n(tf.get_collection('h_g_losses'), name='h_total_g_loss') 41 self.losses['h_d'] = tf.add_n(tf.get_collection('h_d_losses'), name='h_total_d_loss') 42 h_g_opt = tf.train.AdamOptimizer(learning_rate=learning_rate, beta1=beta1) 43 h_d_opt = tf.train.AdamOptimizer(learning_rate=learning_rate, beta1=beta1) 44 h_g_opt_op = h_g_opt.minimize(self.losses['h_g'], var_list=self.g.variables) 45 h_d_opt_op = h_d_opt.minimize(self.losses['h_d'], var_list=self.d.variables) 46 with tf.control_dependencies([h_g_opt_op, h_d_opt_op]): 47 self.train = tf.no_op(name='trains') 48 return self.train

###試したこと
エラーをたどってみるとbuild関数のminimizeから発生しています.
しかし,build関数内の

python

1generated_images = self.g(self.stage1_gan.g(z_c)[-1],c)[-1]

のself.g()のクラスであるGeneratorの

python

1""" 2 outputs = tf.get_variable( 3 'sam', 4 [tf.shape(x_images)[0] ,self.f_size, self.f_size, self.depths[0]], 5 tf.float32, 6 tf.zeros_initializer()) 7 """

のコメントアウトを消すと正常に実行されました.
このことからGeneretorクラスのmodel関数内のコメントアウトした付近が怪しいと思いましたが,エラーの原因は特定できませんでした.
エラー原因の特定と解決方法を教えていただきたいです.
よろしくお願いします.
###補足情報(言語/FW/ツール等のバージョンなど)
TensorFlow1.0.0
Windows 10
Python 3.5.3

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

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

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

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

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

guest

回答1

0

自己解決

自己解決しました.
エラー通り各TensorのShapeを見直したところ、望んでいたShapeが作られていませんでした.

投稿2017/03/31 10:25

theta_fon

総合スコア6

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問