質問編集履歴
2
誤字の修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -150,11 +150,27 @@
|
|
150
150
|
|
151
151
|
x_train, y_train = load_data(train_path,299,299)
|
152
152
|
|
153
|
+
x_test, y_test = load_data(test_path,299,299)
|
154
|
+
|
155
|
+
|
156
|
+
|
157
|
+
model.fit_generator(
|
158
|
+
|
159
|
+
train_datagen.flow(x_train, y_train, batch_size=batchSize),
|
160
|
+
|
161
|
+
epochs = 500,
|
162
|
+
|
163
|
+
validation_data = test_datagen.flow(x_test, y_test, batch_size=batchSize),
|
164
|
+
|
153
|
-
|
165
|
+
verbose=1,
|
166
|
+
|
167
|
+
callbacks=[reduce_lr, csv_logger, checkpointer]
|
168
|
+
|
169
|
+
)
|
154
170
|
|
155
171
|
```
|
156
172
|
|
157
|
-
の
|
173
|
+
多い方のラベルを同じ枚数になるようにランダムに抽出してx_trainへ返すようにしました。こうすれば、epochのたびにall_img[0]ではランダムな画像が抽出され、集めた画像を無駄なく使えると思ったからです。しかしこれで上記のfit_generatorを回してみたところ、精度が50%の前後をウロウロしたまま全く学習しませんでした。私の想定以上の頻度でrandam関数が働いてしまっているのが原因だと思うのですが、どう直したらいいのか分からない状況です。
|
158
174
|
|
159
175
|
|
160
176
|
|
1
コードを端折らずに書きました。
test
CHANGED
File without changes
|
test
CHANGED
@@ -102,17 +102,59 @@
|
|
102
102
|
|
103
103
|
私なりにアンダーサンプリングのコードを書いたのですがうまくいきませんでした。
|
104
104
|
|
105
|
-
load_data関数内で
|
105
|
+
load_data関数内でラベル0とラベル1について、画像をそれぞれ別の配列に入れ、多い方のデータをランダムに抽出して少ない方のデータに合わせるようにしました。ラベル0の方が多いなら下記の通りです。
|
106
106
|
|
107
107
|
```
|
108
108
|
|
109
|
-
|
109
|
+
def load_data(folderpath, img_width, img_height):
|
110
110
|
|
111
|
+
all_img = [[],[]]
|
112
|
+
|
113
|
+
all_cat = [[],[]]
|
114
|
+
|
115
|
+
i=0
|
116
|
+
|
117
|
+
labelpath = glob.glob(os.path.join(folderpath,"*")) #labelpath='Dataset/train/0'と'Dataset/train/1'
|
118
|
+
|
119
|
+
|
120
|
+
|
121
|
+
for label in labelpath:
|
122
|
+
|
123
|
+
files = glob.glob(os.path.join(label,"*"))
|
124
|
+
|
125
|
+
for file in files:
|
126
|
+
|
127
|
+
image = cv2.imread(file)
|
128
|
+
|
129
|
+
image = cv2.resize(image, (img_width, img_height))
|
130
|
+
|
131
|
+
cat = os.path.basename(os.path.dirname(file)) #ファイル名の'0'とか'1'をラベルにする。
|
132
|
+
|
133
|
+
all_img[i].append(image)
|
134
|
+
|
135
|
+
all_cat[i].append(cat)
|
136
|
+
|
137
|
+
|
138
|
+
|
139
|
+
resample_img0 = np.array(random.sample(all_img[0], len(all_img[1])))
|
140
|
+
|
141
|
+
resample_cat0 = np.array(random.sample(all_cat[0], len(all_cat[1]))) #配列の中身は全部0なので、どこをサンプリングしても結果は変わらない。なので適当にサンプリングしてOK。
|
142
|
+
|
111
|
-
x = np.vstack((resample_img0, img1))
|
143
|
+
x = np.vstack((resample_img0, all_img[1]))
|
144
|
+
|
145
|
+
y = np.hstack((resample_cat0, all_cat[1]))
|
146
|
+
|
147
|
+
return (x,y)
|
148
|
+
|
149
|
+
|
150
|
+
|
151
|
+
x_train, y_train = load_data(train_path,299,299)
|
152
|
+
|
153
|
+
#あとは一緒
|
112
154
|
|
113
155
|
```
|
114
156
|
|
115
|
-
のようにランダムに同じ枚数になるように揃えてx_trainへ返すようにしました。こうすれば、epochのたびにimg0ではランダムな画像が抽出され、集めた画像を無駄なく使えると思ったからです。しかしこれで上記のfit_generatorを回してみたところ、精度が50%の前後をウロウロしたまま全く学習しませんでした。私の想定以上の頻度でrandam関数が働いてしまっているのが原因だと思うのですが、どう直したらいいのか分からない状況です。
|
157
|
+
のようにランダムに同じ枚数になるように揃えてx_trainへ返すようにしました。こうすれば、epochのたびにall_img[0]ではランダムな画像が抽出され、集めた画像を無駄なく使えると思ったからです。しかしこれで上記のfit_generatorを回してみたところ、精度が50%の前後をウロウロしたまま全く学習しませんでした。私の想定以上の頻度でrandam関数が働いてしまっているのが原因だと思うのですが、どう直したらいいのか分からない状況です。
|
116
158
|
|
117
159
|
|
118
160
|
|