训练过的Tensorflow在相同的输入值但不同的结构下给出不同的结果

时间:2018-05-09 15:48:30

标签: python tensorflow

我正在尝试运行训练有素的Tensorflow模型。但是训练模型在相同的输入下给出了不同的结果。

我尝试了几个关于模型的测试

  1. 保存测试输入数据并在训练.py文件中使用训练模型运行
  2. 恢复训练的模型(不同的.py文件)并使用保存的测试输入
  3. 运行

    这两个案例给了我相同的结果 但是下一个案例会给我不同的结果

    1. 使用1或2个测试输入数据,并在训练中运行训练有素的模型。 py文件
    2. 恢复经过训练的模型(不同的.py文件)并使用1或2个测试输入数据运行(与2相同的数据)
    3. 1和3的结果相同,2和4的结果相同

      下一行是关于此问题的代码 Nxtest是xtest的归一化值

      Training.py

      result1 = sess.run(Out, feed_dict={X: NXtest})
      result2 = sess.run(Out, feed_dict={X: NXtest[0:2,:]})
      

      Restore.py

      result3 = sess.run(Out, feed_dict={X: NXtest})
      result4 = sess.run(Out, feed_dict={X: NXtest[0:2,:]})
      

      result1和result3

      [[  1.8736366 ,   2.02535582,  19.39698982],
       [  2.67727947,   0.9930172 ,  16.15852356],
       [  0.90145612,   1.97343755,  14.90865993],
       [  1.78041267,   6.17082882,  18.19297409],
       [  4.76018906,   3.00801134,   9.77826309],...]
      

      result2和result4

      [[5.20546   7.42051 8.2718],
       [4.59359   3.55607 20.086]]
      

      为什么他们给我不同的结果?

1 个答案:

答案 0 :(得分:0)

我发现了什么问题......

问题是图层规范化。

我使用下面的代码进行培训

# Layer 1
HL1 = tf.add(tf.matmul(X, w1), b1)
# Layer Normalize
mean1, var1 = tf.nn.moments(HL1,[0])
HL1_hat = (HL1 - mean1) / tf.sqrt(var1 + epsilon)
scale1 = tf.Variable(tf.ones([n_hidden1]))
beta1 = tf.Variable(tf.zeros([n_hidden1]))
NL1=scale1 * HL1_hat + beta1
# Activation
AL1=tf.nn.relu(NL1)

但是,我没有关于规范化参数制作tf.variables() 所以,在我看来,要计算规范化参数,代码需要很多不同的输入数据。

当我删除下面的图层规范化时,模型会产生相同的结果而不考虑多少数据。

# Layer 1
HL1 = tf.add(tf.matmul(X, w1), b1)
# Activation
AL1=tf.nn.relu(HL1)

感谢您的阅读。 祝你有个美好的一天