Exemple #1
0
    def call(self, *args, **kwargs):
        gent = self._read_data

        if self.modelstr == 'EEGNet':
            _co = {}
        elif self.modelstr == 'rawEEGConv' or self.modelstr == 'TSGLEEGNet':
            _co = {'TSG': TSG}
        else:
            _co = {}

        acc_list = []
        kappa_list = []
        data = {'x_test': None, 'y_test': None}
        for subject in self.subs:
            pred_list = []
            for path in walk_files(
                    os.path.join(self.basepath, '{:0>2d}'.format(subject))):
                if not self._readed:
                    for data['x_test'], data['y_test'] in gent(subject=subject,
                                                               mode='test'):
                        self._readed = True
                        if self.standardizing:
                            data = self._standardize(data)
                model = tf.keras.models.load_model(path, custom_objects=_co)

                if self.cropping:
                    _Pred = []
                    for cpd in self._cropping_data((data['x_test'], )):
                        pd = model.predict(cpd, verbose=0)
                        _Pred.append(
                            np.argmax(pd, axis=1) == np.squeeze(
                                data['y_test']))
                    _Pred = np.array(_Pred)
                    Pred = []
                    for i in np.arange(_Pred.shape[1]):
                        if _Pred[:, i].any():
                            Pred.append(1)
                        else:
                            Pred.append(0)
                    acc = np.mean(np.array(Pred))
                    kappa = 0.  # None
                else:
                    _pred = model.predict(data['x_test'],
                                          batch_size=self.batch_size,
                                          verbose=self.verbose)
                    pred_list.append(np.squeeze(np.argmax(_pred, axis=1)))
            pred = self.ensemble(pred_list, self.weight_list[subject - 1])
            acc_list.append(np.mean(pred == np.squeeze(data['y_test'])))
            kappa_list.append(computeKappa(pred, data['y_test']))
            self._readed = False
        avg_acc = np.mean(acc_list)
        avg_kappa = np.mean(kappa_list)

        with open(self.resavepath, 'w+') as f:
            sys.stdout = f
            print(('{0:s} {1:d}-fold Ensemble({2:s}) ' + self.validation_name +
                   ' Accuracy (kappa)').format(self.modelstr, self.kFold,
                                               self.ename))
            for i in range(len(self.subs)):
                print('Subject {0:0>2d}: {1:.2%} ({2:.4f})'.format(
                    self.subs[i], acc_list[i], kappa_list[i]))
            print('Average   : {0:.2%} ({1:.4f})'.format(avg_acc, avg_kappa))
            sys.stdout = _console
            f.seek(0, 0)
            for line in f.readlines():
                print(line)
            f.close()
        acc_list.append(avg_acc)
        kappa_list.append(avg_kappa)
        return acc_list, kappa_list
Exemple #2
0
    filepath = os.path.join('data', 'A', 'Test', 'A03E' + '.mat')
    vis = visualize(
        model,
        vis_data_file=filepath,
        cropping=cropping,
        # step=25,
        beg=beg,
        end=end,
        srate=srate)

    data = vis._read_data(srate)

    loss, acc = model.evaluate(data['x'], data['y'], batch_size=10, verbose=2)
    _pred = model.predict(data['x'], batch_size=10, verbose=2)
    pred = np.argmax(_pred, axis=1)
    kappa = computeKappa(pred, data['y'])
    print('loss: %.4f\tacc: %.4f\tkappa: %.4f' % (loss, acc, kappa))

    vis.kernel('tfconv')
    vis.line_kernel('tfconv', [1, 6, 7, 10, 11, 15])
    # vis.fft_kernel('tfconv')
    # vis.fft_output('tfconv')
    # vis.fs_fft_output('tfconv')
    # vis.class_fft_output('tfconv')
    # vis.depthwise_kernel('sconv')
    # vis.topo_kernel('sconv')
    # vis.fs_class_topo_kernel('sconv')
    # vis.fs_class_fft_output('tfconv')
    # vis.fs_class_freq_topo_kernel('sconv')
    # vis.kernel('fs')
    # vis.line_kernel('fs')