teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

追記

2018/09/16 08:09

投稿

tiitoi
tiitoi

スコア21960

answer CHANGED
@@ -28,4 +28,28 @@
28
28
  print('{}: {:.2f}'.format(labels[i], results[i]))
29
29
  ```
30
30
 
31
+ ```
32
+ tonkinese: 0.46
33
+ birman: 0.10
34
+ ragdoll: 0.07
35
+ singapura cat: 0.05
36
+ abyssinian: 0.04
37
+ munchkin cat: 0.03
38
+ laperm: 0.02
39
+ scottish fold: 0.02
40
+ ragamuffin: 0.02
41
+ bengal: 0.02
42
+ somali cat: 0.02
43
+ scottish straight: 0.02
44
+ egyptianmau: 0.02
45
+ american shorthair: 0.02
46
+ british shorthair: 0.02
47
+ british longhair: 0.02
48
+ mainecoon: 0.02
49
+ selkirk rex: 0.02
50
+ siberian cat: 0.02
51
+ ```
52
+
53
+ ----
54
+
31
55
  あと別件ですが、git はデータセットやモデルファイルなど容量が大きいバイナリファイルを管理するのには向いてないので、どこかのストレージにアップロードして、git で管理しないほうがいいと思います。

1

追記

2018/09/16 08:09

投稿

tiitoi
tiitoi

スコア21960

answer CHANGED
@@ -2,4 +2,30 @@
2
2
  元の Example が5クラス分類問題ということは、出力層の出力数(ニューロン数) は5になっています。
3
3
  このモデルに30クラスあるデータセットを与えたとしても5個の値しかでてきません。
4
4
 
5
- このモデルで30クラスの分類をしたい場合は、ネットワークの出力層の出力数を30に変更する必要があります。
5
+ このモデルで30クラスの分類をしたい場合は、ネットワークの出力層の出力数を30に変更する必要があります。
6
+
7
+ ----
8
+
9
+ データセットとして使用している `tensorflow4cat/cat4cat/train/bottlenecks_max/` は19個なので、30クラスでなく、19クラスですね。
10
+
11
+ そして質問内容の原因ですが、5個しかでてきていなかった原因は、モデルの出力としては19クラスの確率値が出力されていたが、label_image.py で上位5クラスだけ表示するようになっていたからです。
12
+
13
+ 以下の行で降順ソート → 末尾5個 → reverse なので、上位5個にしぼられています。変数名にも top_k と書かれていますね。
14
+ ```
15
+ top_k = results.argsort()[-5:][::-1] # 上位5個だけ
16
+ ```
17
+
18
+ 19クラス全部の確率値を表示したい場合は以下のようにしてください。
19
+ ```python
20
+ print(results.shape) # (19,)
21
+ # 確率値なので合計1になることを確認
22
+ print(np.sum(results)) # 1.0000001
23
+
24
+ # 昇順ソート
25
+ top_k = results.argsort()[::-1]
26
+ labels = load_labels(label_file)
27
+ for i in top_k:
28
+ print('{}: {:.2f}'.format(labels[i], results[i]))
29
+ ```
30
+
31
+ あと別件ですが、git はデータセットやモデルファイルなど容量が大きいバイナリファイルを管理するのには向いてないので、どこかのストレージにアップロードして、git で管理しないほうがいいと思います。