2017-04-12 11 views
0

私の最初のTensorflowプログラム(自分のデータを使用)を書きました。それは少なくともそれがクラッシュしないでうまく動作します!しかし、私は有線精度の値を0または1のいずれかを得ていますか?Tensorflowの精度の問題

................................. 
the previous part of the code, is only about handeling csv file an getting Data in correct format/shapes 
...................................................... 
# Tensoflow 
x = tf.placeholder(tf.float32,[None,len(Training_Data[0])],name='Train_data')# each input has a 457 lenght 

y_ = tf.placeholder(tf.float32,[None, numberOFClasses],name='Labels')# 

#w = tf.Variable(tf.zeros([len(Training_Data[0]),numberOFClasses]),name='Weights') 
w = tf.Variable(tf.truncated_normal([len(Training_Data[0]),numberOFClasses],stddev=1./10),name='Weights') 

b = tf.Variable(tf.zeros([numberOFClasses]),name='Biases') 
model = tf.add(tf.matmul(x,w),b) 

y = tf.nn.softmax(model) 
cross_entropy = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels=y_, logits=y)) 
#cross_entropy = tf.reduce_mean(-tf.reduce_sum(y_ * tf.log(y), reduction_indices=[1])) 
train_step = tf.train.GradientDescentOptimizer(0.01).minimize(cross_entropy) 
sess = tf.Session() 
sess.run(tf.global_variables_initializer()) 

for j in range(len(train_data)): 
    if(np.shape(train_data) == (batchSize,numberOFClasses)): 
     sess.run(train_step,feed_dict={x:train_data[j],y_:np.reshape(train_labels[j],(batchSize,numberOFClasses)) }) 

correct_prediction = tf.equal(tf.arg_max(y,1),tf.arg_max(y_,1)) 
accuracy = tf.reduce_mean(tf.cast(correct_prediction,"float")) 

accuracy_vector= [] 
current_class =[] 
for i in range(len(Testing_Data)): 
    if(np.shape(Testing_Labels[i]) == (numberOFClasses,)): 
     accuracy_vector.append(sess.run(accuracy,feed_dict={x:np.reshape(Testing_Data[i],(1,457)),y_:np.reshape(Testing_Labels[i],(1,19))}))#,i)#,Test_Labels[i]) 
     current_class.append(int(Test_Raw[i][-1])) 

accuracy_vectorは次配信しploting:

[enter image description here]

私はここに欠けているものを任意のアイデア?

ありがとうございました!

+0

あなたは訓練が実際に起こりますか? train_dataは形状の可能性が高いので(n_samples、num_features)、n_samplesはサンプルまたはバッチの総数であるため、 'if(np.shape(train_data)==(batchSize、numberOFClasses)):'というテストは真であってはなりませんサイズとnum_featuresはあなたのケースでは457と思われます... – gdelab

+0

@gdelab私は十分にあなたに感謝することができませんでした、if文は、最後にプログラムがクラッシュするため、の終わりのためだけです。しかし、トレーニングが行われているかどうかを確認するには、if文が一度だけ有効でないことを意味します。トレーニングが本当に起こっているかどうかをチェックする方法は? – Engine

+0

'if'と同じ 'sess.run(training_step、...)'の直前または直後に 'print( "トレーニングする必要があります")を追加することができます。それが何かを印刷するならば、あなたは訓練します! – gdelab

答えて

1

サイズ1のバッチでテストしているので、予測が良いか偽であるため、0または1しか得られません精度:

accuracy_vector.append(sess.run(accuracy,feed_dict={x:np.reshape(Testing_Data[i],(1,457)),y_:np.reshape(Testing_Labels[i],(1,19))}))#,i)#,Test_Labels[i])

ただ、大きなバッチサイズを使用します。 accuracy_vector.append(sess.run(accuracy,feed_dict={x:np.reshape(Testing_Data[i:i+batch_size],(batch_size,457)),y_:np.reshape(Testing_Labels[i:i+batch_size],(batch_size,19))}))

+0

ありがとうgdelab。それは理にかなっている – Engine

2
cross_entropy = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels=y_, logits=y)) 

tf.nn.softmax_cross_entropy_with_logitsは、スケールされていないロジットが必要です。 DOCから :

WARNING:それは効率のために内部logits上のソフトマックスを行っているため、このオペアンプは、スケーリングされていないlogitsを期待しています。 softmaxの出力でこのopを呼び出さないでください。誤った結果が生成されるためです。

これは、行y = tf.nn.softmax(model)が間違っていることを意味します。

代わりに、あなたはこのように、その機能にスケーリングされていないlogitsを渡したい:

y = model 

をまた、あなたはこの問題を解決いったんネットワークが動作しない場合は、0.01〜学習率を下げるためにしてみてください1e-3または1e-4についての何か。 (1e-2は通常「高い」学習率ですから)

+0

あなたの返事に感謝します。私はコードを1e-5の学習率で編集しましたが、結果に変更はありません。 – Engine

+0

logitsパラメータも変更しましたか? – nessuno

+0

どういう意味ですか?私は学習率を1e-20に変更しましたが、何も変わりません、gdelabの提案は意味があります。私は再構成をしようとしていますが、あなたの意見はまだありません!助けてくれてありがとう – Engine