質問編集履歴

2

ソースコードの追記

2020/01/21 01:04

投稿

birdbeetle
birdbeetle

スコア4

test CHANGED
File without changes
test CHANGED
@@ -32,6 +32,406 @@
32
32
 
33
33
  ```python
34
34
 
35
+
36
+
37
+ import keras
38
+
39
+ from keras.models import Model
40
+
41
+ from keras.layers import Input, Dense, Dropout, Activation
42
+
43
+ from keras.layers import Conv2D, GlobalAveragePooling2D
44
+
45
+ from keras.layers import BatchNormalization, Add
46
+
47
+ from keras.callbacks import EarlyStopping, ModelCheckpoint
48
+
49
+ from keras.models import load_model
50
+
51
+
52
+
53
+ # dataset files
54
+
55
+ print("\n***********************************************")
56
+
57
+ print("dataset files")
58
+
59
+ train_files = ["esc_melsp_train_raw.npz",
60
+
61
+ "esc_melsp_train_ss.npz",
62
+
63
+ "esc_melsp_train_st.npz",
64
+
65
+ "esc_melsp_train_wn.npz",
66
+
67
+ "esc_melsp_train_com.npz"]
68
+
69
+ test_file = "esc_melsp_test.npz"
70
+
71
+
72
+
73
+ train_num = 1500
74
+
75
+ test_num = 500
76
+
77
+
78
+
79
+ # define dataset placeholders
80
+
81
+ print("\n***********************************************")
82
+
83
+ print("define dataset placeholders")
84
+
85
+ x_train = np.zeros(freq * time * train_num * len(train_files)).reshape(train_num * len(train_files), freq, time)
86
+
87
+ y_train = np.zeros(train_num * len(train_files))
88
+
89
+
90
+
91
+ # load dataset
92
+
93
+ print("\n***********************************************")
94
+
95
+ print("load dataset")
96
+
97
+ for i in range(len(train_files)):
98
+
99
+ data = np.load(train_files[i])
100
+
101
+ x_train[i * train_num:(i + 1) * train_num] = data["x"]
102
+
103
+ y_train[i * train_num:(i + 1) * train_num] = data["y"]
104
+
105
+
106
+
107
+ # load test dataset
108
+
109
+ print("\n***********************************************")
110
+
111
+ print("load test dataset")
112
+
113
+ test_data = np.load(test_file)
114
+
115
+ x_test = test_data["x"]
116
+
117
+ y_test = test_data["y"]
118
+
119
+
120
+
121
+ # redefine target data into one hot vector
122
+
123
+ print("\n***********************************************")
124
+
125
+ print("redefine target data into one hot vector")
126
+
127
+ classes = 50
128
+
129
+ y_train = keras.utils.to_categorical(y_train, classes)
130
+
131
+ y_test = keras.utils.to_categorical(y_test, classes)
132
+
133
+
134
+
135
+ # reshape training dataset
136
+
137
+ print("\n***********************************************")
138
+
139
+ print("reshape training dataset")
140
+
141
+ x_train = x_train.reshape(train_num * 5, freq, time, 1)
142
+
143
+ x_test = x_test.reshape(test_num, freq, time, 1)
144
+
145
+
146
+
147
+ classes = 50
148
+
149
+ y_test = keras.utils.to_categorical(y_test, classes)
150
+
151
+ x_test = x_test.reshape(test_num, freq, time, 1)
152
+
153
+
154
+
155
+ print("x train:{0}\ny train:{1}\nx test:{2}\ny test:{3}".format(x_train.shape,
156
+
157
+ y_train.shape,
158
+
159
+ x_test.shape,
160
+
161
+ y_test.shape))
162
+
163
+
164
+
165
+
166
+
167
+ def cba(inputs, filters, kernel_size, strides):
168
+
169
+ x = Conv2D(filters, kernel_size=kernel_size, strides=strides, padding='same')(inputs)
170
+
171
+ x = BatchNormalization()(x)
172
+
173
+ x = Activation("relu")(x)
174
+
175
+ return x
176
+
177
+
178
+
179
+
180
+
181
+ # define CNN
182
+
183
+ print("\n***********************************************")
184
+
185
+ print("define CNN")
186
+
187
+ inputs = Input(shape=(x_train.shape[1:]))
188
+
189
+
190
+
191
+ x_1 = cba(inputs, filters=32, kernel_size=(1, 8), strides=(1, 2))
192
+
193
+ x_1 = cba(x_1, filters=32, kernel_size=(8, 1), strides=(2, 1))
194
+
195
+ x_1 = cba(x_1, filters=64, kernel_size=(1, 8), strides=(1, 2))
196
+
197
+ x_1 = cba(x_1, filters=64, kernel_size=(8, 1), strides=(2, 1))
198
+
199
+
200
+
201
+ x_2 = cba(inputs, filters=32, kernel_size=(1, 16), strides=(1, 2))
202
+
203
+ x_2 = cba(x_2, filters=32, kernel_size=(16, 1), strides=(2, 1))
204
+
205
+ x_2 = cba(x_2, filters=64, kernel_size=(1, 16), strides=(1, 2))
206
+
207
+ x_2 = cba(x_2, filters=64, kernel_size=(16, 1), strides=(2, 1))
208
+
209
+
210
+
211
+ x_3 = cba(inputs, filters=32, kernel_size=(1, 32), strides=(1, 2))
212
+
213
+ x_3 = cba(x_3, filters=32, kernel_size=(32, 1), strides=(2, 1))
214
+
215
+ x_3 = cba(x_3, filters=64, kernel_size=(1, 32), strides=(1, 2))
216
+
217
+ x_3 = cba(x_3, filters=64, kernel_size=(32, 1), strides=(2, 1))
218
+
219
+
220
+
221
+ x_4 = cba(inputs, filters=32, kernel_size=(1, 64), strides=(1, 2))
222
+
223
+ x_4 = cba(x_4, filters=32, kernel_size=(64, 1), strides=(2, 1))
224
+
225
+ x_4 = cba(x_4, filters=64, kernel_size=(1, 64), strides=(1, 2))
226
+
227
+ x_4 = cba(x_4, filters=64, kernel_size=(64, 1), strides=(2, 1))
228
+
229
+
230
+
231
+ x = Add()([x_1, x_2, x_3, x_4])
232
+
233
+
234
+
235
+ x = cba(x, filters=128, kernel_size=(1, 16), strides=(1, 2))
236
+
237
+ x = cba(x, filters=128, kernel_size=(16, 1), strides=(2, 1))
238
+
239
+
240
+
241
+ x = GlobalAveragePooling2D()(x)
242
+
243
+ x = Dense(classes)(x)
244
+
245
+ x = Activation("softmax")(x)
246
+
247
+
248
+
249
+ model = Model(inputs, x)
250
+
251
+
252
+
253
+ model.summary()
254
+
255
+
256
+
257
+ # initiate Adam optimizer
258
+
259
+ print("\n***********************************************")
260
+
261
+ print("initiate Adam optimizer")
262
+
263
+ opt = keras.optimizers.adam(lr=0.00001, decay=1e-6, amsgrad=True)
264
+
265
+
266
+
267
+ # Let's train the model using Adam with amsgrad
268
+
269
+ print("\n***********************************************")
270
+
271
+ print("Let's train the model using Adam with amsgrad")
272
+
273
+ model.compile(loss='categorical_crossentropy',
274
+
275
+ optimizer=opt,
276
+
277
+ metrics=['accuracy'])
278
+
279
+
280
+
281
+ # directory for model checkpoints
282
+
283
+ print("\n***********************************************")
284
+
285
+ print("directory for model checkpoints")
286
+
287
+ model_dir = "./models"
288
+
289
+ if not os.path.exists(model_dir):
290
+
291
+ os.mkdir(model_dir)
292
+
293
+
294
+
295
+ # early stopping and model checkpoint# early
296
+
297
+ print("\n***********************************************")
298
+
299
+ print("early stopping and model checkpoint# early")
300
+
301
+ es_cb = EarlyStopping(monitor='val_loss', patience=10, verbose=1, mode='auto')
302
+
303
+ chkpt = os.path.join(model_dir, 'esc50_.{epoch:02d}_{val_loss:.4f}_{val_acc:.4f}.hdf5')
304
+
305
+ cp_cb = ModelCheckpoint(filepath=chkpt, monitor='val_loss', verbose=1, save_best_only=True, mode='auto')
306
+
307
+
308
+
309
+ # between class data generator
310
+
311
+ print("\n***********************************************")
312
+
313
+ print("between class data generator")
314
+
315
+
316
+
317
+
318
+
319
+ class MixupGenerator():
320
+
321
+ def __init__(self, x_train, y_train, batch_size=16, alpha=0.2, shuffle=True):
322
+
323
+ self.x_train = x_train
324
+
325
+ self.y_train = y_train
326
+
327
+ self.batch_size = batch_size
328
+
329
+ self.alpha = alpha
330
+
331
+ self.shuffle = shuffle
332
+
333
+ self.sample_num = len(x_train)
334
+
335
+
336
+
337
+ def __call__(self):
338
+
339
+ while True:
340
+
341
+ indexes = self.__get_exploration_order()
342
+
343
+ itr_num = int(len(indexes) // (self.batch_size * 2))
344
+
345
+
346
+
347
+ for i in range(itr_num):
348
+
349
+ batch_ids = indexes[i * self.batch_size * 2:(i + 1) * self.batch_size * 2]
350
+
351
+ x, y = self.__data_generation(batch_ids)
352
+
353
+
354
+
355
+ yield x, y
356
+
357
+
358
+
359
+ def __get_exploration_order(self):
360
+
361
+ indexes = np.arange(self.sample_num)
362
+
363
+
364
+
365
+ if self.shuffle:
366
+
367
+ np.random.shuffle(indexes)
368
+
369
+
370
+
371
+ return indexes
372
+
373
+
374
+
375
+ def __data_generation(self, batch_ids):
376
+
377
+ _, h, w, c = self.x_train.shape
378
+
379
+ _, class_num = self.y_train.shape
380
+
381
+ x1 = self.x_train[batch_ids[:self.batch_size]]
382
+
383
+ x2 = self.x_train[batch_ids[self.batch_size:]]
384
+
385
+ y1 = self.y_train[batch_ids[:self.batch_size]]
386
+
387
+ y2 = self.y_train[batch_ids[self.batch_size:]]
388
+
389
+ l = np.random.beta(self.alpha, self.alpha, self.batch_size)
390
+
391
+ x_l = l.reshape(self.batch_size, 1, 1, 1)
392
+
393
+ y_l = l.reshape(self.batch_size, 1)
394
+
395
+
396
+
397
+ x = x1 * x_l + x2 * (1 - x_l)
398
+
399
+ y = y1 * y_l + y2 * (1 - y_l)
400
+
401
+
402
+
403
+ return x, y
404
+
405
+
406
+
407
+
408
+
409
+ # train model
410
+
411
+ print("\n***********************************************")
412
+
413
+ print("train model")
414
+
415
+ batch_size = 16
416
+
417
+ epochs = 1000
418
+
419
+ print("training_generator")
420
+
421
+ training_generator = MixupGenerator(x_train, y_train)()
422
+
423
+ print("model.fit_generator")
424
+
425
+
426
+
427
+
428
+
429
+
430
+
431
+ y_train =
432
+
433
+
434
+
35
435
  model.fit_generator(generator=training_generator,
36
436
 
37
437
  steps_per_epoch=x_train.shape[0] // batch_size,
@@ -46,6 +446,36 @@
46
446
 
47
447
  callbacks=[es_cb, cp_cb])
48
448
 
449
+
450
+
451
+
452
+
453
+
454
+
455
+ print("model = load_model")
456
+
457
+ model = load_model("./models/esc50_.105_0.8096_0.8200.hdf5")
458
+
459
+
460
+
461
+ # evaluation
462
+
463
+ print("\n***********************************************")
464
+
465
+ print("evaluation")
466
+
467
+ evaluation = model.evaluate(x_test, y_test)
468
+
469
+ print(evaluation)
470
+
471
+
472
+
473
+ print("\n***********************************************")
474
+
475
+ print("CNN program finish")
476
+
477
+
478
+
49
479
  ```
50
480
 
51
481
  いくつか同じような状況の方がいらっしゃったみたいで、参考にしたのですがうまくいきませんでした。

1

初心者マークをつけた

2020/01/21 01:04

投稿

birdbeetle
birdbeetle

スコア4

test CHANGED
File without changes
test CHANGED
@@ -48,4 +48,8 @@
48
48
 
49
49
  ```
50
50
 
51
+ いくつか同じような状況の方がいらっしゃったみたいで、参考にしたのですがうまくいきませんでした。
52
+
53
+
54
+
51
55
  よろしくおねがいします!!!!