2016-04-03 6 views
2

私は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})) 
ここで印刷したいです

私がやっていることはすべて基本的なものだと思います。もし誰かが私を助けることができたら、私はとても偉大になります!私はちょっと立ち往生して、私のモデルをimporできません。 )

お読みいただきありがとうございます!

答えて

1

@Ghosoここに。

いいね、あなたはTensorFlowから始まっています。おなじみのシンプルなクラシファイアで始めることをお勧めします。

Tensorflowには、最初に計算グラフを定義するという概念があります。次に、あなたはそれを訓練する。トレーニングの後と途中で、興味のある変数をフィードして取得できます。

このコードでは、セッション中にTensorの「精度」を定義しているようです。私の意見では、「精度」はグラフの一部です。つまり、「精度」はグラフ内の他のノードに依存し、それ自体をノードとみなすことができます。

次に、1つのフェッチではなく、フェッチのリストを使用してsess.run()を展開できます。このように: output_list = sess.run([train_step, accuracy], feed_dict = feed_dict) 私は、「精度」をノードとして定義し、セッションでフェッチするオンラインの小さな例があります。あなたはthisの例を見たいかもしれません。あなたの興味のある変数には、「精度」と「正しい予測」という名前が付けられています。

こちらがお役に立てば幸いです。

+1

うわー、ありがとう!それはとても簡単で、私はそれを逃した。私はやってみました。 提案したようにprint(sess.run([精度、y、正しい予測]、feed_dict = {x:test_input、y_:test_label}))を使用しました。 私は、私のyベクトルがnanで満たされていることを知っており、何が間違っているかを見るために掘り起こしています。 テンソルフローのメカニズムを簡単に説明してくれてありがとう! –

関連する問題