0

小さなテクニックをチェックするために使用した次のTensorflowコードは、回帰を行います。次のテンソルフローコードのbatch_sizeで何が問題になっていますか?

x = tf.placeholder(tf.float32, [None, input_size], name="input_data") 
y = tf.placeholder(tf.float32, [None], name="input_data") 

W1 = tf.get_variable("W1", [input_size, blocks[0]], initializer=tf.truncated_normal_initializer(stddev=0.1)) 
b1 = tf.get_variable("b1", [blocks[0]]) 
Lw = tf.nn.l2_loss(W1) 

W2 = tf.get_variable("W2", [blocks[0], blocks[1]], initializer=tf.truncated_normal_initializer(stddev=0.1)) 
b2 = tf.get_variable("b2", [blocks[1]]) 
Lw = Lw + tf.nn.l2_loss(W2) 

W3 = tf.get_variable("W3", [blocks[1], blocks[2]], initializer=tf.truncated_normal_initializer(stddev=0.1)) 
b3 = tf.get_variable("b3", [blocks[2]]) 
Lw = Lw + tf.nn.l2_loss(W3) 

W4 = tf.get_variable("W4", [blocks[2], output_size], initializer=tf.truncated_normal_initializer(stddev=0.1)) 
b4 = tf.get_variable("b4", [output_size]) 
Lw = Lw + tf.nn.l2_loss(W4) 

op1 = tf.sigmoid(tf.nn.bias_add(tf.matmul(x,W1),b1)); 
op2 = tf.sigmoid(tf.nn.bias_add(tf.matmul(op1,W2),b2)); 
op3 = tf.sigmoid(tf.nn.bias_add(tf.matmul(op2,W3),b3)); 
out = tf.nn.bias_add(tf.matmul(op3,W4),b4); 

loss1 = tf.nn.l2_loss(out-y) 

loss = loss1 + reg_param * Lw 
ここ

input_sizereg_paramblocksは、関数に入力されます。 Noneは、ネットワークのbatch_sizeのプレースホルダです。

トレーニング中にbatch_szie = 1を使用するたびに正しい出力が得られます。ネットワークは約6,000回反復した後に望ましい出力に収束し、〜0.001付近で出力エラーが発生します。しかし、私がbatch_size=2以上を使用するときは、コードはまったく収束せず、100,000回の反復を試みましたが、トレーニングデータの平均出力エラーは〜0.2に似ています。

最初はいくつかの操作が間違っていると思っていました。しかし、テスト中にbatch_sizeを50に変更し、テスト結果が正しいことを確認しました(トレーニング中にbatch_size=1を使用して訓練した場合)。だから私は、フォワードオペレーションは大丈夫だと思います。

要約すると、ここでは紛失しています。誰かが私が間違っていることを知っていますか?この不一致を取り除くために何ができましたか?

line 2修正すべての

答えて

0

この補正:質問は確かに答えに見えるようにあなたは、あなた自身の答えを受け入れる必要があり

y = tf.placeholder(tf.float32, [None,1], name="input_data") 
+0

:https://stackoverflow.com/help/self-answer – desertnaut

関連する問題