私はTensorFlowでロジスティック回帰を実装しようとしていましたが、これはMNISTの例に従いますが、CSVのデータです。各行は1つのサンプルで、12のディメンションを持ちます。TensorFlowロジスティック回帰の実装時に返す
batch_size = 5
learning_rate = .001
x = tf.placeholder(tf.float32,[None,12])
y = tf.placeholder(tf.float32,[None,2])
W = tf.Variable(tf.zeros([12,2]))
b = tf.Variable(tf.zeros([2]))
mult = tf.matmul(x,W)
pred = tf.nn.softmax(mult+b)
cost = tf.reduce_mean(-tf.reduce_sum(y*tf.log(pred), reduction_indices=1))
optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(cost)
sess = tf.Session()
sess.run(tf.initialize_all_variables())
avg_cost = 0
total_batch = int(len(Xtrain)/batch_size)
for i in range(total_batch):
batch_xs = Xtrain[i*batch_size:batch_size*i+batch_size]
batch_ys = ytrain[i*batch_size:batch_size*i+batch_size]
_, c = sess.run([optimizer, cost], feed_dict={x: batch_xs,y: batch_ys})
print(c)
Xtrainは252x10 numpyの配列で、ytrainは252x2 1ホットnumpyの配列です:私のコードは次のようです。
問題:コストcは最初の反復(値は0.6931 ...)で計算されますが、その後の各反復では 'nan'が返されます。
私が試したこと:モデルの各コンポーネントが機能していることを確認しました。この問題は最初の反復後に完全に発生します。私は学習率で遊んだことがありますが、それは何もしません。私はtruncated_normal(私はロジスティック回帰のためにする必要はありませんとにかく)としてウェイトを初期化しようとしましたが、それもどちらか助けにはなりません。
だから、どんな考えですか?私はそれを修正しようと約3時間を費やし、アイデアがなくなった。 TensorFlowがコスト関数を最適化するときに何かがうまくいかないようです。
ありがとう、すぐに働いた:
はさらに読書のために、私はこの偉大な答えをお勧めします。あなたが説明を気にしないなら、tf.maximum(pred、1e-15)は何をするのですか?なぜ私は持っていた問題を解決しますか? – Alexうれしかったです。下記参照! –