【问题标题】:logistic regression debugging tensorflow逻辑回归调试tensorflow
【发布时间】:2016-11-10 20:29:30
【问题描述】:

我正在尝试学习 tensorflow,目前正在尝试做一个简单的逻辑回归模型。这是我从可以找到的不同示例中拼接在一起的代码。

with tf.Session() as sess:
    # Training data
    input = tf.constant(tra)
    target = tf.constant(np.transpose(data[:,1]).astype(np.float64))

    # Set model weights
    W = tf.Variable(np.random.randn(10, 1).astype(np.float64))

    # Construct model
    mat=tf.matmul(input,W)
    pred = tf.sigmoid(mat)

    # Compute the error
    yerror = tf.sub(pred, target)
    # We are going to minimize the L2 loss. The L2 loss is the sum of the
    # squared error for all our estimates of y. This penalizes large errors
    # a lot, but small errors only a little.
    loss = tf.nn.l2_loss(yerror)

    # Gradient Descent
    update_weights = tf.train.GradientDescentOptimizer(0.05).minimize(loss)

    # Initializing the variables
    tf.initialize_all_variables().run()

    for _ in range(50):
        # Repeatedly run the operations, updating the TensorFlow variable.
        sess.run(update_weights)

        print(loss.eval())

因此代码运行但在每次“sess.run(update_weights)”迭代后错误并没有改善,我尝试了不同的步长。

不知设置是否正确?

我有点不确定如何调试它,因为一切的计算都是在运行命令中完成的。训练数据很好。如果你们中的一些人可以看到我在整个会话中做错了什么,或者就如何调试它提出建议。

非常感谢您的帮助。

【问题讨论】:

    标签: python tensorflow logistic-regression


    【解决方案1】:

    虽然您正在做的事情对于回归来说是合理的,但这可能不适用于分类任务。此外,这通常不是逻辑回归。对于逻辑回归,您可以最大化所有数据样本的 log prob(correct label|input) 总和。这可以通过一个 softmax 层方便地完成。

    它附带有用的数学属性,有助于调试。例如,如果你的输入是完全随机的,那么损失应该是log (N)。如果您将所有权重设置为零,那么这应该是损失。如果您在二进制分类中标记样本,例如1/3 正和2/3 负,则不考虑任何输入的模型(只是一个偏差项)应该只返回log(2/3),因此您可以调试你在某种程度上得到了什么。

    【讨论】:

    • 感谢评论一些问题:我可以放任何随机数还是应该是随机高斯,平均值为 0 和标准为 1? log(N) 中的 N 是我拥有的特征数量还是训练示例的数量?
    • 如果权重全部为零,那么权重是多少并不重要,否则,您可以提供与输出不相关的任何内容。 N 是指类的数量。
    【解决方案2】:

    好的,所以我做了一些测试,发现“目标”变量的尺寸存在问题。我必须指定它是一个 m x 1 矩阵(其中 m 是训练示例的数量),这是通过将形状指定为常量变量来完成的:

    target = tf.constant(np.transpose(data[:,1]).astype(np.float64), shape=[m,1])
    

    在我对特征进行标准化之前,梯度体面的表现也不是很好。

    【讨论】:

      【解决方案3】:

      TensorFlow 现在附带一个名为 tfdbg 的内置调试器。它公开中间张量值并通过命令行界面呈现它们。它应该使您更容易调试代码。请查看以下文档(在 master HEAD): https://github.com/tensorflow/tensorflow/blob/master/tensorflow/g3doc/how_tos/debugger/index.md

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-04-04
        • 2019-11-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多