【问题标题】:Tensorflow : result of training data(using sigmoid) came out reverselyTensorflow:训练数据的结果(使用sigmoid)反向出来
【发布时间】:2019-07-26 15:45:32
【问题描述】:

我尝试使用“梯度下降算法”训练我的数据以最小化成本价值,

奇怪的是,结果会根据步数而有所不同。

下面是我的训练代码:

import tensorflow as tf
X = tf.placeholder(tf.float32, shape=[None, 2], name="X")
Y = tf.placeholder(tf.float32, shape=[None, 1], name="Y")
W = tf.Variable(tf.random_normal([2, 1]), name="weight")
b = tf.Variable(tf.random_normal([1]), name="bias")

hypo = tf.sigmoid(tf.matmul(X, W) +b)

cost = -tf.reduce_mean(Y*(tf.log*(hypo)) + (1-Y)*(tf.log(1-hypo)))
optimizer = tf.train.GradientDescentOptimizer(learning_rate=1e-3)
train = optimizer.minimize(cost)

#### Saving model
SAVER_DIR = "model"
saver = tf.train.Saver()
checkpoint_path = os.path.join(SAVER_DIR, "model")
ckpt = tf.train.get_checkpoint_state(SAVER_DIR)

sess = tf.Session()
sess.run(tf.global_variables_initializer())
for step in range(4201):
    cost_val, hy_val, _ = sess.run([cost, hypo, train], feed_dict={X:x_data, Y=y_data})

saver.save(sess, checkpoint_path, global_step=step)

并恢复模型:

saver = tf.train.import_meta_graph('./model/model-4200.meta')
saver.restore(sess,'./model/model-4200')

result = sess.run(hypo, feed_dict={X: x_data_test})

fig, ax = plt.subplots()
ax.plot(Julian_test,y_data_test,'ro-') # Correct answer. all items are one of the two:0 or 1.
ax.plot(Julian_test,result,'bo-')      # Result of training. Predict answer within
plt.show() #                            sigmoid function, so all items are in range of 0 ~ 1.

如图所示,sigmoid的结果是相反的。

但是,当我将步数更改为5000时,(在我上面的代码中,我只更改了步数。)

结果正确。

我不明白为什么它会引起反感。我错过了什么?确实需要帮助!

【问题讨论】:

    标签: python python-3.x tensorflow sigmoid


    【解决方案1】:

    简单来说,通过增加步骤,您可以让 tensorflow 代码/模型多次查看数据,从而使其能够了解有关数据的更多见解。并概括其表示。

    E.G 假设你给你的模型 2000 步,在 2000 步结束时它找到最小值,你的模型停在那里。但是如果模型到目前为止找到的最小成本不是全局最小值怎么办,我们不能说因为我们将它限制为 2000 步。因此,假设您将步数增加到 20000,模型现在找到了另一个最小值,可以提供更准确的结果。

    但是您需要确保您的模型不会过度拟合,即在您的训练数据上提供准确性,但在您的验证集上提供准确性。 (所以请确保不要将 num 步数增加太多)。

    【讨论】:

    • 感谢 cmets gusain :) 我忘了说每次训练结束时,我都会绘制 step-cost 图并检查它是否是全局最小值。所以我认为这是由另一个原因造成的。现在我仔细猜测这只是取决于运气..起点。如果培训以低成本值开始,它可能会正常结束。虽然我真的不确定:(
    • 是的,这取决于这一点,但这不是运气,你肯定可以按照你想要的方式初始化你的weights,有很多技术可以这样做。另外,您所说的步进成本图是什么意思,您是如何检查全局最小值的?我无法理解这一点?另外,如果您发现此答案有用,请点赞:) 谢谢
    • 我的意思是,在训练结束时,我为 x 轴绘制了步骤,为 y 轴绘制了成本值,并检查了发生局部最小值的位置。所以你的意思是控制初始权重值不是随机的,而是控制特定的常数,从而导致适当的初始成本?
    • 是的,您会看到在步骤结束时获得的最小值might 看起来是给定步数的模型的全局最小值,但是如果模型可以训练自己更多并找到更多呢?给出更多步骤的最佳解决方案?如果步骤增加,它可以找到一个比以前更好和最佳的新最小值。初始化技术只会帮助更快地获得global minimum点。
    • 哦,好的,我明白了!该图被绘制成一条大的、逐渐减小的曲线。老实说,我不能 100% 相信我自己的这张图。这是一个很难学习的领域 :( 感谢您的观点,Gusain。我会尝试寻找另一种培训方式!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-20
    • 2020-08-05
    • 1970-01-01
    • 2021-01-10
    • 1970-01-01
    • 2018-07-28
    相关资源
    最近更新 更多