🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
深層学習

深層学習は、多数のレイヤのニューラルネットワークによる機械学習手法。人工知能研究の一つでディープラーニングとも呼ばれています。コンピューター自体がデータの潜在的な特徴を汲み取り、効率的で的確な判断を実現することができます。

Google Colaboratory

Google Colaboratoryとは、無償のJupyterノートブック環境。教育や研究機関の機械学習の普及のためのGoogleの研究プロジェクトです。PythonやNumpyといった機械学習で要する大方の環境がすでに構築されており、コードの記述・実行、解析の保存・共有などが可能です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

619閲覧

Tensorflowで出力する値が1つの場合のaccuracyの求め方がわかりません

fdaskjlfda

総合スコア40

深層学習

深層学習は、多数のレイヤのニューラルネットワークによる機械学習手法。人工知能研究の一つでディープラーニングとも呼ばれています。コンピューター自体がデータの潜在的な特徴を汲み取り、効率的で的確な判断を実現することができます。

Google Colaboratory

Google Colaboratoryとは、無償のJupyterノートブック環境。教育や研究機関の機械学習の普及のためのGoogleの研究プロジェクトです。PythonやNumpyといった機械学習で要する大方の環境がすでに構築されており、コードの記述・実行、解析の保存・共有などが可能です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2019/09/21 07:55

編集2019/09/24 21:40

環境

Colaboratory
深層学習をtensorflowで作っています

ソースコード

ソースコード : https://drive.google.com/file/d/1E1ThZAuEc8-8oyArmmDsppOqXB3a9rDj/view?usp=sharing

質問

例えば、身長と体重から性別を判定する場合、出力値は[p, 1-p]のようになります(片方が男性、もう片方が女性で、pは確率)。
この場合、accuracyは、

python:accuracy.py

1# modelの定義 2y = tf.nn.softmax(省略) 3t = tf.placeholder(tf.float32, shape=[None, 1]) # 出力 4correct_prediction = tf.equal(tf.argmax(y, 1), tf.argmax(t, 1)) # *1 5accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32) # *2

としていて、問題なく動作しています。

*1の行:tとy(t:正解データ、y:modelの実行結果)は配列で、それぞれの配列の中の最大値のindexを比べることで、modelが推測した性別と正解データの性別が一致しているかを調べ、テストデータごとにTrueまたはFalseで結果をcorrect_predictionに保存しておく。
*2の行:correct_predictionに入っているTrueの数(1.0 x Trueの数)/correct_predictionに入っているTrue/Falseの数を計算することで、正答率を求めている
という理解をしています。

ですが、例えば体重と性別から身長を推測する場合、出力値は、[p]のようになります。
この場合、accuracyを求めるのに上の方法は使えず、(y - x) ** 2のような方法を使わないといけません。
ですが、正解データは標準化しているので、-1~1に値が収まっていないです。また、tensorflowに対する知識も浅いため、tensorflowでaccuracyをどのように実装すればよいかがわかりません。

どのように実装すればよいかを教えていただけると助かります。

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

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

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

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

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

Q71

2019/09/23 08:43

正解データは標準化しているとのことですが、どこで(ファイル?プログラム中?)標準化しているのでしょうか。プログラム中なら、標準化前のデータにアクセスできませんか?
fdaskjlfda

2019/09/23 08:56

プログラム中で標準化しています。また、colaboratoryのリンクのところから、ソースコードにアクセスでき、元データにもアクセスできます。どうかよろしくおねがいします。
Q71

2019/09/24 13:36

colaboratory ですが、 「このノートブックの読み込み中にエラーが発生しました。ファイルがアクセス可能であることを確認してから、もう一度お試しください。」 と、アクセスできないです。
guest

回答1

0

ベストアンサー

accuracy(正解率)というのは一般に、分類問題(カテゴリ形式の出力)での指標として利用されるものです。
ご提示の例でいうと、性別を予測するモデルは分類問題で、ご提示のコードで*1の行のtf.argmaxで、モデルの出力を男or女の二値に変換しているわけです。
いわば、このargmaxによって得た値(0or1)がモデルの出力と見なすことができます。

一方、身長を予測するモデルでは、出力は二値ではなく、身長を表す連続値のため、分類問題ではなく、回帰問題と呼ばれます。
この問題では、一般にaccuracyを使ってモデルの精度を評価することはありません。
通常は、期待する結果との差の絶対値の平均を使います。

投稿2019/09/23 13:26

qax

総合スコア622

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

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

qax

2019/09/24 22:16

そうですね。 それでも可能です。 ただし、tf.metrics配下のメソッドは少し癖があるので注意が必要です。 シンプルにやるのであれば、以下です。 tf.reduce_mean(tf.abs(y_label - y_preds))
fdaskjlfda

2019/09/25 11:10

わかりました! ありがとうございます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問