示例#1
0
def test_TensorBoard():
    ds = test_dataset.CIFAR10()
    model = tiny_model.DictNet()

    def view_result(one_input, one_output):
        # print("In view result")
        img = one_input[0]
        img = (img - img.min()) / (img.max() - img.min() + 1.0e-4)
        truth = one_input[1]
        label = one_output['res']

        # print(img.size())

        fig = plt.figure()
        plt.imshow(img.permute(2, 1, 0))
        plt.close()
        return {'figures': {'img': fig}}

    trainer = setka.base.Trainer(pipes=[
        setka.pipes.DatasetHandler(ds, batch_size=4, limits=2),
        setka.pipes.ModelHandler(model),
        setka.pipes.LossHandler(dict_loss),
        setka.pipes.OneStepOptimizers([
            setka.base.Optimizer(model,
                                 torch.optim.SGD,
                                 lr=0.1,
                                 momentum=0.9,
                                 weight_decay=5e-4)
        ]),
        setka.pipes.ComputeMetrics([dict_loss, dict_acc]),
        setka.pipes.TensorBoard(f=view_result)
    ])

    trainer.run_train(2)
    trainer.run_epoch(mode='test', subset='valid', n_iterations=2)
示例#2
0
def test_Logger_tensor():
    loss = tensor_loss
    acc = tensor_acc

    ds = test_dataset.CIFAR10()
    model = tiny_model.TensorNet()

    def view_result(one_input, one_output):
        img = one_input[0]
        img = (img - img.min()) / (img.max() - img.min())
        truth = one_input[1]
        label = one_output[0]

        fig = plt.figure()
        plt.imshow(img.permute(2, 1, 0))
        plt.close()
        return {'figures': {'img.jpg': fig}}

    trainer = setka.base.Trainer(pipes=[
        setka.pipes.DatasetHandler(
            ds, batch_size=4, limits={
                'train': 3,
                'valid': 3,
                'test': 1
            }),
        setka.pipes.ModelHandler(model),
        setka.pipes.LossHandler(loss),
        setka.pipes.OneStepOptimizers([
            setka.base.Optimizer(model,
                                 torch.optim.SGD,
                                 lr=0.01,
                                 momentum=0.9,
                                 weight_decay=5e-4)
        ]),
        setka.pipes.ComputeMetrics([loss, acc]),
        setka.pipes.
        Logger(f=view_result, full_snapshot_path=True, name='my_experiment')
    ])

    trainer.run_train(2)
    trainer.run_epoch('test', 'test', n_iterations=2)

    assert (os.path.exists(os.path.join('runs', 'my_experiment')))
    assert (len(os.listdir(os.path.join('runs', 'my_experiment'))) > 0)
    last_run = sorted(os.listdir(os.path.join('runs', 'my_experiment')))[-1]
    assert (os.path.exists(
        os.path.join('runs', 'my_experiment', last_run, '2_figures',
                     'test_2047', 'img.jpg')))

    assert (os.path.exists(
        os.path.join('runs', 'my_experiment', last_run, 'bash_command.txt')))
    assert (os.path.exists(
        os.path.join('runs', 'my_experiment', last_run, 'epoch_log.json')))
    assert (os.path.exists(
        os.path.join('runs', 'my_experiment', last_run, 'batch_log.json')))
def test_WeightAveraging():
    ds = test_dataset.CIFAR10()
    model = tiny_model.TensorNet()

    trainer = setka.base.Trainer(pipes=[
        setka.pipes.DatasetHandler(ds, batch_size=32, limits=5),
        setka.pipes.ModelHandler(model),
        setka.pipes.LossHandler(loss),
        setka.pipes.OneStepOptimizers([
            setka.base.Optimizer(model,
                                 torch.optim.SGD,
                                 lr=0.1,
                                 momentum=0.9,
                                 weight_decay=5e-4)
        ]),
        setka.pipes.WeightAveraging(epoch_start=0, interval=1)
    ])

    trainer.run_train(3)
示例#4
0
def test_SaveResult_list():
    ds = test_dataset.CIFAR10()
    model = tiny_model.ListNet()

    trainer = setka.base.Trainer(pipes=[
        setka.pipes.DatasetHandler(ds, batch_size=32, limits=2),
        setka.pipes.ModelHandler(model),
        setka.pipes.LossHandler(list_loss),
        setka.pipes.OneStepOptimizers([
            setka.base.Optimizer(model,
                                 torch.optim.SGD,
                                 lr=0.1,
                                 momentum=0.9,
                                 weight_decay=5e-4)
        ]),
        setka.pipes.SaveResult()
    ])

    trainer.run_train(1)
示例#5
0
def test_Lambda():
    ds = test_dataset.CIFAR10()
    model = tiny_model.TensorNet()

    def print_message():
        print("Message")

    trainer = setka.base.Trainer(pipes=[
        setka.pipes.DatasetHandler(ds, batch_size=32, limits=2),
        setka.pipes.ModelHandler(model),
        setka.pipes.LossHandler(loss),
        setka.pipes.OneStepOptimizers([
            setka.base.Optimizer(model,
                                 torch.optim.SGD,
                                 lr=0.1,
                                 momentum=0.9,
                                 weight_decay=5e-4)
        ]),
        setka.pipes.Lambda(on_batch_begin=print_message)
    ])

    trainer.run_train(2)
示例#6
0
def test_ProgressBar():
    ds = test_dataset.CIFAR10()
    model = tiny_model.TensorNet()

    trainer = setka.base.Trainer(pipes=[
        setka.pipes.DatasetHandler(ds, batch_size=32, limits=2),
        setka.pipes.ModelHandler(model),
        setka.pipes.LossHandler(loss),
        setka.pipes.OneStepOptimizers([
            setka.base.Optimizer(model,
                                 torch.optim.SGD,
                                 lr=0.1,
                                 momentum=0.9,
                                 weight_decay=5e-4)
        ]),
        setka.pipes.ProgressBar()
    ])

    trainer.status['Test'] = [
        'This is just a very-very long string that helps in testing the package. This string has no delimiters so it will be split in the middle of the string'
    ]
    trainer.status['Test2'] = [1.0e-12, 1.0e12, 1, 100000000000000000, 1000]
    trainer.run_train(1)
示例#7
0
def test_SaveResult_tensor():
    ds = test_dataset.CIFAR10()
    model = tiny_model.TensorNet()

    def f(input, output):
        return input, output

    trainer = setka.base.Trainer(pipes=[
        setka.pipes.DatasetHandler(ds, batch_size=32, limits=2),
        setka.pipes.ModelHandler(model),
        setka.pipes.LossHandler(tensor_loss),
        setka.pipes.OneStepOptimizers([
            setka.base.Optimizer(model,
                                 torch.optim.SGD,
                                 lr=0.1,
                                 momentum=0.9,
                                 weight_decay=5e-4)
        ]),
        setka.pipes.SaveResult(f=f)
    ])

    trainer.run_train(1)
    trainer.run_epoch('test', 'test', n_iterations=2)
示例#8
0
import os
import sys

sys.path.append(os.path.join(os.path.dirname(os.path.realpath(__file__)),
                             '..'))
import tiny_model
import test_dataset
import tempfile

import matplotlib.pyplot as plt

from test_metrics import list_loss as loss
from test_metrics import list_acc as acc

ds = test_dataset.CIFAR10()
model = tiny_model.ListNet()


def view_result(one_input, one_output):
    # print("In view result")
    img = one_input[0]
    img = (img - img.min()) / (img.max() - img.min())
    truth = one_input[1]
    label = one_output

    # print(img.size())

    fig = plt.figure()
    plt.imshow(img.permute(2, 1, 0))
    plt.close()
示例#9
0
def test_MakeCheckpoints():

    ds = test_dataset.CIFAR10()
    model = tiny_model.TensorNet()

    trainer = setka.base.Trainer(pipes=[
        setka.pipes.DatasetHandler(ds, batch_size=32, limits=2),
        setka.pipes.ModelHandler(model),
        setka.pipes.LossHandler(loss),
        setka.pipes.OneStepOptimizers([
            setka.base.Optimizer(model,
                                 torch.optim.SGD,
                                 lr=0.01,
                                 momentum=0.9,
                                 weight_decay=5e-4)
        ]),
        setka.pipes.ComputeMetrics([loss, acc]),
        setka.pipes.Checkpointer('tensor_acc',
                                 max_mode=True,
                                 name='my_experiment',
                                 keep_best_only=False),
        setka.pipes.Checkpointer(
            'tensor_loss', max_mode=False, name='my_experiment_best_only')
    ])

    trainer.run_train(5)
    trainer.run_epoch('test', 'test', n_iterations=2)

    path = os.path.join('runs', 'my_experiment')
    last_exp = sorted(os.listdir(path))[-1]

    assert (len(
        os.listdir(
            os.path.join('runs', 'my_experiment', last_exp,
                         'checkpoints'))) == 8 * 2)
    assert (os.path.exists(
        os.path.join('runs', 'my_experiment', last_exp, 'checkpoints',
                     'my_experiment_best.pth.tar')))
    assert (os.path.exists(
        os.path.join('runs', 'my_experiment', last_exp, 'checkpoints',
                     'my_experiment_latest.pth.tar')))
    assert (os.path.exists(
        os.path.join('runs', 'my_experiment', last_exp, 'checkpoints',
                     'my_experiment_weights_best.pth.tar')))
    assert (os.path.exists(
        os.path.join('runs', 'my_experiment', last_exp, 'checkpoints',
                     'my_experiment_weights_latest.pth.tar')))

    for index in range(6):
        assert (os.path.exists(
            os.path.join('runs', 'my_experiment', last_exp, 'checkpoints',
                         'my_experiment_weights_' + str(index) + '.pth.tar')))
        assert (os.path.exists(
            os.path.join('runs', 'my_experiment', last_exp, 'checkpoints',
                         'my_experiment_' + str(index) + '.pth.tar')))

    # path = os.path.join('runs', 'my_experiment_best_only')
    # last_exp = sorted(os.listdir(path))[-1]
    assert (len(
        os.listdir(
            os.path.join('runs', 'my_experiment_best_only', last_exp,
                         'checkpoints'))) == 4)
    assert (os.path.exists(
        os.path.join('runs', 'my_experiment_best_only', last_exp,
                     'checkpoints', 'my_experiment_best_only_best.pth.tar')))
    assert (os.path.exists(
        os.path.join('runs', 'my_experiment_best_only', last_exp,
                     'checkpoints', 'my_experiment_best_only_latest.pth.tar')))
    assert (os.path.exists(
        os.path.join('runs', 'my_experiment_best_only', last_exp,
                     'checkpoints',
                     'my_experiment_best_only_weights_best.pth.tar')))
    assert (os.path.exists(
        os.path.join('runs', 'my_experiment_best_only', last_exp,
                     'checkpoints',
                     'my_experiment_best_only_weights_latest.pth.tar')))

    latest_weights = torch.load(
        os.path.join('runs', 'my_experiment_best_only', last_exp,
                     'checkpoints',
                     'my_experiment_best_only_weights_latest.pth.tar'))

    latest_weights = latest_weights

    latest_trainer = torch.load(
        os.path.join('runs', 'my_experiment_best_only', last_exp,
                     'checkpoints', 'my_experiment_best_only_latest.pth.tar'))
    latest_trainer = latest_trainer['trainer']

    assert (latest_trainer._model.state_dict().__str__() ==
            trainer._model.state_dict().__str__())
    assert (latest_weights.__str__() == trainer._model.state_dict().__str__())
示例#10
0
def test_Logger_list():
    loss = list_loss
    acc = list_acc

    ds = test_dataset.CIFAR10()
    model = tiny_model.ListNet()

    def view_result(one_input, one_output):
        img = one_input[0]
        img = (img - img.min()) / (img.max() - img.min())
        truth = one_input[1]
        label = one_output

        fig = plt.figure()
        plt.imshow(img.permute(2, 1, 0))
        plt.close()

        signal = numpy.sin(numpy.linspace(0, 1000, 40000))

        file = tempfile.SpooledTemporaryFile()
        file.write(b'something')

        return {
            'figures': {
                'img': fig
            },
            'texts': {
                'img': 'Sample'
            },
            'images': {
                'img': (img * 255.0).int().numpy().astype('uint8')
            },
            'audios': {
                'img': signal
            },
            'files': {
                'img.sht': file,
                'img': file
            }
        }

    trainer = setka.base.Trainer(pipes=[
        setka.pipes.DatasetHandler(
            ds, batch_size=4, limits={
                'train': 3,
                'valid': 3,
                'test': 1
            }),
        setka.pipes.ModelHandler(model),
        setka.pipes.LossHandler(loss),
        setka.pipes.OneStepOptimizers([
            setka.base.Optimizer(model,
                                 torch.optim.SGD,
                                 lr=0.01,
                                 momentum=0.9,
                                 weight_decay=5e-4)
        ]),
        setka.pipes.ComputeMetrics([loss, acc]),
        setka.pipes.Logger(f=view_result, name='my_experiment')
    ])

    trainer.run_train(n_epochs=2)
    trainer.run_epoch('test', 'test', n_iterations=2)

    assert (os.path.exists(os.path.join('runs', 'my_experiment')))
    assert (len(os.listdir(os.path.join('runs', 'my_experiment'))) > 0)
    last_run = sorted(os.listdir(os.path.join('runs', 'my_experiment')))[-1]
    assert (os.path.exists(
        os.path.join('runs', 'my_experiment', last_run, '2_figures',
                     'test_2047', 'img.png')))
    assert (os.path.exists(
        os.path.join('runs', 'my_experiment', last_run, '2_audios',
                     'test_2047', 'img.wav')))
    assert (os.path.exists(
        os.path.join('runs', 'my_experiment', last_run, '2_texts', 'test_2047',
                     'img.txt')))
    assert (os.path.exists(
        os.path.join('runs', 'my_experiment', last_run, '2_images',
                     'test_2047', 'img.png')))
    assert (os.path.exists(
        os.path.join('runs', 'my_experiment', last_run, '2_files', 'test_2047',
                     'img.sht')))
    assert (os.path.exists(
        os.path.join('runs', 'my_experiment', last_run, '2_files', 'test_2047',
                     'img.bin')))

    assert (os.path.exists(
        os.path.join('runs', 'my_experiment', last_run, 'bash_command.txt')))
    assert (os.path.exists(
        os.path.join('runs', 'my_experiment', last_run, 'batch_log.json')))
    assert (os.path.exists(
        os.path.join('runs', 'my_experiment', last_run, 'epoch_log.json')))