Пример #1
0
def test_b():
    # -- second by simply freezing them
    np.random.seed(0)
    torch.manual_seed(0)

    print('2', end='')
    mod = make_module_cls()()

    opt = torch.optim.SGD
    cb = skorch.callbacks.Freezer(
        ['sequential.{}.weight'.format(i) for i in linear_idcs[:-1]] +
        ['sequential.{}.bias'.format(i) for i in linear_idcs[:-1]])

    net = skorch.NeuralNetClassifier(mod,
                                     verbose=0,
                                     optimizer=opt,
                                     callbacks=[cb])
    net.fit(X, y)

    for i in linear_idcs[:-1]:
        assert not mod.sequential[i].weight.requires_grad
        assert not net.module_.sequential[i].weight.requires_grad

    rss = resource.getrusage(resource.RUSAGE_SELF).ru_maxrss
    return rss, net.history[-1, 'valid_loss'], np.mean(net.history[:, 'dur'])
Пример #2
0
def build_model(lr=1e-4, max_epochs=2):
    device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")

    model = skorch.NeuralNetClassifier(
        module=ClassifierModule,
        module__backbone=torchvision.models.resnet18(pretrained=True),
        module__output_dim=10,
        criterion=torch.nn.CrossEntropyLoss,
        optimizer=torch.optim.Adam,
        optimizer__param_groups=[
            ('conv1.*', {'lr': lr / 10}),
            ('bn1.*', {'lr': lr / 10}),
            ('layer1.*', {'lr': lr / 8}),
            ('layer2.*', {'lr': lr / 6}),
            ('layer3.*', {'lr': lr / 4}),
            ('layer4.*', {'lr': lr / 2}),
        ],
        optimizer__lr=lr,
        max_epochs=max_epochs,
        batch_size=256,
        iterator_train__shuffle=True,
        iterator_valid__shuffle=False,
        device=device,
        callbacks=[
            ReportParams()
        ],
    )
    return model
Пример #3
0
def test_a():
    # -- first by stripping parameters explicitly
    np.random.seed(0)
    torch.manual_seed(0)

    print('1', end='')
    mod = make_module_cls()()

    # freeze all params but last layer
    for i in linear_idcs[:-1]:
        skorch.utils.freeze_parameter(mod.sequential[i].weight)
        skorch.utils.freeze_parameter(mod.sequential[i].bias)

    opt = skorch.helper.filtered_optimizer(torch.optim.SGD,
                                           skorch.helper.filter_requires_grad)

    net = skorch.NeuralNetClassifier(mod,
                                     verbose=0,
                                     optimizer=opt,
                                     warm_start=True)

    for i in linear_idcs[:-1]:
        assert not mod.sequential[i].weight.requires_grad

    net.fit(X, y)

    for i in linear_idcs[:-1]:
        assert not mod.sequential[i].weight.requires_grad
        assert not net.module_.sequential[i].weight.requires_grad

    rss = resource.getrusage(resource.RUSAGE_SELF).ru_maxrss
    return rss, net.history[-1, 'valid_loss'], np.mean(net.history[:, 'dur'])
Пример #4
0
def train_simple_nn(X, y, num_in, num_feat):
    nnet = skorch.NeuralNetClassifier(
        MySimpleNet,
        module__num_in=num_in,
        module__num_feat=num_feat,
        max_epochs=10,
        lr=0.1,
    )
    nnet.fit(X, y)
    return nnet
Пример #5
0
 def get_sklearn_compatible_estimator(self):
     EPOCHS = 7
     criterion = nn.CrossEntropyLoss
     optimizer = optim.Adam
     net_with_params = functools.partial(LSTMModel,
                                         vector_size=self.vector_size)
     return skorch.NeuralNetClassifier(net_with_params,
                                       max_epochs=EPOCHS,
                                       criterion=criterion,
                                       optimizer=optimizer)
Пример #6
0
    def objective(trial: optuna.trial.Trial) -> float:

        net = skorch.NeuralNetClassifier(
            ClassifierModule,
            max_epochs=10,
            lr=0.02,
            callbacks=[SkorchPruningCallback(trial, "valid_acc")],
        )

        net.fit(X, y)
        return 1.0
def objective(trial: optuna.Trial) -> float:
    net = skorch.NeuralNetClassifier(
        ClassifierModule(trial),
        max_epochs=20,
        lr=0.1,
        device=device,
        callbacks=[SkorchPruningCallback(trial, "valid_acc")],
    )

    net.fit(X_train, y_train)

    return accuracy_score(y_test, net.predict(X_test))
Пример #8
0
def main():

    # Load data
    path_to_data = os.path.abspath('cifar10/cifar-10-batches-py/')
    cifar10 = cifar10_utils.get_cifar10(data_dir=path_to_data,
                                        one_hot=False,
                                        validation_size=0)
    train_set = cifar10['train']

    # Initialize model
    input_dim = train_set.images[0, :, :, :].size
    n_classes = train_set.labels.max() + 1

    net = skorch.NeuralNetClassifier(MLP,
                                     criterion=nn.CrossEntropyLoss,
                                     module__n_inputs=input_dim,
                                     module__n_classes=n_classes,
                                     optimizer=torch.optim.Adam)

    # params = {
    #   'lr' : [0.1, 0.01, 0.001],
    #   'module__n_hidden' : [
    #     [100, 100],
    #     [1000],
    #     [50,30,20]
    #   ],
    #   'batch_size' : [64, 128, 256, 512]
    # }
    params = {
        'lr': [0.002],
        'module__n_hidden': [[500, 500, 500, 500]],
        'optimizer': [torch.optim.Adam]
    }

    gs = GridSearchCV(net,
                      params,
                      cv=5,
                      scoring='accuracy',
                      n_jobs=4,
                      refit=False,
                      verbose=2)
    gs.fit(train_set.images.reshape(train_set.images.shape[0], -1),
           train_set.labels)

    print()
    print('--------')
    print()
    print('Best params:\t', gs.best_params_)
    print('Best score:\t', gs.best_score_)
    print()

    with open('gridsearch_full_training_set.dill', 'wb') as f:
        dill.dump(gs, f)
Пример #9
0
  def fit(self,X,y,**fit_params):
    X=X.astype(np.float32)
    y=y.astype(np.int64)
    ClassifierModule.Xsize = X.shape[-1]
    ClassifierModule.ysize = y.shape[-1]

    l=ClassifierModule.ysize

    nets = [None] * l
    for i in range(l):
      net = skorch.NeuralNetClassifier(
        ClassifierModule,
        max_epochs=self.max_epochs,
        lr=self.lr
        #train_split=skorch.dataset.CVSplit(5, stratified=False)
        #     device='cuda',  # uncomment this to train with CUDA
      )
      nets[i] = net.fit(X, y[:, i],**fit_params)

    self.nets=nets
def create_neural_classifier():
    """
    Common neural net classifier.
    """

    optimizer_parameters = {
        'weight_decay': 1e-4,
        'lr': 1e-3,
        'eps': 1e-16,
        'betas': (0.9, 0.999),
        'weight_decouple': True,
        'rectify': False
    }
    optimizer_parameters = {
        "optimizer__" + key: v
        for key, v in optimizer_parameters.items()
    }
    optimizer_parameters['optimizer'] = AdaBelief

    checkpoint_callback = skorch.callbacks.Checkpoint(
        dirname=DEEP_CACHE_DIR, monitor='train_loss_best')

    callbacks = [checkpoint_callback, LoadEndState(checkpoint_callback)]

    parameters = {
        'callbacks': callbacks,
        'device': 'cuda',
        'max_epochs': 300,
        'train_split': None,
        'batch_size': 80,
        'iterator_train': BalancedDataLoader,
        'iterator_train__num_workers': 0,
        'iterator_train__pin_memory': False,
        'module__embedding_net': lmelloEmbeddingNet(8),
        'module__n_classes': 5
    }
    parameters = {**parameters, **optimizer_parameters}
    convnet = skorch.NeuralNetClassifier(ClassificationNet, **parameters)
    return 'convnet', convnet, {}
Пример #11
0
    num_inputs = 4
    model = nn.Sequential(nn.Linear(num_inputs, hidden_units), nn.ReLU(),
                          nn.Dropout(), nn.Linear(hidden_units, num_classes),
                          nn.Softmax())

    return model


iris = datasets.load_iris()
X = iris.data
Y = iris.target
# print(iris.DESCR)

clf = skorch.NeuralNetClassifier(
    create_model(),
    optimizer=torch.optim.Adam,
    max_epochs=10,
)

print(X.shape, Y.shape)
clf.fit(X, Y)


def test_ws_sql_gen(pickle_data):
    WS_URL = "https://sklearn2sql.herokuapp.com/model"
    # WS_URL="http://localhost:1888/model"
    b64_data = base64.b64encode(pickle_data).decode('utf-8')
    data = {
        "Name": "model1",
        "PickleData": b64_data,
        "SQLDialect": "postgresql"
Пример #12
0
net = skorch.NeuralNetClassifier(
    module=wavetorch.WaveCell,

    # Training configuration
    max_epochs=cfg['training']['N_epochs'],
    batch_size=cfg['training']['batch_size'],
    lr=cfg['training']['lr'],
    # train_split=skorch.dataset.CVSplit(cfg['training']['N_folds'], stratified=True, random_state=cfg['seed']),
    optimizer=torch.optim.Adam,
    criterion=torch.nn.CrossEntropyLoss,
    callbacks=[
        ClipDesignRegion,
        skorch.callbacks.EpochScoring('accuracy',
                                      lower_is_better=False,
                                      on_train=True,
                                      name='train_acc'),
        skorch.callbacks.Checkpoint(monitor=None,
                                    fn_prefix='1234_',
                                    dirname='test',
                                    f_params="params_{last_epoch[epoch]}.pt",
                                    f_optimizer='optimizer.pt',
                                    f_history='history.json')
    ],
    callbacks__print_log__keys_ignored=None,
    train_split=None,

    # These al get passed as options to WaveCell
    module__Nx=cfg['geom']['Nx'],
    module__Ny=cfg['geom']['Ny'],
    module__h=cfg['geom']['h'],
    module__dt=cfg['geom']['dt'],
    module__init=cfg['geom']['init'],
    module__c0=cfg['geom']['c0'],
    module__c1=cfg['geom']['c1'],
    module__sigma=cfg['geom']['pml']['max'],
    module__N=cfg['geom']['pml']['N'],
    module__p=cfg['geom']['pml']['p'],
    module__design_region=design_region,
    module__output_probe=True,
    module__probes=probes,
    module__sources=source)
Пример #13
0
)
early_stopping = skorch.callbacks.EarlyStopping(
    monitor='valid_loss',
    patience=1,
    threshold=0,
    threshold_mode='rel',
    lower_is_better=True,
)
val_dataset = Dataset(X=xs['val'], y=ys['val'])
clf = skorch.NeuralNetClassifier(
    module=RNN,
    device=device,
    callbacks=[('early_stopping', early_stopping), ('checkpoint', checkpoint)],
    criterion=nn.CrossEntropyLoss,
    optimizer=torch.optim.Adam,
    train_split=predefined_split(val_dataset),
    iterator_train__shuffle=True,
    iterator_train__drop_last=True,
    iterator_valid__drop_last=False,
    iterator_train__batch_size=128,
    iterator_valid__batch_size=-1,  # use all examples
    verbose=1
)


# FIT MODEL
clf.fit(X=xs['train'], y=ys['train'])
clf.initialize()
clf.load_params('challenges/spooky_author_identification/checkpoint/params.pt'.format(c=CHALLENGE))


# # CALIBRATE PROBABILITIES
Пример #14
0
                                  name='train_acc')
callback_save_best = Checkpoint(monitor='valid_acc_best',
                                f_params=None,
                                f_optimizer=None,
                                f_criterion=None,
                                f_history=None,
                                f_pickle=best_model_file_path,
                                event_name='event_cp')
callback_early_stop = EarlyStopping(monitor='valid_loss',
                                    patience=30,
                                    threshold_mode='rel',
                                    lower_is_better=True)
net = skorch.NeuralNetClassifier(
    module=model,
    criterion=criterion,
    train_split=skorch.dataset.CVSplit(10, stratified=True),
    optimizer=optimizer,
    lr=lr,
    max_epochs=150,
    batch_size=32,
    dataset=dataset,
    device=device,
    callbacks=[callback_train_acc, callback_early_stop, callback_save_best]
    # optimizer__weight_decay = 3e-4,
)

if __name__ == '__main__':
    x_train = np.array(X for X, y in iter(dataset))
    y_train = np.array([y for X, y in iter(dataset)])
    net.fit(X=x_train, y=y_train)
Пример #15
0
def torch_attack_model_fn():
    model = skorch.NeuralNetClassifier(module=AttackNet,
                                       max_epochs=5,
                                       criterion=nn.BCELoss,
                                       train_split=None)
    return model
Пример #16
0
def torch_shadow_model_fn():
    model = skorch.NeuralNetClassifier(module=ShadowNet,
                                       max_epochs=5,
                                       criterion=CrossEntropyOneHot,
                                       train_split=None)
    return model