Esempio n. 1
0
def run_experiment_C(n):
    '''
    Esta função executa um experimento único referente à questão (6).
    Descrição geral: gera uma amostra de tamanho N, com ruído, de uma função alvo
    definida pela função f_circum, aplica a transformação não linear (), executa a regressão linear sobre ela
    e avalia o erro dentro da amostra, assim como uma estimativa do erro fora da
    amostra.
    '''
    # Utilizando a função alvo definida para as questões (4) até (6): f_circum(x1, x2) = sign(x1^2 + x2^2 − 0.6)
    f = f_circum

    # Gerando uma amostra a partir da função alvo, aplicadas a tranformação não linear e a adição de ruído.
    dataset_transformed = generate_dataset(
        f,
        n,
        transform_function=transform_dataset_features_to_x_y_xy_xx_yy,
        noise_function=add_noise_10per)

    # Executando regressão.
    w_ = lr(dataset_transformed)['w']

    # Avaliando resultados de w.
    E_in = evaluate_E_in(w_, dataset_transformed)
    estimated_E_out = estimate_E_out(
        f,
        w_,
        transform_function=transform_dataset_features_to_x_y_xy_xx_yy,
        noise_function=add_noise_10per)

    return dict(w=w_,
                E_in=E_in,
                estimated_E_out=estimated_E_out,
                dataset=dataset_transformed)
Esempio n. 2
0
def run_experiment_A(n):
    '''
    Esta função executa um experimento único referente às questões (1), (2) e (3).
    Descrição geral: gera uma amostra de tamanho N, sem ruído, de uma função alvo
    baseada em uma reta gerada aleatoriamente, executa a regressão linear sobre ela
    e avalia o erro dentro da amostra, assim como uma estimativa do erro fora da
    amostra.
    '''
    # Gerando uma reta aleatória e a função alvo corespondente.
    line_function = generate_line_function()
    f = generate_f(line_function)

    # Gerando amostra sem ruído.
    dataset = generate_dataset(f, n)

    # Executando regressão.
    w = lr(dataset)['w']

    # Avaliando resultados de w.
    E_in = evaluate_E_in(w, dataset)
    estimated_E_out = estimate_E_out(f, w)

    return dict(w=w,
                E_in=E_in,
                estimated_E_out=estimated_E_out,
                dataset=dataset)
Esempio n. 3
0
def run_experiment_B(n):
    '''
    Esta função executa um experimento único referente à questão (4).
    Descrição geral: gera uma amostra de tamanho N, com ruído, de uma função alvo
    definida pela função f_circum, executa a regressão linear sobre ela
    e avalia o erro dentro da amostra, assim como uma estimativa do erro fora da
    amostra.
    '''
    # Utilizando a função alvo definida para as questões (4) até (6): f_circum(x1, x2) = sign(x1^2 + x2^2 − 0.6)
    f = f_circum

    # Gerando uma amostra de f de tamanho n e adicionando ruído.
    dataset = generate_dataset(f, n, noise_function=add_noise_10per)

    # Executando regressão.
    w = lr(dataset)['w']

    # Avaliando resultados de w.
    E_in = evaluate_E_in(w, dataset)
    estimated_E_out = estimate_E_out(f, w)

    return dict(w=w,
                E_in=E_in,
                estimated_E_out=estimated_E_out,
                dataset=dataset)
Esempio n. 4
0
def estimate_E_out(f, w, n_rounds=1000):
    '''
    Estima o erro fora da amostra de h[w](x), gerando uma nova amostra
    e calculando o erro de entropia cruzada sobre ela.
    '''
    dataset = generate_dataset(f, n_rounds)
    return myround(cross_entropy_error(w, dataset))
Esempio n. 5
0
def run_experiment_C(n):
    '''
    Executa o experimento referente às questões (4) e (5)
    '''
    # Gerando uma reta aleatória e a função de avaliação corespondente.
    line_function = generate_line_function()
    pseudo_f = generate_f(line_function)

    # Gerando amostra sem ruído.
    dataset = generate_dataset(pseudo_f, n)

    # Executando regressão.
    result = logir_sgd(dataset)
    w = result['w']
    epochs = result['epochs']

    # Avaliando resultados de logir_sgd.
    E_in = evaluate_E_in(w, dataset)
    estimated_E_out = estimate_E_out(pseudo_f, w)

    return dict(w=w, E_in=E_in, estimated_E_out=estimated_E_out, dataset=dataset, epochs=epochs)
    outputs = net(inputs)
    outputs -= means
    difference = torch.sum(outputs * g[target_class, :],
                           dim=1)  #torch.sum((outputs - g[target_class,:])**2)
    return difference


def lookup_classes(class_list):
    path = os.path.join("datasets", "tiny-imagenet-200", "words.txt")
    with open(path) as f:
        d = dict(x.rstrip().split(None, 1) for x in f)
    return [d[x] for x in class_list]


print("Extracting datasets...")
trainloader_source, trainloader_target, testloader = datasets.generate_dataset(
    mode, num_source_samps, num_target_samps)

all_nets = []
all_criteria = []
all_optimizers = []
for i in range(len(trainloader_source)):
    all_nets.append(nets.generate_net(
        mode))  #net[i][0] is just the first part up to the penultimate layer
    all_criteria.append(nn.CrossEntropyLoss())
    all_optimizers.append(
        optim.SGD(all_nets[i].parameters(), lr=0.001, momentum=0.9))

print("Training networks...")

for epoch in range(55):  # loop over the dataset multiple times
    for j in range(len(trainloader_source)):