【问题标题】:Trained Tensorflow give different result at same input value but not same structure经过训练的 Tensorflow 在相同的输入值下给出不同的结果,但结构不同
【发布时间】:2018-05-10 11:40:55
【问题描述】:

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

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

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

这两种情况给了我相同的结果 但接下来的案例给了我不同的结果

  1. 使用 1 或 2 个测试输入数据并在训练中使用它们运行经过训练的模型。 py文件
  2. 恢复经过训练的模型(不同的 .py 文件)并使用 1 或 2 个测试输入数据(与 2 个相同的数据)运行

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,:]})

结果 1 和结果 3

[[  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],...]

结果 2 和结果 4

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

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

【问题讨论】:

    标签: python tensorflow


    【解决方案1】:

    我发现了问题所在……

    问题在于层规范化。

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

    # 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)
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-10
      • 1970-01-01
      • 2015-06-25
      • 2013-03-04
      • 2015-01-17
      • 1970-01-01
      • 2022-01-23
      • 2019-03-01
      相关资源
      最近更新 更多