質問編集履歴

3

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

2020/02/28 05:50

投稿

51sep
51sep

スコア22

test CHANGED
File without changes
test CHANGED
@@ -247,3 +247,5 @@
247
247
  #[-2.2691705]
248
248
 
249
249
  ```
250
+
251
+ 使用した画像のサンプル![使用した画像のサンプル](0b45721d0d349a07bc5ffcbd2c787a30.png)

2

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

2020/02/28 05:50

投稿

51sep
51sep

スコア22

test CHANGED
File without changes
test CHANGED
@@ -6,6 +6,8 @@
6
6
 
7
7
  こちらのサイトを使って、未知の画像を予測してみたいのですが方法が分かりません。出力して確認したいのは、以下の4点です。
8
8
 
9
+
10
+
9
11
  ・予測する画像の表示
10
12
 
11
13
  ・予測した確率
@@ -16,28 +18,232 @@
16
18
 
17
19
 
18
20
 
21
+ 予測しようと思って書いみたプログラムは以下(全文)です。
22
+
19
- 予測しよう思って書いプログラムは以下です。arrayがうまいこと配列になっていない?気がしています。(当然、np.argmaxも)
23
+ 最後に#case1, #case2と書いた「predict」のところです。 arrayがうまいこと配列になっていない?気がしています。(当然、np.argmaxも)
24
+
20
-
25
+ 上記4点がうまいこと確認できません。勉強不足でお恥ずかしい限りです。ですが、頑張りたいと思います。
26
+
21
- ```prediction=model.predict(val_data)
27
+ 基本的なことで申し訳ないですが、どなたかアドバイスをお願いしてもよろしいでしょうか。
22
-
23
- prediction[5]#数字は任意
28
+
24
-
25
- #array([0.9816407], dtype=float32)
29
+
26
-
27
-
28
-
29
- np.argmax(prediction[5])
30
-
31
- #0
32
-
33
-
34
-
35
- val_labels[5]
36
-
37
- #4.0
38
30
 
39
31
  ```
40
32
 
33
+ import os
34
+
35
+ import keras
36
+
41
- なかなか上記4点がうまいこと確認できません。勉強不足でお恥ずかしい限りです。
37
+ from keras.preprocessing.image import ImageDataGenerator
42
-
38
+
43
- 基本的なことで申し訳ないですが、どなたかアドバイスをお願いしてもよろしいでしょうか。
39
+ from keras.models import Sequential, Model
40
+
41
+ from keras.layers import Input, Dense, Dropout, Activation, Flatten,MaxPooling2D,Conv2D
42
+
43
+ from keras import optimizers
44
+
45
+ import tensorflow as tf
46
+
47
+ import numpy as np
48
+
49
+ from keras.preprocessing.image import load_img, img_to_array
50
+
51
+ from keras.applications.vgg16 import preprocess_input
52
+
53
+
54
+
55
+ # 分類クラス
56
+
57
+ classes = ['cat1','cat2','cat3']
58
+
59
+ nb_classes = len(classes)
60
+
61
+ batch_size_for_data_generator = 20
62
+
63
+
64
+
65
+ base_dir = "XXX"
66
+
67
+
68
+
69
+ train_dir = os.path.join(base_dir, 'train')
70
+
71
+ validation_dir = os.path.join(base_dir, 'validation')
72
+
73
+ test_dir = os.path.join(base_dir, 'test')
74
+
75
+
76
+
77
+ train_1_dir = os.path.join(train_dir, '1')
78
+
79
+ train_2_dir = os.path.join(train_dir, '2')
80
+
81
+ train_3_dir = os.path.join(train_dir, '3')
82
+
83
+
84
+
85
+ validation_1_dir = os.path.join(validation_dir, '1')
86
+
87
+ validation_2_dir = os.path.join(validation_dir, '2')
88
+
89
+ validation_3_dir = os.path.join(validation_dir, '3')
90
+
91
+
92
+
93
+ test_1_dir = os.path.join(test_dir, '1')
94
+
95
+ test_2_dir = os.path.join(test_dir, '2')
96
+
97
+ test_3_dir = os.path.join(test_dir, '3')
98
+
99
+
100
+
101
+ # 画像サイズ
102
+
103
+ img_rows, img_cols = 200, 200
104
+
105
+
106
+
107
+ train_datagen = ImageDataGenerator(rescale=1.0 / 255,shear_range=0.2,zoom_range=0.2,horizontal_flip=True)
108
+
109
+ 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)
110
+
111
+
112
+
113
+ test_datagen = ImageDataGenerator(rescale=1.0 / 255)
114
+
115
+ 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)
116
+
117
+
118
+
119
+ IMG_SHAPE = (224, 224, 3)
120
+
121
+ base_model = tf.keras.applications.MobileNetV2(input_shape=IMG_SHAPE,
122
+
123
+ include_top=False,
124
+
125
+ weights='imagenet')
126
+
127
+ base_model.trainable = False
128
+
129
+
130
+
131
+ maxpool_layer = tf.keras.layers.GlobalMaxPooling2D()
132
+
133
+ prediction_layer = tf.keras.layers.Dense(1)
134
+
135
+
136
+
137
+ learning_rate = 0.0001
138
+
139
+ model = tf.keras.Sequential([
140
+
141
+ base_model,
142
+
143
+ maxpool_layer,
144
+
145
+ prediction_layer
146
+
147
+ ])
148
+
149
+
150
+
151
+ base_learning_rate = 0.0001
152
+
153
+ model.compile(optimizer=tf.keras.optimizers.RMSprop(lr=base_learning_rate),
154
+
155
+ loss=tf.keras.losses.BinaryCrossentropy(from_logits=True),
156
+
157
+ metrics=['accuracy'])
158
+
159
+ model.summary()
160
+
161
+
162
+
163
+ initial_epochs = 10
164
+
165
+ validation_steps=20
166
+
167
+ loss0,accuracy0 = model.evaluate(validation_generator, steps = validation_steps)
168
+
169
+
170
+
171
+ history = model.fit(train_generator,
172
+
173
+ epochs=initial_epochs,
174
+
175
+ validation_data=validation_generator)
176
+
177
+
178
+
179
+ base_model.trainable = True
180
+
181
+
182
+
183
+ for layer in base_model.layers[:100]:
184
+
185
+ layer.trainable = False
186
+
187
+
188
+
189
+ print("Number of layers in the base model: ", len(base_model.layers))
190
+
191
+
192
+
193
+ model.compile(loss=tf.keras.losses.BinaryCrossentropy(from_logits=True),
194
+
195
+ optimizer = tf.keras.optimizers.RMSprop(lr=base_learning_rate/10),
196
+
197
+ metrics=['accuracy'])
198
+
199
+ model.summary()
200
+
201
+
202
+
203
+ fine_tune_epochs = 10
204
+
205
+ total_epochs = initial_epochs + fine_tune_epochs
206
+
207
+
208
+
209
+ history_fine = model.fit(train_generator,
210
+
211
+ epochs=total_epochs,
212
+
213
+ initial_epoch = history.epoch[-1],
214
+
215
+ validation_data=validation_generator)
216
+
217
+
218
+
219
+ #case1
220
+
221
+ filename = os.path.join('XXX/', 'XXX.png')
222
+
223
+ filename
224
+
225
+
226
+
227
+ img = load_img(filename, target_size=(224, 224))
228
+
229
+ x = img_to_array(img)
230
+
231
+ x = np.expand_dims(x, axis=0)
232
+
233
+
234
+
235
+ predict = model.predict(preprocess_input(x))
236
+
237
+ predict
238
+
239
+ #array([[4.345547]], dtype=float32)
240
+
241
+
242
+
243
+ #case2
244
+
245
+ print(model.predict(validation_generator)[0])
246
+
247
+ #[-2.2691705]
248
+
249
+ ```

1

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

2020/02/24 00:15

投稿

51sep
51sep

スコア22

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