为什么当我在tensorflow中更改测试批量大小时,结果是不同的

时间:2017-05-31 15:11:12

标签: tensorflow

这是我的火车代码:

x = tf.placeholder(tf.float32, [None, 2, 3])
cell = tf.nn.rnn_cell.GRUCell(10)

_, state = tf.nn.dynamic_rnn(
        cell = cell,
        inputs = x,
        dtype = tf.float32)
# train
with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    x_ = np.ones([2,2,3],np.float32)
    output = sess.run(state, feed_dict= {x: x_})
    print output    
    saver = tf.train.Saver()
    saver.save(sess,'./model')

结果是:

[[ 0.12851571 -0.23994535  0.23123585 -0.00047993 -0.02450397
  -0.21048039 -0.18786618  0.04458345 -0.08603278 -0.08259721]
 [ 0.12851571 -0.23994535  0.23123585 -0.00047993 -0.02450397
  -0.21048039 -0.18786618  0.04458345 -0.08603278 -0.08259721]]

这是我的测试代码:

x = tf.placeholder(tf.float32, [None, 2, 3])
cell = tf.nn.rnn_cell.GRUCell(10)

_, state = tf.nn.dynamic_rnn(
        cell = cell,
        inputs = x,
        dtype = tf.float32)
with tf.Session() as sess:
    x_ = np.ones([1,2,3],np.float32)
    saver = tf.train.Saver()
    saver.restore(sess,'./model')
    output = sess.run(state, feed_dict= {x: x_})
    print output

然后我得到:

[[ 0.12851571 -0.23994535  0.2312358  -0.00047993 -0.02450397 
  -0.21048039 -0.18786621  0.04458345 -0.08603278 -0.08259721]]

你看,结果略有改变。当我将测试批次设置为2时,结果与训练结果相同。那有什么不对?我的tf版本是0.12

1 个答案:

答案 0 :(得分:0)

更新(不是答案)

#include <iostream> #include <vector> class Foo { public: Foo(int s) : pegs (s, &TOKEN_EMPTY){} static char const TOKEN_EMPTY=' '; protected: std::vector<const char*> pegs; }; int main() { // ues class Foo return 0; } const pingedUsers = []; // doodle message const msg = {author: {id:1}}; // message event const onMessage = (message) => { if (pingedUsers.indexOf(message.author.id) != -1) { console.log("user replied"); } } onMessage(msg); // nothing pingedUsers.push(msg.author.id); // push the author id onMessage(msg); // he replied!均已弃用,并替换为tf.nn.rnn_cell.GRUCell

使用不赞成使用的功能,您甚至不需要保存和恢复模型,甚至无需多次运行。您所需要做的就是以奇数批处理大小运行它,并使用tf.float32作为dtype,最后的结果将略有不同。

tf.nn.dynamic_rnn

返回这样的结果

tf.keras.layers.GRU

对于奇数长度的批次,异常似乎仅出现在最后一行。

另一种观点是,单个批次是正确的,并且所有偶数大小的批次都已关闭,除最后一行奇数大小的批次以外的所有内容都已关闭。

似乎dtype = float64或dtype = float16似乎都没有发生,这两种情况似乎都很稳定。

此外,此问题仅处于隐藏状态,似乎没有出现在常规输出中。