質問編集履歴

2

誤字の修正

2018/11/22 04:16

投稿

taku_t
taku_t

スコア47

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
- ようにンダムに同じ枚数になるように揃えてx_trainへ返すようにしました。こうすれば、epochのたびにall_img[0]ではランダムな画像が抽出され、集めた画像を無駄なく使えると思ったからです。しかしこれで上記のfit_generatorを回してみたところ、精度が50%の前後をウロウロしたまま全く学習しませんでした。私の想定以上の頻度でrandam関数が働いてしまっているのが原因だと思うのですが、どう直したらいいのか分からない状況です。
173
+ 多い方のラベルを同じ枚数になるようにランダムに抽出してx_trainへ返すようにしました。こうすれば、epochのたびにall_img[0]ではランダムな画像が抽出され、集めた画像を無駄なく使えると思ったからです。しかしこれで上記のfit_generatorを回してみたところ、精度が50%の前後をウロウロしたまま全く学習しませんでした。私の想定以上の頻度でrandam関数が働いてしまっているのが原因だと思うのですが、どう直したらいいのか分からない状況です。
158
174
 
159
175
 
160
176
 

1

コードを端折らずに書きました。

2018/11/22 04:16

投稿

taku_t
taku_t

スコア47

test CHANGED
File without changes
test CHANGED
@@ -102,17 +102,59 @@
102
102
 
103
103
  私なりにアンダーサンプリングのコードを書いたのですがうまくいきませんでした。
104
104
 
105
- load_data関数内で0と1について、画像をそれぞれ別の配列(img0とimg1)append、例えばimg0の方が枚数が多いなら
105
+ load_data関数内でラベル0とラベル1について、画像をそれぞれ別の配列に入れ、多い方のデータをランダムに抽出て少ない方のデータに合わせるようにしました。ラベル0の方が多いなら下記の通りです。
106
106
 
107
107
  ```
108
108
 
109
- resample_img0 = np.array(random.sample(img0, len(img1)))
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