小さなテクニックをチェックするために使用した次の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_size
、reg_param
、blocks
は、関数に入力されます。 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
修正すべての
:https://stackoverflow.com/help/self-answer – desertnaut