以下张量流代码的batch_size有什么问题?

时间:2017-10-29 07:13:32

标签: machine-learning tensorflow neural-network deep-learning

我用来检查小技术的以下Tensorflow代码会进行回归。

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进行培训时)。所以我认为,正向运作是可以的。

总之,我在这里不知所措。有谁知道我做错了什么?如何消除这种差异呢?

1 个答案:

答案 0 :(得分:0)

line 2的这一更正解决了所有问题:

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