max_iter=500, hidden_layer_sizes=(20, 10, 3), random_state=1) svc = SVC(kernel='linear') csp = CSP(n_components=8, reg=None, log=True, norm_trace=False) x, y = data.load_single(cut=True) y = [np.where(yi == 1)[1] for yi in y] xt, yt = data.load_single(cut=True, study=False) yt = [np.where(yi == 1)[1] for yi in yt] subs = len(x) splits = 10 for name, classifier in [('LDA', lda), ('SVM', svc), ('MLP', mlp)]: acc = 0 acc2 = 0 for sub in range(18): n = x[sub].shape[0] for tr, val in util.kfold(n, splits, shuffle=True): clf = Pipeline([('CSP', csp), ('LDA', lda)]) #clf.set_params(CSP__reg=0.5) clf.fit(x[sub][tr], y[sub][tr]) a = clf.score(x[sub][val], y[sub][val]) a2 = clf.score(xt[sub], yt[sub]) acc += a acc2 += a2 print("{} got {}/{}".format(name, acc / (splits * subs), acc2 / (splits * subs)))
m_save = model.get_config() model.summary() avgacc = 0 wlist = np.zeros((18, ), dtype=np.object) for i in range(n_subs): n = x[i].shape[0] acc = 0 model = Model.from_config(m_save) model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy']) tr, val = util.kfold(n, splits)[0] # fit with next kfold data h = model.fit(x[i][tr], y[i][tr], batch_size=64, epochs=50, verbose=0) _, acc = model.evaluate(x[i][val], y[i][val], verbose=0) print("subject {}, avg accuracy {}".format(i + 1 if i + 1 < 10 else i + 2, acc)) layers = model.layers print(len(layers)) print(layers[3]) w0 = model.layers[3].get_weights()[0] print(w0.shape) wlist[i] = w0
model.add(Flatten()) model.add(Dense(mset["dense_nodes"], activation='tanh')) model.add(Dense(3, activation='softmax')) model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy']) model.summary() print(mset) w_save = model.get_weights() avgacc = 0 for i in range(n_subs): n = x[i].shape[0] acc = 0 for tr, val in util.kfold(n, splits): # reset to initial weights model.set_weights(w_save) # fit with next kfold data model.fit(x[i][tr], y[i][tr], batch_size=64, epochs=90, verbose=0) loss, accuracy = model.evaluate(x[i][val], y[i][val], verbose=0) acc += accuracy acc /= splits avgacc += acc print("subject {}, avg accuracy {} over {} splits".format(i + 1 if i + 1 < 10 else i + 2, acc, splits))