Beispiel #1
0
            "/root/ebms_regression/1dregression/training_logs/model_%s_%d/checkpoints/model_%s_epoch_%d.pth"
            % (model_id, model_i, model_id, epoch)))

    x_values = []
    x_values_2_scores = {}
    network.eval()  # (set in eval mode, this affects BatchNorm and dropout)
    for step, (x) in enumerate(val_loader):
        x = x.cuda().unsqueeze(1)  # (shape: (batch_size, 1))

        y_samples = np.linspace(-3.0, 3.0,
                                num_samples)  # (shape: (num_samples, ))
        y_samples = y_samples.astype(np.float32)
        y_samples = torch.from_numpy(
            y_samples).cuda()  # (shape: (batch_size, num_samples))

        x_features = network.feature_net(x)
        scores = network.predictor_net(
            x_features,
            y_samples.expand(x.shape[0],
                             -1))  # (shape: (batch_size, num_samples))

        x_values.extend(x.squeeze(1).cpu().tolist())

        for i, x_val in enumerate(x):
            x_values_2_scores[x_val.item()] = scores[i, :].cpu().numpy()

    print("$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$")

    num_x_values = float(len(x_values))
    print(num_x_values)
    optimizer = torch.optim.Adam(network.parameters(), lr=learning_rate)

    epoch_losses_train = []
    for epoch in range(num_epochs):
        print ("###########################")
        print ("######## NEW EPOCH ########")
        print ("###########################")
        print ("model: %d/%d  |  epoch: %d/%d" % (i+1, num_models, epoch+1, num_epochs))

        network.train() # (set in training mode, this affects BatchNorm and dropout)
        batch_losses = []
        for step, (xs, ys) in enumerate(train_loader):
            xs = xs.cuda().unsqueeze(1) # (shape: (batch_size, 1))
            ys = ys.cuda().unsqueeze(1) # (shape: (batch_size, 1))

            x_features = network.feature_net(xs) # (shape: (batch_size, hidden_dim))
            scores_gt = network.predictor_net(x_features, ys) # (shape: (batch_size, 1))
            scores_gt = scores_gt.squeeze(1) # (shape: (batch_size))

            y_samples_zero, q_y_samples, q_ys = sample_gmm_centered(stds, num_samples=num_samples)
            y_samples_zero = y_samples_zero.cuda() # (shape: (num_samples, 1))
            y_samples_zero = y_samples_zero.squeeze(1) # (shape: (num_samples))
            q_y_samples = q_y_samples.cuda() # (shape: (num_samples))
            y_samples = ys + y_samples_zero.unsqueeze(0) # (shape: (batch_size, num_samples))
            q_y_samples = q_y_samples.unsqueeze(0)*torch.ones(y_samples.size()).cuda() # (shape: (batch_size, num_samples))
            q_ys = q_ys[0]*torch.ones(xs.size(0)).cuda() # (shape: (batch_size))

            scores_samples = network.predictor_net(x_features, y_samples) # (shape: (batch_size, num_samples))

            ########################################################################
            # compute loss: