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

質問編集履歴

2

修正依頼の反映

2020/02/11 12:35

投稿

TakaKan
TakaKan

スコア10

title CHANGED
File without changes
body CHANGED
@@ -3,7 +3,123 @@
3
3
  h5ファイルをtfliteに変換してandroid端末上で動かせるようにしたいです
4
4
 
5
5
  ※h5ファイルは、計4つのクラスそれぞれトレーニング画像約300枚、バリデーション用画像役100枚でfine-tuningを用いて作成しました。
6
+ 作成時に使用したコードは以下のようになります。
7
+ ```Python
8
+ import os
9
+ from keras.applications.vgg16 import VGG16
10
+ from keras.preprocessing.image import ImageDataGenerator
11
+ from keras.models import Sequential, Model
12
+ from keras.layers import Input, Activation, Dropout, Flatten, Dense
13
+ from keras.preprocessing.image import ImageDataGenerator
14
+ from keras import optimizers
15
+ import numpy as np
16
+ import time
6
17
 
18
+ # 分類するクラス
19
+ classes = ['arin', 'kanako', 'reni', 'shiori']
20
+ nb_classes = len(classes)
21
+
22
+ img_width, img_height = 150, 150
23
+
24
+ # トレーニング用とバリデーション用の画像格納先
25
+ train_data_dir = '/dataset/train'
26
+ validation_data_dir = 'dataset/validation'
27
+
28
+ # 今回はトレーニング用に200枚、バリデーション用に50枚の画像を用意した。
29
+ nb_train_samples = 1438
30
+ nb_validatbion_samples = 389
31
+
32
+ batch_size = 16
33
+ nb_epoch = 10
34
+
35
+
36
+ result_dir = 'results'
37
+ if not os.path.exists(result_dir):
38
+ os.mkdir(result_dir)
39
+
40
+
41
+ def vgg_model_maker():
42
+ """ VGG16のモデルをFC層以外使用。FC層のみ作成して結合して用意する """
43
+
44
+ # VGG16のロード。FC層は不要なので include_top=False
45
+ input_tensor = Input(shape=(img_width, img_height, 3))
46
+ vgg16 = VGG16(include_top=False, weights='imagenet', input_tensor=input_tensor)
47
+
48
+ # FC層の作成
49
+ top_model = Sequential()
50
+ top_model.add(Flatten(input_shape=vgg16.output_shape[1:]))
51
+ top_model.add(Dense(256, activation='relu'))
52
+ top_model.add(Dropout(0.5))
53
+ top_model.add(Dense(nb_classes, activation='softmax'))
54
+
55
+ # VGG16とFC層を結合してモデルを作成
56
+ model = Model(input=vgg16.input, output=top_model(vgg16.output))
57
+
58
+ return model
59
+
60
+
61
+ def image_generator():
62
+ """ ディレクトリ内の画像を読み込んでトレーニングデータとバリデーションデータの作成 """
63
+ train_datagen = ImageDataGenerator(
64
+ rescale=1.0 / 255,
65
+ zoom_range=0.2,
66
+ horizontal_flip=True)
67
+
68
+ validation_datagen = ImageDataGenerator(rescale=1.0 / 255)
69
+
70
+ train_generator = train_datagen.flow_from_directory(
71
+ train_data_dir,
72
+ target_size=(img_width, img_height),
73
+ color_mode='rgb',
74
+ classes=classes,
75
+ class_mode='categorical',
76
+ batch_size=batch_size,
77
+ shuffle=True)
78
+
79
+ validation_generator = validation_datagen.flow_from_directory(
80
+ validation_data_dir,
81
+ target_size=(img_width, img_height),
82
+ color_mode='rgb',
83
+ classes=classes,
84
+ class_mode='categorical',
85
+ batch_size=batch_size,
86
+ shuffle=True)
87
+
88
+ return (train_generator, validation_generator)
89
+
90
+
91
+ if __name__ == '__main__':
92
+ start = time.time()
93
+
94
+ # モデル作成
95
+ vgg_model = vgg_model_maker()
96
+
97
+ # 最後のconv層の直前までの層をfreeze
98
+ for layer in vgg_model.layers[:15]:
99
+ layer.trainable = False
100
+
101
+ # 多クラス分類を指定
102
+ vgg_model.compile(loss='categorical_crossentropy',
103
+ optimizer=optimizers.SGD(lr=1e-3, momentum=0.9),
104
+ metrics=['accuracy'])
105
+
106
+ # 画像のジェネレータ生成
107
+ train_generator, validation_generator = image_generator()
108
+
109
+ # Fine-tuning
110
+ history = vgg_model.fit_generator(
111
+ train_generator,
112
+ samples_per_epoch=nb_train_samples,
113
+ nb_epoch=nb_epoch,
114
+ validation_data=validation_generator,
115
+ nb_val_samples=nb_validation_samples)
116
+
117
+ vgg_model.save_weights(os.path.join(result_dir, 'finetuning.h5'))
118
+
119
+ process_time = (time.time() - start) / 60
120
+ print(u'学習終了。かかった時間は', process_time, u'分です。')
121
+ ```
122
+
7
123
  ### 発生している問題・エラーメッセージ
8
124
 
9
125
  tensorflowのホームページにあるコードをファイル名のみ変更して試したところ

1

修正依頼の反映

2020/02/11 12:35

投稿

TakaKan
TakaKan

スコア10

title CHANGED
File without changes
body CHANGED
@@ -2,6 +2,8 @@
2
2
 
3
3
  h5ファイルをtfliteに変換してandroid端末上で動かせるようにしたいです
4
4
 
5
+ ※h5ファイルは、計4つのクラスそれぞれトレーニング画像約300枚、バリデーション用画像役100枚でfine-tuningを用いて作成しました。
6
+
5
7
  ### 発生している問題・エラーメッセージ
6
8
 
7
9
  tensorflowのホームページにあるコードをファイル名のみ変更して試したところ