def k_fold(k, label, epochs, params, load_best_weigth, verbose, TensorB, name_of_best_weight, base_model): flag = params['agumentation'] data = ld.load_data( label, phase="aug_evaluation") if flag == True else ld.load_data( label, phase="evaluation") results = [] size = len(data['x']) // k tmp_idx = np.arange(data['x'].shape[0]) np.random.shuffle(tmp_idx) x = data['x'][tmp_idx] y = data['y'][tmp_idx] np.save("x.npy", x) np.save("y.npy", y) acc_vec = [] for i in range(k): x_test = x[i * size:(i + 1) * size] y_test = y[i * size:(i + 1) * size] x_train = np.append(x[0:i * size], x[(i + 1) * size:], axis=0) y_train = np.append(y[0:i * size], y[(i + 1) * size:], axis=0) tmp = random.sample(range(len(x_train)), 232) x_val = [] y_val = [] for j in tmp: x_val.append(x_train[j]) y_val.append(y_train[j]) x_val = np.array(x_val) y_val = np.array(y_val) x_train = np.delete(x_train, tmp, axis=0) y_train = np.delete(y_train, tmp, axis=0) ##########fixing data######### data = ld.fix_data(flag, x_train, y_train, x_val, y_val, x_test, y_test) model = DTL(params=params, base_model=base_model, label=label, data=data) model.train(epochs, load_best_weigth, verbose, TensorB, name_of_best_weight + str(i) + ".h5", "k_fold") results.append(model.evaluate()) print(results[-1]) model.clear() del model return results
def k_fold(k, epochs, params1, params2, load_best_weigth, verbose, TensorB, name_of_best_weight, base_model): data_tmp = [None, None, None] flag = None if params2['agumentation']: data_tmp[0] = ld.load_data('a', phase="aug_evaluation") data_tmp[1] = ld.load_data('v', phase="aug_evaluation") data_tmp[2] = ld.load_data('h', phase="aug_evaluation") flag = True else: data_tmp[0] = ld.load_data('a', phase="evaluation") data_tmp[1] = ld.load_data('v', phase="evaluation") data_tmp[2] = ld.load_data('h', phase="evaluation") flag = False data = {} data['x'] = data_tmp[0]['x'] data['y'] = [data_tmp[0]['y'], data_tmp[1]['y'], data_tmp[2]['y']] size = len(data['x']) // k tmp_idx = np.arange(data['x'].shape[0]) np.random.shuffle(tmp_idx) x = data['x'][tmp_idx] y = [ data['y'][0][tmp_idx], data['y'][1][tmp_idx], data['y'][2][tmp_idx] ] acc_vec = [] np.save("x.npy", x) np.save("y.npy", y) for i in range(k): x_test = x[i * size:(i + 1) * size] y_test = [ y[0][i * size:(i + 1) * size], y[1][i * size:(i + 1) * size], y[2][i * size:(i + 1) * size] ] x_train = np.append(x[0:i * size], x[(i + 1) * size:], axis=0) y_train = [ np.append(y[0][0:i * size], y[0][(i + 1) * size:], axis=0), np.append(y[1][0:i * size], y[1][(i + 1) * size:], axis=0), np.append(y[2][0:i * size], y[2][(i + 1) * size:], axis=0) ] y_test1 = np.array([[y[0][i][0], y[1][i][0], y[2][i][0]] for i in range(i * size, (i + 1) * size)]) y_train1 = [[y[0][i][0], y[1][i][0], y[2][i][0]] for i in range(i * size) ] + [[y[0][i][0], y[1][i][0], y[2][i][0]] for i in range((i + 1) * size, len(y[2]))] y_train1 = np.array(y_train1) tmp = random.sample(range(len(x_train)), 232) x_val = [] y_val = [[], [], []] y_val1 = [] for j in tmp: x_val.append(x_train[j]) y_val[0].append(y_train[0][j]) y_val[1].append(y_train[1][j]) y_val[2].append(y_train[2][j]) y_val1.append( [y_train[0][j][0], y_train[1][j][0], y_train[2][j][0]]) y_val1 = np.array(y_val1) x_val = np.array(x_val) x_train = np.delete(x_train, tmp, axis=0) y_train[0] = np.delete(y_train[0], tmp, axis=0) y_train[1] = np.delete(y_train[1], tmp, axis=0) y_train[2] = np.delete(y_train[2], tmp, axis=0) y_train1 = np.delete(y_train1, tmp, axis=0) for j in range(3): y_val[j] = np.array(y_val[j]) ##########fixing data######### data2 = ld.fix_data(flag, x_train, y_train, x_val, y_val, x_test, y_test) data1 = ld.fix_data(flag, x_train, y_train1, x_val, y_val1, x_test, y_test1) model = DMTL(params=params1, base_model=base_model, label="", loss='binary_crossentropy', second_model=None, phase=1, data=data1) model.train(1, False, verbose, TensorB, name_of_best_weight + str(i) + ".h5", "k_fold", save_m=True) epochs = [1, 1, 1] labels = ['a', 'v', 'h'] for l in range(3): second_model = load_model("model_" + name_of_best_weight + str(i) + ".h5", custom_objects={ "a": Meric.a, "v": Meric.v, "h": Meric.h, "loss_a": Meric.loss_a, "loss_v": Meric.loss_v, "loss_h": Meric.loss_h }) model = DMTL(params=params2, base_model=base_model, label=labels[l], loss='binary_crossentropy', second_model=second_model, phase=2, data=data2) model.train(epochs[l], load_best_weigth, verbose, TensorB, name_of_best_weight + str(i) + ".h5", "k_fold", save_m=False) ans = model.evaluate() acc_vec.append(ans) print(ans) model.clear() del model return acc_vec