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)
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)
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)
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))
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)):