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

質問編集履歴

3

使用した画像のサンプルをUPしました。

2020/02/28 05:50

投稿

51sep
51sep

スコア22

title CHANGED
File without changes
body CHANGED
@@ -122,4 +122,5 @@
122
122
  #case2
123
123
  print(model.predict(validation_generator)[0])
124
124
  #[-2.2691705]
125
- ```
125
+ ```
126
+ 使用した画像のサンプル![使用した画像のサンプル](0b45721d0d349a07bc5ffcbd2c787a30.png)

2

プログラムを全文表示しました。

2020/02/28 05:50

投稿

51sep
51sep

スコア22

title CHANGED
File without changes
body CHANGED
@@ -2,21 +2,124 @@
2
2
  で質問した者です。恥ずかしながら、また分からなくなってしまい、質問させて頂きました。
3
3
  公式サイト「[Transfer learning with a pretrained ConvNet](https://www.tensorflow.org/tutorials/images/transfer_learning?hl=ja)」を実装確認したところです。
4
4
  こちらのサイトを使って、未知の画像を予測してみたいのですが方法が分かりません。出力して確認したいのは、以下の4点です。
5
+
5
6
  ・予測する画像の表示
6
7
  ・予測した確率
7
8
  ・予測ラベル
8
9
  ・正解ラベル(画像のラベル)
9
10
 
11
+ 予測しようと思って書いみたプログラムは以下(全文)です。
10
- 予測しよう思って書いプログラムは以下です。arrayがうまいこと配列になっていない?気がしています。(当然、np.argmaxも)
12
+ 最後に#case1, #case2と書いた「predict」のところです。 arrayがうまいこと配列になっていない?気がしています。(当然、np.argmaxも)
13
+ 上記4点がうまいこと確認できません。勉強不足でお恥ずかしい限りです。ですが、頑張りたいと思います。
11
- ```prediction=model.predict(val_data)
14
+ 基本的なことで申し訳ないですが、どなたかアドバイスをお願いしてもよろしいでしょうか。
12
- prediction[5]#数字は任意
13
- #array([0.9816407], dtype=float32)
14
15
 
16
+ ```
17
+ import os
18
+ import keras
19
+ from keras.preprocessing.image import ImageDataGenerator
20
+ from keras.models import Sequential, Model
21
+ from keras.layers import Input, Dense, Dropout, Activation, Flatten,MaxPooling2D,Conv2D
15
- np.argmax(prediction[5])
22
+ from keras import optimizers
23
+ import tensorflow as tf
16
- #0
24
+ import numpy as np
25
+ from keras.preprocessing.image import load_img, img_to_array
26
+ from keras.applications.vgg16 import preprocess_input
17
27
 
28
+ # 分類クラス
29
+ classes = ['cat1','cat2','cat3']
30
+ nb_classes = len(classes)
31
+ batch_size_for_data_generator = 20
32
+
33
+ base_dir = "XXX"
34
+
35
+ train_dir = os.path.join(base_dir, 'train')
36
+ validation_dir = os.path.join(base_dir, 'validation')
37
+ test_dir = os.path.join(base_dir, 'test')
38
+
39
+ train_1_dir = os.path.join(train_dir, '1')
40
+ train_2_dir = os.path.join(train_dir, '2')
41
+ train_3_dir = os.path.join(train_dir, '3')
42
+
43
+ validation_1_dir = os.path.join(validation_dir, '1')
44
+ validation_2_dir = os.path.join(validation_dir, '2')
45
+ validation_3_dir = os.path.join(validation_dir, '3')
46
+
47
+ test_1_dir = os.path.join(test_dir, '1')
48
+ test_2_dir = os.path.join(test_dir, '2')
49
+ test_3_dir = os.path.join(test_dir, '3')
50
+
51
+ # 画像サイズ
52
+ img_rows, img_cols = 200, 200
53
+
54
+ train_datagen = ImageDataGenerator(rescale=1.0 / 255,shear_range=0.2,zoom_range=0.2,horizontal_flip=True)
55
+ train_generator = train_datagen.flow_from_directory(directory=train_dir,target_size=(img_rows, img_cols),color_mode='rgb',batch_size=batch_size_for_data_generator,shuffle=True)
56
+
57
+ test_datagen = ImageDataGenerator(rescale=1.0 / 255)
58
+ validation_generator = test_datagen.flow_from_directory(directory=validation_dir,target_size=(img_rows, img_cols),color_mode='rgb',batch_size=batch_size_for_data_generator,shuffle=True)
59
+
60
+ IMG_SHAPE = (224, 224, 3)
61
+ base_model = tf.keras.applications.MobileNetV2(input_shape=IMG_SHAPE,
62
+ include_top=False,
63
+ weights='imagenet')
64
+ base_model.trainable = False
65
+
66
+ maxpool_layer = tf.keras.layers.GlobalMaxPooling2D()
67
+ prediction_layer = tf.keras.layers.Dense(1)
68
+
69
+ learning_rate = 0.0001
70
+ model = tf.keras.Sequential([
71
+ base_model,
72
+ maxpool_layer,
73
+ prediction_layer
74
+ ])
75
+
76
+ base_learning_rate = 0.0001
77
+ model.compile(optimizer=tf.keras.optimizers.RMSprop(lr=base_learning_rate),
78
+ loss=tf.keras.losses.BinaryCrossentropy(from_logits=True),
79
+ metrics=['accuracy'])
80
+ model.summary()
81
+
82
+ initial_epochs = 10
18
- val_labels[5]
83
+ validation_steps=20
84
+ loss0,accuracy0 = model.evaluate(validation_generator, steps = validation_steps)
85
+
86
+ history = model.fit(train_generator,
87
+ epochs=initial_epochs,
88
+ validation_data=validation_generator)
89
+
90
+ base_model.trainable = True
91
+
92
+ for layer in base_model.layers[:100]:
93
+ layer.trainable = False
94
+
95
+ print("Number of layers in the base model: ", len(base_model.layers))
96
+
97
+ model.compile(loss=tf.keras.losses.BinaryCrossentropy(from_logits=True),
98
+ optimizer = tf.keras.optimizers.RMSprop(lr=base_learning_rate/10),
99
+ metrics=['accuracy'])
100
+ model.summary()
101
+
102
+ fine_tune_epochs = 10
103
+ total_epochs = initial_epochs + fine_tune_epochs
104
+
105
+ history_fine = model.fit(train_generator,
106
+ epochs=total_epochs,
107
+ initial_epoch = history.epoch[-1],
108
+ validation_data=validation_generator)
109
+
19
- #4.0
110
+ #case1
111
+ filename = os.path.join('XXX/', 'XXX.png')
112
+ filename
113
+
114
+ img = load_img(filename, target_size=(224, 224))
115
+ x = img_to_array(img)
116
+ x = np.expand_dims(x, axis=0)
117
+
118
+ predict = model.predict(preprocess_input(x))
119
+ predict
120
+ #array([[4.345547]], dtype=float32)
121
+
122
+ #case2
123
+ print(model.predict(validation_generator)[0])
124
+ #[-2.2691705]
20
- ```
125
+ ```
21
- なかなか上記4点がうまいこと確認できません。勉強不足でお恥ずかしい限りです。
22
- 基本的なことで申し訳ないですが、どなたかアドバイスをお願いしてもよろしいでしょうか。

1

質問内容を「未知の画像を予測する方法が分からない」としました。

2020/02/24 00:15

投稿

51sep
51sep

スコア22

title CHANGED
File without changes
body CHANGED
@@ -1,28 +1,13 @@
1
1
  [転移学習した後のモデルで、特定の画像を予測するには?(TensorFlow)](https://teratail.com/questions/241424)
2
2
  で質問した者です。恥ずかしながら、また分からなくなってしまい、質問させて頂きました。
3
- 現状は、公式サイト「[Transfer learning with a pretrained ConvNet](https://www.tensorflow.org/tutorials/images/transfer_learning?hl=ja)」を、自分で用意した画像に置き換えて、確認したところです。
3
+ 公式サイト「[Transfer learning with a pretrained ConvNet](https://www.tensorflow.org/tutorials/images/transfer_learning?hl=ja)」を実確認したところです。
4
- ですがやはり、予測がいこといきません。出力して確認したいのは、以下の4点です。
4
+ こちらのサイトを使って未知の画像を予測してみたいのです方法が分かりません。出力して確認したいのは、以下の4点です。
5
5
  ・予測する画像の表示
6
6
  ・予測した確率
7
7
  ・予測ラベル
8
8
  ・正解ラベル(画像のラベル)
9
- 自分で用意した画像を投入するためのプログラムは以下です。画像は、0~9が書かれたpngで、各数字10files、合計100filesあります。
10
- ```
11
- #データセットを作る
12
- labels = []
13
- for file in filenames:
14
- img = load_img(file, color_mode = "grayscale", target_size=(28,28))
15
- array = img_to_array(img)
16
- cat = file[11] #ファイル名からラベルをとっている。
17
- labels.append(cat)
18
- labels = np.array(labels,float)
19
9
 
20
- train_filenames, val_filenames, train_labels, val_labels = train_test_split(filenames,
21
- labels,
22
- train_size=0.9,
23
- random_state=420)
24
- ```
25
- そして、予測しようと思って書いたプログラムは以下です。arrayがうまいこと配列になっていない?気がしています。(当然、np.argmaxも)
10
+ 予測しようと思って書いたプログラムは以下です。arrayがうまいこと配列になっていない?気がしています。(当然、np.argmaxも)
26
11
  ```prediction=model.predict(val_data)
27
12
  prediction[5]#数字は任意
28
13
  #array([0.9816407], dtype=float32)
@@ -33,4 +18,5 @@
33
18
  val_labels[5]
34
19
  #4.0
35
20
  ```
21
+ なかなか上記4点がうまいこと確認できません。勉強不足でお恥ずかしい限りです。
36
- なかなか上記4点がうまいこと確認できません。基本的なことで申し訳ないですが、どなたかアドバイスをお願いしてもよろしいでしょうか。
22
+ 基本的なことで申し訳ないですが、どなたかアドバイスをお願いしてもよろしいでしょうか。