示例#1
0
def stage_optim_layers(fcnn, data):
    # 1st stage: search in coarse range
    lower = COARSE_RANGE["lower"]
    upper = COARSE_RANGE["upper"]

    layers = []
    accs = []

    for it in range(MAX_ITER):
        layer = randint(lower, upper, 2)
        print("Experiment {} for layer: {}".format(it + 1, layer))
        layers.append(layer)
        fcnn.set_hidden_dims(layer)
        solver = Solver(
            fcnn,
            data,
            update_rule='sgd_momentum',
            optim_config={
                "learning_rate": LEARNING_RATE,
                "momentum": MOMENTUM
            },
            lr_decay=LEARNING_DECAY,
            print_every=100,
            batch_size=BATCH_SIZE,
            checkpoint_name="checkpoints/test" if CHECKOUT else None,
            num_epochs=EPOCH_NUM)
        solver.train()
        accs.append(solver.best_val_acc)
        loss = solver.loss_history
        t_acc = solver.train_acc_history
        v_acc = solver.val_acc_history
        draw_loss_acc(
            loss, t_acc, v_acc,
            "layer_{}_{}/{}-{:4}-{:4}".format(lower, upper, it + 1, layer[0],
                                              layer[1]))

    path = "params/"
    filename = "layer_{}_{}.txt".format(lower, upper)
    if not os.path.exists(path):
        os.makedirs(path)
    with open(path + filename, 'w') as file:
        for line, layer in enumerate(layers):
            stat = "{}. layer: [{:4}, {:4}] - accuracy: {:.4f}".format(
                line + 1, layer[0], layer[1], accs[line])
            file.write(stat + "\n")

        best_layer_idx = np.argmax(np.asarray(accs), axis=0)
        best_layer = layers[best_layer_idx]
        best_layer_acc = accs[best_layer_idx]

        file.write(
            "Best accur layer - {}: [{:4}, {:4}] with accuracy {:.4f}\n".
            format(best_layer_idx + 1, best_layer[0], best_layer[1],
                   best_layer_acc))
示例#2
0
def stage_optim_drop(fcnn, data):
    # 1st stage: search in coarse range
    lower = COARSE_RANGE["lower"]
    upper = COARSE_RANGE["upper"]

    drops = []
    accs = []

    for it in range(MAX_ITER):
        drop = uniform(lower, upper)
        print("Experiment {} for drop: {}".format(it + 1, drop))
        drops.append(drop)
        fcnn.dropout_params['p'] = drop
        solver = Solver(
            fcnn,
            data,
            update_rule='sgd_momentum',
            optim_config={
                "learning_rate": LEARNING_RATE,
                "momentum": MOMENTUM
            },
            lr_decay=LEARNING_DECAY,
            print_every=100,
            batch_size=BATCH_SIZE,
            checkpoint_name="checkpoints/test" if CHECKOUT else None,
            num_epochs=EPOCH_NUM)
        solver.train()
        accs.append(solver.best_val_acc)
        loss = solver.loss_history
        t_acc = solver.train_acc_history
        v_acc = solver.val_acc_history
        draw_loss_acc(
            loss, t_acc, v_acc,
            "drop_{}_{}/{}-{:.5f}".format(lower, upper, it + 1, drop))
        fcnn.reset()

    path = "params/"
    filename = "drop_{}_{}.txt".format(lower, upper)
    if not os.path.exists(path):
        os.makedirs(path)
    with open(path + filename, 'w') as file:
        for line, drop in enumerate(drops):
            stat = "{}. drop: {:.5f} - accuracy: {:.4f}".format(
                line + 1, drop, accs[line])
            file.write(stat + "\n")

        best_drop_idx = np.argmax(np.asarray(accs), axis=0)
        best_drop = drops[best_drop_idx]
        best_drop_acc = accs[best_drop_idx]

        file.write(
            "Best accur drop - {}: {:.5f} with accuracy {:.4f}\n".format(
                best_drop_idx + 1, best_drop, best_drop_acc))
示例#3
0
def train_FER2013():
    ###########################################################################
    #                           BEGIN OF YOUR CODE                            #
    ###########################################################################
    #pickle_FER() #used to load and store the FER2013 dataset for faster performance
    optim = False  # use for fine tuning learning rate
    out = get_FER(num_training=10000)
    data = {
        'X_train': out['X_train'],  # training data
        'y_train': out['y_train'],  # training labels
        'X_val': out['X_val'],  # validation data
        'y_val': out['y_val']  # validation labels
    }
    model = FullyConnectedNet(input_dim=48 * 48 * 1,
                              hidden_dims=[40],
                              num_classes=7,
                              dropout=0,
                              reg=0,
                              seed=int(time.time()))

    if optim:
        count = 1
        reached = False
        threshold = 0.35  #set threshold here
        while not reached:
            np.random.seed(int(time.time()))
            print("iteration number{}".format(count))
            lr = np.random.uniform(0.001, 0.003)
            print("testing lr: {}".format(lr))
            solver = Solver(model,
                            data,
                            update_rule='sgd_momentum',
                            optim_config={
                                'learning_rate': lr,
                                'momentum': 0.5
                            },
                            lr_decay=0.8,
                            num_epochs=100,
                            batch_size=100,
                            print_every=100)
            solver.train()
            if max(solver.val_acc_history) >= threshold:
                reached = True
            count += 1

        print("Final lr: {}".format(lr))
    else:
        solver = Solver(model,
                        data,
                        update_rule='sgd_momentum',
                        optim_config={
                            'learning_rate': 0.0018742807840127864,
                            'momentum': 0.5
                        },
                        lr_decay=0.8,
                        num_epochs=100,
                        batch_size=100,
                        print_every=100)
        solver.train()
示例#4
0
def train_net(data,
              hidden_dims,
              input_dim,
              num_classes,
              dropout         = 0,
              reg             = 0,
              learning_rate   = 5e-4,
              momentum        = 0,
              num_epochs      = 20,
              batch_size      = 100,
              lr_decay        = 0.95,
              update_rule     = "sdg",
              verbose = True):

    """ 
    Uses a solver instance to train a neural net on the given dataset.
    args:
    - data: dictionary with X_train, y_train, X_test, and y_test
    - plot: if True, generates a plot and saves in the given folder
    - pickle: if True, pickles the model in the given folder
    """

    # initialize net
    model = FullyConnectedNet(hidden_dims,
                              input_dim,
                              num_classes,
                              dropout,
                              reg)

    # initialize solver
    solver = Solver(model,
                    data,
                    update_rule  = update_rule,
                    optim_config = {'learning_rate': learning_rate,
                                    'momentum': momentum},
                    lr_decay     = lr_decay,
                    num_epochs   = num_epochs,
                    batch_size   = batch_size,
                    print_every  = 100,
                    verbose = verbose)

    # train the network
    solver.train()
    
    # return the solver
    return solver
示例#5
0
def get_vals(lr,hidden_dims1,hidden_dims2,lr_decay,reg,drop):
    global json_log2,json_log
    lr = 10 ** lr
    model = FullyConnectedNet(hidden_dims=[int(hidden_dims1),int(hidden_dims2)], input_dim=48 * 48 * 1, reg=reg, num_classes=7, dtype=np.float64,dropout=drop)
    solver = Solver(model, data,
                    update_rule='sgd_momentum',
                    optim_config={'learning_rate': lr,}, lr_decay = lr_decay,
                    num_epochs=50, batch_size=70,
                    print_every=1000000)

    solver.train()
    solver._save_checkpoint()

    #SAVE THE VALUES TO A FILE
    val_acc = solver.best_val_acc
    acc = max(solver.train_acc_history)
    loss = min(solver.loss_history)
    json_log2.write(json.dumps({'Learning Rate': lr,
                               'accuracy': acc, 'val_acc': val_acc ,
                                'loss': loss,"lr_decay":lr_decay,
                                'dropout':drop,'reg':reg,
                                'layer_1': hidden_dims1,'layer_2': hidden_dims2}) + ',\n')
    
    json_log.write(json.dumps({'Learning Rate': lr,
                               'accuracy': solver.train_acc_history,
                                'val_acc': solver.val_acc_history,
                                'loss': solver.loss_history,"lr_decay":lr_decay,
                                'dropout':drop,'reg':reg,
                               'layer_1': hidden_dims1,'layer_2': hidden_dims2}) + ',\n')
    return solver.best_val_acc
示例#6
0
def train_overfit_net(save_net = False):


    # get CIFAR10 data
    data = get_CIFAR10_data()
        
    # subsample the data. 50 draws
    indices_to_select = np.random.randint(0, len(data["X_train"]), 50)

    # extract the samples
    data["X_train"] = data["X_train"][indices_to_select]
    data["y_train"] = data["y_train"][indices_to_select]
    
    # intialize net
    model = FullyConnectedNet([50],
                              input_dim      = 32*32*3,
                              num_classes    = 10,
                              dropout        = 0,
                              reg            = 0.0,
                              weight_scale   = 1e-2)
        
        
    # initialize solver
    solver = Solver(model,data,
                    update_rule  = 'sgd',
                    optim_config = {'learning_rate': 5e-4},
                    lr_decay     = 0.85,
                    num_epochs   = 20,
                    batch_size   = 5,
                    print_every  = 100)
    
    # train the net 
    solver.train()
    
    if save_net:
        
        # test the net and save its training, validation and testing accuracies.

        # get training accuracy
        train_acc = str.format("{0:.2f}", solver.check_accuracy(data["X_train"], data["y_train"]) * 100) + "\%"
        
        # get validation accuracy
        val_acc = str.format("{0:.2f}", solver.best_val_acc * 100) + "\%"
        
        # get testing accuracy
        test_acc = str.format("{0:.2f}", solver.check_accuracy(data["X_test"], data["y_test"]) * 100) + "\%"

        text = "Accuracies: " + train_acc + " training, " + val_acc + " validation  \& " + test_acc + " testing."

        # write to file
        append_to_file("nets/overfit_net/info.tex", text, mode =  "w")
        
        # save net info
        save_net_info("nets/overfit_net", solver)
def train_cifar10_net(save_net=False):
    """
    Uses a Solver instance to train a TwoLayerNet that achieves at least 50% 
    accuracy on the validation set.
    """

    # get CIFAR10 data
    data = get_CIFAR10_data()

    # intialize net
    model = FullyConnectedNet([100],
                              input_dim=32 * 32 * 3,
                              num_classes=10,
                              dropout=0,
                              reg=0.0)

    # initialize solver
    solver = Solver(model,
                    data,
                    update_rule='sgd',
                    optim_config={'learning_rate': 1e-3},
                    lr_decay=0.95,
                    num_epochs=20,
                    batch_size=100,
                    print_every=100)

    # train the net
    solver.train()

    if save_net:

        # test the net and save its training, validation and testing accuracies.
        # get training accuracy
        train_acc = str.format(
            "{0:.2f}",
            solver.check_accuracy(data["X_train"], data["y_train"]) *
            100) + "\%"

        # get validation accuracy
        val_acc = str.format("{0:.2f}", solver.best_val_acc * 100) + "\%"

        # get testing accuracy
        test_acc = str.format(
            "{0:.2f}",
            solver.check_accuracy(data["X_test"], data["y_test"]) * 100) + "\%"

        text = "Accuracies: " + train_acc + " training, " + val_acc + " validation  \& " + test_acc + " testing."

        # write to file
        append_to_file("nets/train_net/info.tex", text, mode="w")

        # save net info
        save_net_info("nets/train_net", solver)
示例#8
0
def loadModelNN(modelpath):

    parameters = loadDatafrPKL(modelpath)

    model = parameters['model']

    data = {
        'X_train': np.ones(10),
        'y_train': np.ones(10),
        'X_val': np.ones(10),
        'y_val': np.ones(10)
    }

    solver = Solver(model,
                    data,
                    update_rule=parameters['rule'],
                    lr_decay=parameters['lr_decay'],
                    optim_config=parameters['optim_config'],
                    batch_size=parameters['batch_size'])

    return solver
示例#9
0
data['X_val'] = (data['X_val'] - mean) / std
data['X_test'] = (data['X_test'] - mean) / std


targets = data['y_test']
# #data = get_FER2013_data(49,1 ,0)
#
INPUT_DIMS = np.prod(data["X_train"].shape[1:])
HIDDEN_DIMS = np.asarray(INPUT_NODE)
NUM_CLASS = 7
#net = FullyConnectedNet(HIDDEN_DIMS,INPUT_DIMS,num_classes=NUM_CLASS,dropout=0.6,seed =300)
net = FullyConnectedNet(HIDDEN_DIMS,INPUT_DIMS,num_classes=NUM_CLASS)

solver = Solver(net, data,update_rule='sgd_momentum',\
                optim_config={'learning_rate': 0.01, 'momentum': 0.2},\
                num_epochs=100,\
                batch_size = 64,\
                lr_decay=0.99,\
                print_every =1000)
solver.train()
#plotGraphs(net, solver)

################## OUTPUT TO PKL FILE ###########################

output = open('net.pkl', 'wb')
pkl.dump(solver.model, output, -1)
output.close()

################## READ PKL FILE ##################################

pk = open('net.pkl', 'rb')
test = pkl.load(pk)
示例#10
0
def stage_optim_lr(fcnn, data):
    # 1st stage: search in coarse range
    lower = COARSE_RANGE["lower"]
    upper = COARSE_RANGE["upper"]

    lrs = []
    match_values = []
    accs = []

    for it in range(MAX_ITER):
        lr = 10**uniform(lower, upper)
        lrs.append(lr)
        solver = Solver(
            fcnn,
            data,
            update_rule='sgd_momentum',
            optim_config={
                "learning_rate": lr,
                "momentum": MOMENTUM
            },
            lr_decay=LEARNING_DECAY,
            print_every=100,
            batch_size=BATCH_SIZE,
            checkpoint_name="checkpoints/test" if CHECKOUT else None,
            num_epochs=EPOCH_NUM,
            tune_lr=True)
        solver.train()
        match_values.append(lr_update_match(solver.updates))
        accs.append(solver.best_val_acc)
        loss = [x for x in solver.loss_history if not x > 2.0]
        t_acc = solver.train_acc_history
        v_acc = solver.val_acc_history
        draw_loss_acc(loss, t_acc, v_acc,
                      "lr_{}_{}/{}-{:.5f}".format(lower, upper, it + 1, lr))
        fcnn.reset()

    match_values = np.asarray(match_values)

    path = "params/"
    filename = "lr_{}_{}.txt".format(lower, upper)
    if not os.path.exists(path):
        os.makedirs(path)
    with open(path + filename, 'w') as file:
        for line, lr in enumerate(lrs):
            stat = "{}. lr: {:.5f} - match ratio: {:.4f} - accuracy: {:.4f}".format(
                line + 1, lr, match_values[line], accs[line])
            file.write(stat + "\n")

        best_lr_idx = np.argmax(match_values, axis=0)
        best_lr = lrs[best_lr_idx]
        best_lr_acc = accs[best_lr_idx]

        file.write("Best match lr - {}: {:.5f} with accuracy {:.4f}\n".format(
            best_lr_idx, best_lr, best_lr_acc))

        best_lr_idx = np.argmax(np.asarray(accs), axis=0)
        best_lr = lrs[best_lr_idx]
        best_lr_acc = accs[best_lr_idx]

        file.write("Best accur lr - {}: {:.5f} with accuracy {:.4f}\n".format(
            best_lr_idx, best_lr, best_lr_acc))
示例#11
0
		print('*****************************************')


		data = get_FER2013_data(num_training=default_para['num_training'], 
			num_validation=default_para['num_validation'], 
			num_test=default_para['num_test'], subtract_mean=True)
		model = FullyConnectedNet(default_para['hidden_layer'], 
									input_dim=48*48, num_classes=7, 
									reg = default_para['regularization'],
									dropout = default_para['dropout'])
		solver = Solver(model, data,
						update_rule=default_para['update_rule'],
						optim_config={
						  'learning_rate': default_para['learning_rate'],
						  'momentum': default_para['momentum']
						},
						lr_decay=default_para['lr_decay'],
						num_epochs=default_para['num_epochs'], 
						batch_size=default_para['batch_size'] ,
						print_every=200,
						verbose = True)
		solver.train()

		best_val_acc = solver.best_val_acc

		#For 'learning_rate' and 'regularization', the x-axis is in log-space
		if (para_type == 'learning_rate' or para_type =='regularization') and value != 0:
			plot_para_value.append(np.log10(value))
		else:
			plot_para_value.append(value)
# dataset
data = get_FER2013_data(
    '/vol/bitbucket/jsh114/emotion-recognition-networks/datasets/FER2013')

# training
best = (0, 0)
initial_starting = 1e-2
minimal_learning = 1e-4
learning_rate = initial_starting
print("entering the loop")
while (learning_rate >= minimal_learning):
    print("Starting with " + str(learning_rate))
    solver = Solver(model,
                    data,
                    update_rule='sgd_momentum',
                    optim_config={
                        'learning_rate': learning_rate,
                        'momentum': 0.0
                    },
                    lr_decay=0.95,
                    batch_size=120,
                    num_epochs=30)
    solver.train()

    learning_rate = learning_rate / 2
    print("accuracy is " + str(solver.val_acc_history))
    best = max(best, (solver.val_acc_history[-1], learning_rate))

print(best)
示例#13
0
TRAIN_NUM = 490
VALID_NUM = 10
TEST_NUM = 100

data = get_CIFAR10_data(TRAIN_NUM, VALID_NUM, TEST_NUM)

CLASS_NUM = 10
INPUT_DIMS = np.prod(data["X_train"].shape[1:])
HIDDEN_DIMS = np.asarray([100, 100])

fcnn = FullyConnectedNet(HIDDEN_DIMS, INPUT_DIMS, CLASS_NUM)
solver = Solver(fcnn,
                data,
                update_rule='sgd',
                optim_config={"learning_rate": 1e-3},
                print_every=100,
                num_epochs=20,
                lr_decay=0.95,
                num_train_samples=TRAIN_NUM,
                num_val_samples=VALID_NUM)

solver.train()

y = fcnn.predict(data["X_test"])

evaluate(y, data["y_test"], CLASS_NUM)

# draw_loss_acc(solver.loss_history, solver.train_acc_history, solver.val_acc_history, "train")

##############################################################################
#                             END OF YOUR CODE                               #
示例#14
0
out = get_CIFAR10_data(num_training=25000)
data = {
    'X_train': out['X_train'],  # training data
    'y_train': out['y_train'],  # training labels
    'X_val': out['X_val'],  # validation data
    'y_val': out['y_val']  # validation labels
}
model = FullyConnectedNet(hidden_dims=[100],
                          num_classes=10,
                          dropout=0,
                          reg=0.5)
solver = Solver(model,
                data,
                update_rule='sgd',
                optim_config={
                    'learning_rate': 2e-3,
                },
                lr_decay=0.95,
                num_epochs=25,
                batch_size=250,
                print_every=100)
solver.train()

#-----------------------Plotting--------------------------
plt.subplot(2, 1, 1)
plt.title("Training loss")
plt.plot(solver.loss_history, "o")
plt.xlabel('Iteration')

plt.subplot(2, 1, 2)
plt.title('Accuracy')
plt.plot(solver.train_acc_history, '-o', label='train')
示例#15
0
TODO: Overfit the network with 50 samples of CIFAR-10
"""
###########################################################################
#                           BEGIN OF YOUR CODE                            #
###########################################################################

t_data = get_CIFAR10_data()

# print(t_data["X_train"])
model = FullyConnectedNet(hidden_dims=[500, 500, 500, 500],
                          reg=0,
                          weight_scale=2e-2)
solver = Solver(model,
                data=t_data,
                update_rule='sgd',
                optim_config={'learning_rate': 4e-2},
                lr_decay=0.88,
                num_epochs=20,
                batch_size=50,
                print_every=100)
solver.train()

# plot
plt.subplot(2, 1, 1)
plt.title("Training loss")
plt.plot(solver.loss_history, "o")
plt.xlabel('Iteration')
plt.subplot(2, 1, 2)
plt.title('Accuracy')
plt.plot(solver.train_acc_history, '-o', label='train')
plt.plot(solver.val_acc_history, '-o', label='val')
plt.plot([0.5] * len(solver.val_acc_history), 'k--')
CHECKOUT = False

fcnn = FullyConnectedNet(HIDDEN_DIMS,
                         INPUT_DIMS,
                         CLASS_NUM,
                         DROPOUT,
                         REGULAR,
                         weight_scale=5e-3)

solver = Solver(fcnn,
                data,
                update_rule='sgd_momentum',
                optim_config={
                    "learning_rate": LEARNING_RATE,
                    "momentum": MOMENTUM
                },
                lr_decay=LEARNING_DECAY,
                print_every=100,
                batch_size=BATCH_SIZE,
                checkpoint_name="checkpoints/test" if CHECKOUT else None,
                num_epochs=EPOCH_NUM)
solver.train()

y = fcnn.predict(data["X_test"])
name = "fer_{:4}_{:4}_{:.4f}_{:.4f}_{:2}".format(HIDDEN_DIMS[0],
                                                 HIDDEN_DIMS[1], DROPOUT,
                                                 REGULAR, EPOCH_NUM)
evaluate(y, data["y_test"], CLASS_NUM, name)
fcnn.save(name)

draw_loss_acc(solver.loss_history, solver.train_acc_history,
#                           BEGIN OF YOUR CODE                            #
###########################################################################

datapath = datadir = ('/home/mat10/Documents/MSc Machine Learning/395-Machine Learning/'
           'CW2/assignment2_advanced/datasets/cifar-10-batches-py')
data = get_CIFAR10_data(datapath, num_training=50, num_validation=100, num_test=100,
                     subtract_mean=True)

hidden_dims = [1024, 512]
net = FullyConnectedNet(hidden_dims, num_classes=10, dropout=0., reg=0.0, seed=0)

solver = Solver(net,
                data,
                update_rule='sgd',
                optim_config={'learning_rate': 1e-3,
                              'momentum': 0.5},
                lr_decay=0.95,
                num_epochs=20,
                batch_size=10,
                print_every=100)
solver.train()

make_plots = False
if make_plots:
    import matplotlib.pyplot as plt
    # declare model and solver and train the model
    # model = [...]
    # solver = [...]
    # solver.train()
    # Run this cell to visualize training loss and train / val accuracy
    plt.subplot(2, 1, 1)
示例#18
0
###########################################################################
#                           BEGIN OF YOUR CODE                            #
###########################################################################
TRAIN_NUM = 50
VALID_NUM = 1
TEST_NUM = 10

CLASS_NUM = 10

data = get_CIFAR10_data(TRAIN_NUM, VALID_NUM, TEST_NUM)

print (data["y_test"].shape)
print (data["y_test"])

INPUT_DIMS = np.prod(data["X_train"].shape[1:])
HIDDEN_DIMS = np.asarray([400, 400])

fcnn = FullyConnectedNet(HIDDEN_DIMS, INPUT_DIMS, CLASS_NUM)
solver = Solver(fcnn, data, update_rule='sgd', optim_config={"learning_rate":1e-3}, print_every=1, num_epochs=20)
solver.train()

y = fcnn.predict(data["X_test"])
print (y)
fcnn.save()

draw_loss_acc(solver.loss_history, solver.train_acc_history, solver.val_acc_history, "overfit")

##############################################################################
#                             END OF YOUR CODE                               #
##############################################################################
示例#19
0
import numpy as np

from src.fcnet import FullyConnectedNet
from src.utils.solver import Solver
from src.utils.data_utils import get_CIFAR10_data

"""
TODO: Overfit the network with 50 samples of CIFAR-10
"""
###########################################################################
#                           BEGIN OF YOUR CODE                            #
###########################################################################
data = get_CIFAR10_data(49, 1, 0)

INPUT_DIMS = np.prod(data["X_train"].shape[1:])
HIDDEN_DIMS = np.asarray([400,400])
NUM_CLASS = 10
net = FullyConnectedNet(HIDDEN_DIMS,INPUT_DIMS,NUM_CLASS)
solver = Solver(net, data,update_rule='sgd',optim_config={\
                'learning_rate': 1e-3},\
            num_epochs=20,\
            batch_size = 10,\
            print_every=1)
solver.train()


##############################################################################
#                             END OF YOUR CODE                               #
##############################################################################
示例#20
0


data = get_FER2013_data(num_training=default_para['num_training'], 
	num_validation=default_para['num_validation'], 
	num_test=default_para['num_test'], subtract_mean=True)
model = FullyConnectedNet(default_para['hidden_layer'], 
							input_dim=48*48, num_classes=7, 
							reg = default_para['regularization'],
							dropout = default_para['dropout'])
solver = Solver(model, data,
				update_rule=default_para['update_rule'],
				optim_config={
				  'learning_rate': default_para['learning_rate'],
				  'momentum': default_para['momentum']
				},
				lr_decay=default_para['lr_decay'],
				num_epochs=default_para['num_epochs'], 
				batch_size=default_para['batch_size'] ,
				print_every=200,
				verbose = True)
solver.train()

best_val_acc = solver.best_val_acc


#Calculate the Confusion Matrix, F1 and print out them
valid_confu_mat, valid_F1 = solver.get_conf_mat_F1(type='validation')
test_confu_mat, test_F1 = solver.get_conf_mat_F1(type='test')
print('\n')
print('**************The best validation data Accuracy is: ', best_val_acc, '***********************')
示例#21
0
import numpy as np

from src.fcnet import FullyConnectedNet
from src.utils.solver import Solver
from src.utils.data_utils import get_CIFAR10_data
"""
TODO: Overfit the network with 50 samples of CIFAR-10
"""
###########################################################################
#                           BEGIN OF YOUR CODE                            #
###########################################################################
# define model and data
model = FullyConnectedNet(hidden_dims=[20, 30])
data = get_CIFAR10_data(num_training=50)

# define solver which helps us to train our model using the data
solver = Solver(model, data, num_epochs=20, num_train_samples=50)

# train our model using the solver
solver.train()
##############################################################################
#                             END OF YOUR CODE                               #
##############################################################################
示例#22
0
import numpy as np

from src.fcnet import FullyConnectedNet
from src.utils.solver import Solver
from src.utils.data_utils import get_CIFAR10_data
"""
TODO: Use a Solver instance to train a TwoLayerNet that achieves at least 50% 
accuracy on the validation set.
"""
###########################################################################
#                           BEGIN OF YOUR CODE                            #
###########################################################################
#define model and data
model = FullyConnectedNet(hidden_dims=[20, 30])
data = get_CIFAR10_data()

# define solver which helps us to train our model using the data
solver = Solver(model, data, lr_decay=0.95, num_epochs=30, batch_size=120)

# train the model
solver.train()
##############################################################################
#                             END OF YOUR CODE                               #
##############################################################################
示例#23
0
accuracy on the validation set.
"""
###########################################################################
#                           BEGIN OF YOUR CODE                            #
###########################################################################
data = get_CIFAR10_data()
model = FullyConnectedNet(hidden_dims=[128],
                          reg=1e-4,
                          num_classes=10,
                          dtype=np.float64)

solver = Solver(model,
                data,
                update_rule='sgd',
                optim_config={
                    'learning_rate': 1e-3,
                },
                lr_decay=0.85,
                num_epochs=30,
                batch_size=65,
                print_every=1000)
solver.train()

acc = solver.check_accuracy(data['X_train'], data['y_train'])
print("Training accuracy {} on {} examples".format(acc, len(data['X_train'])))
acc = solver.check_accuracy(data['X_val'], data['y_val'])
print("validation accuracy {} on {} examples".format(acc, len(data['X_val'])))
acc = solver.check_accuracy(data['X_test'], data['y_test'])
print("Test accuracy {} on {} examples".format(acc, len(data['X_test'])))

import matplotlib.pyplot as plt
plt.subplot(2, 1, 1)
示例#24
0
model = FullyConnectedNet([512, 512, 512],
                          input_dim=48 * 48 * 1,
                          num_classes=7,
                          dropout=0,
                          dtype=np.float32,
                          reg=0.1)
#f = open('model.pickle', 'rb')
#model = pickle.load(f)
#f.close()

data = get_FER2013_data(num_test=3589)
solver = Solver(model,
                data,
                update_rule='sgd_momentum',
                optim_config={
                    'learning_rate': 5e-3,
                },
                lr_decay=0.95,
                num_epochs=35,
                batch_size=100,
                print_every=200)
solver.train()

save = input("Save model?  ")
if (save is 'y'):
    f = open('model.pickle', 'wb')
    pickle.dump(model, f)
    f.close()
    print("Model saved!")

plt.subplot(2, 1, 1)
plt.title("Training loss")
# OR use pickle data from bitbucket (faster). The path is specified within the function.
#data = get_FeR2013_data()

model = FullyConnectedNet(hidden_dims=[544, 801],
                          input_dim=48 * 48 * 1,
                          num_classes=7,
                          dtype=np.float64)  #,dropout=0.0reg=0,
model.mean_image = data['mean_image']
lr = 0.013614446824659357
solver = Solver(model,
                data,
                update_rule='sgd_momentum',
                optim_config={
                    'learning_rate': lr,
                },
                lr_decay=0.8,
                num_epochs=100,
                batch_size=70,
                print_every=100,
                checkpoint_name="intermediate")

solver.train()
acc1 = solver.check_accuracy(data['X_val'], data['y_val'])
acc2 = solver.check_accuracy(data['X_train'], data['y_train'])

#val_acc = solver.best_val_acc
#acc = max(solver.train_acc_history)
#json_log = open("output_test.json", mode='wt', buffering=1)
#json_log.write(json.dumps({'Learning Rate': lr,'accuracy': acc, 'val_acc': val_acc,}) + '\n')