【问题标题】:How to print some debug?如何打印一些调试?
【发布时间】:2016-04-04 08:41:01
【问题描述】:

我正在使用 tensorflow 编写我的第一个脚本。 我想尝试一个简单的逻辑回归开始,我正在研究 kaggle titanic 数据集。

我的问题是我无法打印一些张量来调试我做错的事情。

我阅读了这篇文章 (How to print the value of a Tensor object in TensorFlow?),但我不明白如何打印张量。 :(

我很确定很接近,但无法弄清楚

让我告诉你我在做什么;

train = pd.read_csv("./titanic_data/train.csv", dtype={"Age": np.float64}, )

# My parameters for start
train_input = train[['Pclass','Age','SibSp','Parch','Fare']];
train_label = train['Survived']
train_label = train_label.reshape(891, 1)

#split my dataset
test_input = train_input[800:891]
test_label = train_label[800:891]
train_input = train_input[0:800]
train_label = train_label[0:800]

x = tf.placeholder(tf.float32, [None, 5]) #placeholder for input data

W = tf.Variable(tf.zeros([5, 1])) #weight for softmax

b = tf.Variable(tf.zeros([1])) # bias for softmax

y = tf.nn.softmax(tf.matmul(x, W) + b) #our model -> pred from model

y_ = tf.placeholder(tf.float32, [None, 1])#placeholder for input 

cross_entropy = -tf.reduce_sum(y_*tf.log(y)) # crossentropy cost function

train_step = tf.train.GradientDescentOptimizer(0.01).minimize(cross_entropy)
init = tf.initialize_all_variables() # create variable

sess = tf.InteractiveSession()
sess.run(init)

testacc = []
trainacc = []
for i in range(15):
    batch_xs = train_input[i*50:(i + 1) * 50]
    batch_ys = train_label[i*50:(i + 1) * 50]

    result = sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys})
    correct_prediction = tf.equal(y,y_)

想在这里打印

    **#correct_prediction.eval()
#trying to print correct_prediction or y so i can see what is my model actualy doing**

    accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
    trainacc.append(sess.run(accuracy, feed_dict={x: train_input, y_: train_label}))
    testacc.append(sess.run(accuracy, feed_dict={x: test_input, y_: test_label}))

我想我所做的一切都是基础。如果有人可以帮助我,我会很棒!我有点卡住了,无法改进我的模型。如果您愿意,请随时告诉我好的做法:)

感谢您阅读本文!

【问题讨论】:

    标签: tensorflow


    【解决方案1】:

    @Ghoso 在这里。

    很好,您开始使用 TensorFlow。我喜欢你的想法,从一个简单的分类器开始熟悉。

    Tensorflow 有这个概念,首先你定义一个计算图。接下来你训练它。在训练之后和训练期间,您可以提供和获取您感兴趣的变量。

    在这段代码中,您似乎在会话期间定义了张量“准确度”。在我看来,“准确性”是您图表的一部分。也就是说,“准确度”取决于图中的其他节点,可以认为自己是一个节点。

    接下来,您可以使用提取列表而不是一次提取来扩展 sess.run()。像这样: output_list = sess.run([train_step, accuracy], feed_dict = feed_dict)

    我在网上有一个小例子,我还将“准确性”定义为一个节点并在会话中获取它。您可能想查看this 示例。您感兴趣的变量被命名为“准确度”和“正确预测”。

    我希望这会有所帮助!

    【讨论】:

    • 哇,谢谢!那太容易了,我错过了。我试过了,它立即奏效了!我按照您的建议使用了 print(sess.run([accuracy, y, correct_prediction] , feed_dict={x: test_input, y_: test_label})) ,现在我可以看到我的所有数据。我知道我的 y 向量充满了 nan,我可以继续挖掘以查看问题所在。非常感谢您对张量流机制的简单解释!
    猜你喜欢
    • 2011-08-30
    • 2016-02-10
    • 1970-01-01
    • 1970-01-01
    • 2017-06-09
    • 2010-10-18
    • 2015-02-11
    • 1970-01-01
    相关资源
    最近更新 更多