2017-01-27 8 views
1

私はSirajalogyから次のコードを使用しています。 https://github.com/llSourcell/How_to_use_Tensorflow_for_classification-LIVE/blob/master/demo.ipynbIt 私の独自の.csvを、彼の例で使用されているものとは異なる次元で受け入れるように変更されました。テンソルフローで更新されないコスト

import pandas as pd    
import numpy as np    
import matplotlib.pyplot as plt 
import tensorflow as tf   # Fire from the gods 
dataframe = pd.read_csv("jfkspxs.csv") 
dataframe = dataframe.drop(["Field6", "Field9", "rowid"], axis=1) 

inputX = dataframe.loc[:, ['Field2', 'Field3', 'Field4', 'Field5', 'Field7', 'Field8', 'Field10']].as_matrix() 
inputY = dataframe.loc[:, ["y1"]].as_matrix() 

learning_rate = 0.001 
training_epochs = 2000 
display_step = 50 
n_samples = inputY.size 

x = tf.placeholder(tf.float32, [None, 7])    
W = tf.Variable(tf.zeros([7, 1]))   
b = tf.Variable(tf.zeros([1]))    

y_values = tf.add(tf.matmul(x, W), b) 
y = tf.nn.softmax(y_values)     
y_ = tf.placeholder(tf.float32, [None,1]) 

cost = tf.reduce_sum(tf.pow(y_ - y, 2))/(2*n_samples) 
optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(cost) 

init = tf.initialize_all_variables() 
sess = tf.Session() 
sess.run(init) 

for i in range(training_epochs): 
    sess.run(optimizer, feed_dict={x: inputX, y_: inputY})) 
if (i) % display_step == 0: 
     cc = sess.run(cost, feed_dict={x: inputX, y_:inputY}) 
     print ("Training step:", '%04d' % (i), "cost=", "{:.9f}".format(cc)) 

コードは実行されていますが、以下のコスト更新が行われています。

Training step: 0000 cost= 0.271760166 
Training step: 0050 cost= 0.271760166 
Training step: 0100 cost= 0.271760166 
Training step: 0150 cost= 0.271760166 
Training step: 0200 cost= 0.271760166 
Training step: 0250 cost= 0.271760166 
Training step: 0300 cost= 0.271760166 
Training step: 0350 cost= 0.271760166 
etc. 

質問:なぜ各トレーニングステップで更新されないのですか? ありがとう!

+1

あなたがエラーを再現しやすくするために、それは素敵トンだろうo使用している "jfkspxs.csv"ファイルのコピーを取得する方法を知っています。どこからでもダウンロードできますか? – scai

+0

https://github.com/jhsmith12345/tensorflow ありがとう! –

答えて

1

問題:グラデーションがゼロであるため、ウェイトは変更されません。単一次元(batch_size、1)をsoftmaxに指定します。これにより、softmaxの出力が一定(1)になります。これにより、勾配がゼロになります。

ソリューション:

あなたはロジスティック回帰をやっている場合は、線形回帰をやっている場合はtf.nn.sigmoid_cross_entropy_with_logits(y_values, y_)

を使用してください、使用してください(つまり、ソフトマックスを使用しないでください): cost = tf.reduce_sum(tf.pow(y_ - y_values, 2))/(2*n_samples)

あなたはソフトマックスとMSEの混合を主張する場合は、ソフトマックスの代わりに、以下の使用してください: y = tf.reciprocal(1 + tf.exp(-y_values))

+0

3番目のソリューションを使用し、コストが更新されています。ありがとうございました! –

関連する問題