質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

1886閲覧

タイタニックの生存率をtensorflowのディープラーニングで学習するときコストがnanになる

good_morning

総合スコア61

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2018/03/28 09:46

編集2018/03/30 01:55

タイタニックの生存率をtensorflowのディープラーニングで予測しようとして、その前に学習させようとしたら、コストがnanになってしまいます。
出力は、生存、非生存の2つなので2クラスにしています。
プレディクションはsoftmax、コストはクロスエントロピーです。
その部分のプログラムは、次のとおりです。

def multilayer_perceptron(x, weights, biases):
layer_1 = tf.add(tf.matmul(x, weights['h1']), biases['b1'])
layer_1 = tf.nn.relu(layer_1)
layer_2 = tf.add(tf.matmul(layer_1, weights['h2']), biases['b2'])
layer_2 = tf.nn.relu(layer_2)
out_layer = tf.matmul(layer_2, weights['out']) + biases['out']
return out_layer

weights = {
'h1': tf.Variable(tf.random_normal([n_input, n_hidden_1])),
'h2': tf.Variable(tf.random_normal([n_hidden_1, n_hidden_2])),
'out': tf.Variable(tf.random_normal([n_hidden_2, n_classes]))
}
biases = {
'b1': tf.Variable(tf.random_normal([n_hidden_1])),
'b2': tf.Variable(tf.random_normal([n_hidden_2])),
'out': tf.Variable(tf.random_normal([n_classes]))
}

pred = tf.nn.softmax(out_layer)
cost = -tf.reduce_sum(y * tf.log(pred))
optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate).minimize(cost)

やはり、生存・非生存は1クラスにすべきでしょうか。
それとも別の問題があるのでしょうか。
よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mkgrei

2018/03/28 15:21

コードを```で囲ってください。
R.Shigemori

2018/03/28 23:44

本来、予測時は学習済みモデルを使って識別するだけなので、コスト計算は不要なはずです。よって、予測のコードがおかしい可能性があります。「予測時」が誤記で「学習時」なら上記の範囲で構いません
good_morning

2018/03/29 23:18

大変申し訳ありません。説明不足でした。修正しましたので、ご確認ください。
guest

回答1

0

ベストアンサー

まず、nanが発生する個所を切り分けないと原因を突き止めることができません。
したがって、何回目の学習でnanが発生するのか?、costの計算に至る過程のどこで発生するのか?を確認するためのコードを埋め込んで結果を確認しましょう。softmaxの計算式からするとout_layerがゼロまたはオーバーフローしている可能性が高いので、layer_1とlayer_2の推移も確認しましょう

投稿2018/03/29 23:38

R.Shigemori

総合スコア3376

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

good_morning

2018/03/30 01:54

ありがとうございます。 本日確認します。
good_morning

2018/03/31 15:07

確認したところ、costの計算を、 cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels=y, logits=out_layer)) とすればよいことがわかりました。 ありがとうございました。
good_morning

2018/03/31 22:30

お陰様で、Accuracy: 0.61538464になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問