Esempio n. 1
0
def train_and_validate():
    print('Seizure Detection Learning')
    print('---------------------------------------------------------------')

    do_train = True

    ds_seizure = SeizureDataset(FLAGS)

    if do_train:
        X_train, y_train = ds_seizure.load_train_data(FLAGS.train_set)
        print('Data sample size:', X_train[0].shape)
        print('------------------------------------')
        print('Batch size: ', FLAGS.batch_size)
        print('------------------------------------')

        # Note : Make sure dataset is divisible by batch_size
        try:
            assert(len(X_train) % FLAGS.batch_size == 0)

        except:
            print("Make sure dataset size is divisble by batch_size!")
            sys.exit(1)

        with tf.Graph().as_default():
            # create and train the network
            rnn_net = SeizureClassifier(FLAGS)
            rnn_net.setup_loss()
            rnn_net.do_train(ds_seizure, X_train, y_train, FLAGS)
            #print('Final evaluation on the training data')
            # print('---------------------------------------------------------------')
            #rnn_net.do_eval(X_train, y_train)

        # At this point we are done with the training data
        del X_train
        del y_train

    print('Testing')
    print('---------------------------------------------------------------')
    X_test, ids = ds_seizure.load_test_data(FLAGS.test_set)
    with tf.Graph().as_default():
        # create and train the network
        rnn_net = SeizureClassifier(FLAGS)
        rnn_net.setup_loss()
        predictions = rnn_net.predict(X_test, FLAGS)
        # Save the results
        frame = pd.DataFrame(
            {'File': ids,
             'Class': predictions
             })
        cols = frame.columns.tolist()
        cols = cols[-1:] + cols[:-1]
        frame = frame[cols]
        frame['Class'] = frame['Class'].astype(float)
        frame.to_csv(FLAGS.test_set + '_res.csv', index=False)
        print('Saved results in: ', FLAGS.test_set)
 def setUpClass(cls):
     FLAGS = namedtuple('FLAGS',
                        'input_subsample_rate train_set test_set batch_size')
     flags = FLAGS(160,
                   'train_1_dummy',
                   'test_1_dummy',
                   1)
     cls.ds = SeizureDataset(flags)
def main(_):
    username = os.getlogin()
    user_dir = '/home/' + username
    instances_count = 1
    total_patient = 3

    for patient in xrange(total_patient):
        patient_id = 1 + patient
        FLAGS.patient_id = patient_id
        FLAGS.train_set = 'image_train_{0}_1000/single_side_fft/'.format(
            patient_id)
        FLAGS.test_set = 'image_test_{0}_1000/single_side_fft/'.format(
            patient_id)
        predictions = 0
        for instances in xrange(instances_count):
            ds_seizure = SeizureDataset(FLAGS)
            X_train, y_train = ds_seizure.load_train_data(FLAGS.train_set)
            X_test, y_ids = ds_seizure.load_test_data(FLAGS.test_set)
            ds = NetworkDataset(X_train, y_train, X_test, y_ids)
            FLAGS.model_dir = user_dir + '/seizure_models/single_side_fft/patient_{0}/model_{1}.cpkd'.format(
                FLAGS.patient_id, instances)
            predictions += np.array(train_and_validate(ds, instances))

        store_total_avg_pred(ds, instances_count, predictions)
Esempio n. 4
0
def main(args):
    args = {
        "model": "vqvae",
        "batch_size": 16, # 7 * 9 = 63 (close to desired 64)
        "hidden": 128,
        "k": 512 * 2,
        "lr": 2e-4,
        "vq_coef": 1,  # ?
        "commit_coef": 1,  # ?
        "kl_coef": 1,  # ?
        "dataset": "imagenet",
        "epochs": 25,
        "cuda": torch.cuda.is_available(),
        "seed": 1,
        "gpus": "1",
        "log_interval": 50,
        "results_dir": "VAE_imagenet",
        "save_name": "first",
        "data_format": "json"
    }

    #
    # parser = argparse.ArgumentParser(description='Variational AutoEncoders')
    #
    # model_parser = parser.add_argument_group('Model Parameters')
    # model_parser.add_argument('--model', default='vae', choices=['vae', 'vqvae'],
    #                           help='autoencoder variant to use: vae | vqvae')
    # model_parser.add_argument('--batch-size', type=int, default=128, metavar='N',
    #                           help='input batch size for training (default: 128)')
    # model_parser.add_argument('--hidden', type=int, metavar='N',
    #                           help='number of hidden channels')
    # model_parser.add_argument('-k', '--dict-size', type=int, dest='k', metavar='K',
    #                           help='number of atoms in dictionary')
    # model_parser.add_argument('--lr', type=float, default=None,
    #                           help='learning rate')
    # model_parser.add_argument('--vq_coef', type=float, default=None,
    #                           help='vq coefficient in loss')
    # model_parser.add_argument('--commit_coef', type=float, default=None,
    #                           help='commitment coefficient in loss')
    # model_parser.add_argument('--kl_coef', type=float, default=None,
    #                           help='kl-divergence coefficient in loss')
    #
    # training_parser = parser.add_argument_group('Training Parameters')
    # training_parser.add_argument('--dataset', default='cifar10', choices=['mnist', 'cifar10', 'imagenet'],
    #                              help='dataset to use: mnist | cifar10')
    # training_parser.add_argument('--data-dir', default='/media/ssd/Datasets',
    #                              help='directory containing the dataset')
    # training_parser.add_argument('--epochs', type=int, default=20, metavar='N',
    #                              help='number of epochs to train (default: 10)')
    # training_parser.add_argument('--no-cuda', action='store_true', default=False,
    #                              help='enables CUDA training')
    # training_parser.add_argument('--seed', type=int, default=1, metavar='S',
    #                              help='random seed (default: 1)')
    # training_parser.add_argument('--gpus', default='0',
    #                              help='gpus used for training - e.g 0,1,3')
    #
    # logging_parser = parser.add_argument_group('Logging Parameters')
    # logging_parser.add_argument('--log-interval', type=int, default=10, metavar='N',
    #                             help='how many batches to wait before logging training status')
    # logging_parser.add_argument('--results-dir', metavar='RESULTS_DIR', default='./results',
    #                             help='results dir')
    # logging_parser.add_argument('--save-name', default='',
    #                             help='saved folder')
    # logging_parser.add_argument('--data-format', default='json',
    #                             help='in which format to save the data')
    # args = parser.parse_args(args)
    # args["cuda"] = not args["no_cuda"] and torch.cuda.is_available()

    lr = args["lr"]  # or default_hyperparams[args["dataset"]]['lr']
    k = args["k"]  # or default_hyperparams[args["dataset"]]['k']
    hidden = args["hidden"] or default_hyperparams[args["dataset"]]['hidden']
    num_channels = dataset_sizes[args["dataset"]][0]

    results, save_path = setup_logging_and_results(args)

    torch.manual_seed(args["seed"])
    if args["cuda"]:
        torch.cuda.manual_seed_all(args["seed"])
        args["gpus"] = [int(i) for i in args["gpus"].split(',')]
        # torch.cuda.set_device(args["gpus"][0])
        cudnn.benchmark = True
        torch.cuda.manual_seed(args["seed"])

    model = models[args["dataset"]][args["model"]](hidden, k=k, num_channels=num_channels)
    #model = MyDataParallel(model)
    print("Number of Parameters in Model:", sum(p.numel() for p in model.parameters() if p.requires_grad))
    if args["cuda"]:
        model.cuda()

    optimizer = optim.Adam(model.parameters(), lr=lr)
    scheduler = optim.lr_scheduler.StepLR(optimizer, 10 if args["dataset"] == 'imagenet' else 30, 0.5, )

    kwargs = {'num_workers': 1, 'pin_memory': True} if args["cuda"] else {}

    train_loader = torch.utils.data.DataLoader(
        dataset=SeizureDataset(transform=dataset_transforms[args["dataset"]]),
        shuffle=True,
        batch_size=args["batch_size"],
        # transform=dataset_transforms[args["dataset"]],
    )

    test_loader = torch.utils.data.DataLoader(
        dataset=SeizureDataset(file_dir=DEV_SEIZURE_FILE, split="dev", transform=dataset_transforms[args["dataset"]]),  # TODO: add test filename for dataset initialization
        # transform=dataset_transforms[args["dataset"]],
        # dataset=SeizureDataset(transform=dataset_transforms[args["dataset"]]),
        batch_size=args["batch_size"],
        shuffle=True
    )
    print("Save path", save_path)
    for epoch in range(1, args["epochs"] + 1):
        train_losses = train(epoch, model, train_loader, optimizer, args["cuda"], args["log_interval"], save_path, args)
        test_losses = test_net(epoch, model, test_loader, args["cuda"], save_path, args)
        results.add(epoch=epoch, **train_losses, **test_losses)
        for k in train_losses:
             key = k[:-6]
             results.plot(x='epoch', y=[key + '_train', key + '_test'])
        results.save()
        scheduler.step()
    torch.save(model.state_dict(), save_path + "/model" )
def train_and_validate():
    height = 300
    width = 300
    depth = 16
    output_dim = 1
    patch_size_1 = 5
    patch_size_2 = 5
    feature_size_1 = 32
    feature_size_2 = 64
    fc_size = 1024

    print('Seizure Detection Learning')
    print('---------------------------------------------------------------')

    do_train = True

    ds_seizure = SeizureDataset(FLAGS)

    if do_train:

        X_train, y_train = ds_seizure.load_train_data(FLAGS.train_set)
        train_set_size = int(round(FLAGS.train_ds_ratio * len(X_train)))
        X_train_set = X_train[:train_set_size]
        y_train_set = y_train[:train_set_size]

        X_val_set = X_train[train_set_size:]
        y_val_set = y_train[train_set_size:]
        print('Data sample size = ', X_train[0].shape)
        print('Trainig samples count = ', len(y_train_set))
        print('Validation samples count = ', len(y_val_set))
        print('------------------------------------')
        print('Batch size: ', FLAGS.batch_size)
        print('------------------------------------')

        # Note : Make sure dataset is divisible by batch_size
        # try:
        #     assert(len(X_train) % FLAGS.batch_size == 0)
        # except:
        #     print("Make sure dataset size is divisble by batch_size!")
        #     sys.exit(1)
        y_1s_train_cnt = np.sum(y_train_set)
        y_0s_train_cnt = train_set_size - y_1s_train_cnt
        FLAGS.pos_weight = (1. * y_0s_train_cnt) / y_1s_train_cnt
        print('Positive weight = ', FLAGS.pos_weight)
        with tf.Graph().as_default():
            # create and train the network
            cnn_net = SeizureClassifier(FLAGS, height, width, depth,
                                        output_dim, patch_size_1, patch_size_2,
                                        feature_size_1, feature_size_2,
                                        fc_size)
            cnn_net.setup_loss_and_trainOp(FLAGS)

            cnn_net.do_train(ds_seizure, X_train_set, y_train_set, X_val_set,
                             y_val_set, FLAGS)

    # Start a new graph
    with tf.Graph().as_default():
        cnn_net = SeizureClassifier(FLAGS, height, width, depth, output_dim,
                                    patch_size_1, patch_size_2, feature_size_1,
                                    feature_size_2, fc_size)
        cnn_net.setup_loss_and_trainOp(FLAGS)
        cnn_net.predict(ds_seizure, FLAGS)
Esempio n. 6
0
import torch
import numpy as np
import sys
import time
from torch.utils.data import DataLoader
sys.path.append("../tsy935/RubinLab_neurotranslate_eeg-master/eeg/data/")
from torch import nn, optim
from torch.nn import functional as F
from torch.autograd import Variable
from features_to_features_model import FeaturesToFeatures
from data_loader import SeizureDataset

num_epochs = 100000

batch_size = 7  # 7 b/c 7 * 9 = 63
train_dataset = SeizureDataset()
print("len train", len(train_dataset))
train_loader = DataLoader(dataset=train_dataset,
                          shuffle=True,
                          batch_size=batch_size)
use_cuda = torch.cuda.is_available()

model = FeaturesToFeatures(pretrained_encoder=False)
test_num = 6

if use_cuda:
    model.cuda()

optimizer = optim.Adam(model.parameters())