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

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

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

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

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

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

Q&A

解決済

1回答

5051閲覧

【Tensorflow】機械学習チュートリアルでretrain.pyを動かしても学習データが認識されない

entry4code

総合スコア14

Python 3.x

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

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

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

0グッド

0クリップ

投稿2018/09/16 05:32

このチュートリアルに従って、機械学習プログラムを作って実践してみました。

https://www.tensorflow.org/hub/tutorials/image_retraining

以下のように学習を実施しています。

python3 retrain.py
--bottleneck_dir=bottlenecks
--how_many_training_steps=100
--model_dir=inception
--summaries_dir=training_summaries/basic
--output_graph=retrained_graph.pb
--output_labels=retrained_labels.txt
--image_dir=gakusyu_data

5種類の動物の画像データを、それぞれ60枚ずつ与えました。
これは問題なく学習完了し、以下のコードを実行すると結果が5種類帰ってきました。

./tensorflow/bin/activate python3 ./train/label_image.py --image $imgfile --graph ./train/retrained_graph_max.pb --labels ./train/retrained_labels_max.txt --input_layer=Placeholder deactivate

$imgfileは与える画像ファイルです。

その後、30種類のデータで各100枚ずつ学習させると、以下のような出力を確認しました。

... (many INFO lines) ... INFO:tensorflow:Initialize variable module/InceptionV3/Mixed_7c/Branch_3/Conv2d_0b_1x1/weights:0 from checkpoint b'/tmp/tfhub_modules/11d9faf945d073033780fd924b2b09ff42155763/variables/variables' with InceptionV3/Mixed_7c/Branch_3/Conv2d_0b_1x1/weights INFO:tensorflow:Restoring parameters from /tmp/_retrain_checkpoint INFO:tensorflow:Froze 378 variables. INFO:tensorflow:Converted 378 variables to const ops.

その後、以下の内容を実行したところ、5種類しか帰ってきませんでした。

./tensorflow/bin/activate python3 ./train/label_image.py --image $imgfile --graph ./train/retrained_graph_max.pb --labels ./train/retrained_labels_max.txt --input_layer=Placeholder deactivate

retrained_labels.txtには全種類の記載があります。

エラーが確認できていないため、事象も把握できていません。
何かヒントはありますでしょうか。

コードはこちらです。
https://github.com/octocatz/tensorflow4cat/tree/staging

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

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

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

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

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

guest

回答1

0

ベストアンサー

クラス分類ということは出力層から各クラスごとの確率値が出てきます。
元の Example が5クラス分類問題ということは、出力層の出力数(ニューロン数) は5になっています。
このモデルに30クラスあるデータセットを与えたとしても5個の値しかでてきません。

このモデルで30クラスの分類をしたい場合は、ネットワークの出力層の出力数を30に変更する必要があります。


データセットとして使用している tensorflow4cat/cat4cat/train/bottlenecks_max/ は19個なので、30クラスでなく、19クラスですね。

そして質問内容の原因ですが、5個しかでてきていなかった原因は、モデルの出力としては19クラスの確率値が出力されていたが、label_image.py で上位5クラスだけ表示するようになっていたからです。

以下の行で降順ソート → 末尾5個 → reverse なので、上位5個にしぼられています。変数名にも top_k と書かれていますね。

top_k = results.argsort()[-5:][::-1] # 上位5個だけ

19クラス全部の確率値を表示したい場合は以下のようにしてください。

python

1 print(results.shape) # (19,) 2 # 確率値なので合計1になることを確認 3 print(np.sum(results)) # 1.0000001 4 5 # 昇順ソート 6 top_k = results.argsort()[::-1] 7 labels = load_labels(label_file) 8 for i in top_k: 9 print('{}: {:.2f}'.format(labels[i], results[i]))
tonkinese: 0.46 birman: 0.10 ragdoll: 0.07 singapura cat: 0.05 abyssinian: 0.04 munchkin cat: 0.03 laperm: 0.02 scottish fold: 0.02 ragamuffin: 0.02 bengal: 0.02 somali cat: 0.02 scottish straight: 0.02 egyptianmau: 0.02 american shorthair: 0.02 british shorthair: 0.02 british longhair: 0.02 mainecoon: 0.02 selkirk rex: 0.02 siberian cat: 0.02

あと別件ですが、git はデータセットやモデルファイルなど容量が大きいバイナリファイルを管理するのには向いてないので、どこかのストレージにアップロードして、git で管理しないほうがいいと思います。

投稿2018/09/16 06:33

編集2018/09/16 08:09
tiitoi

総合スコア21956

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

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

entry4code

2018/09/16 06:38

ありがとうございます。 私の理解が不足しているところではありますが、具体的にはどのあたりで設定すればいいのでしょうか?
tiitoi

2018/09/16 07:01 編集

retrain.py によると、create_image_lists() でディレクトリ構造からクラス数を類推する仕組みになっているようですね。image_dir は30クラス分のサブフォルダを作って画像を分けてありますか?
entry4code

2018/09/16 07:15 編集

はい。以下のように分けてはいるのですが。。。 https://github.com/octocatz/tensorflow4cat/tree/staging/cat4cat/train/gakusyu_data_max このように実行&結果返却されます。 . ./tensorflow/bin/activate && python3 ./train/label_image.py --image ./uploads/916a7af772785f7396c3a8c6b0e9b3af.jpg --graph ./train/retrained_graph_max.pb --labels ./train/retrained_labels_max.txt --input_layer=Placeholder && deactivate 2018-09-16 07:14:32.284349: I tensorflow/core/platform/cpu_feature_guard.cc:141] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 FMA abyssinian 0.12221127 american shorthair 0.087399244 egyptianmau 0.08331173 singapura cat 0.08298709 bengal 0.06471493
tiitoi

2018/09/16 08:05

回答を追記しました。
entry4code

2018/09/16 11:14

うまくいくようになりました。大変ありがとうございました!
tiitoi

2018/09/16 11:24

動いたようでよかったです。 解決したようでしたら、質問は Close してください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問