# scheduler.step()

            hidden_emb = mu.cpu().data.numpy()
            # roc_curr, ap_curr = get_roc_score(hidden_emb, adj_bs)
        # print('cur_loss_list: ')
        # print(cur_loss_list)
        # print(len(cur_loss_list))
        # one epoch one mean loss
        # total training samples num: len(adj_feat_list)
        # sum up all the batch losses and average them to get current epoch mean loss
        mean_loss = sum(cur_loss_list) / len(adj_feat_list)
        print('Epoch '+ str(epoch)+'  mean_loss: ')
        print(mean_loss)
        loss_record.append(mean_loss)
    print('loss record by epoch: ')
    print(loss_record)
    fout = open(model_out+'loss_by_epochs.txt', 'w')
    fout.writelines(["%s\n" % item for item in loss_record])
    # draw_loss_curve(loss_record)
    end_time = time.time()
    print('time elapse is : ' + str(end_time-start_time))
    model_file = 'model_'+str(batch_size)+'_'+str(epochs)+'_'+str(lr)+'.pkl'
    print(model.cpu())
    # of = open(model_file, 'w')
    model_cpu = model.cpu()
    torch.save(model_cpu.state_dict(), model_out + model_file)
    ### load model dict
    # model = GCNModelVAE(batch_size, args.hidden1, args.hidden2, args.dropout)
    # model.load_state_dict(torch.load(model_file))
    # print(model)
Esempio n. 2
0
                                 mu=mu,
                                 logvar=logvar,
                                 n_nodes=n_nodes,
                                 norm=norm,
                                 pos_weight=pos_weight)

            cpu_loss = loss.cpu()
            cur_loss_list.append(cpu_loss.data.numpy().tolist())
            loss.backward()
            # cur_loss = loss.item()
            optimizer.step()

            hidden_emb = mu.cpu().data.numpy()

        print(cur_loss_list)
        print(len(cur_loss_list))
        # one epoch one mean loss
        # total training samples num: len(adj_feat_list)
        # sum up all the batch losses and average them to get current epoch mean loss
        mean_loss = sum(cur_loss_list) / len(adj_feat_list)
        print('epoch ' + str(epoch) + 'the mean loss:', end=' ')
        print(mean_loss)
        loss_record.append(mean_loss)
    fout = open('./loss_by_epochs.txt', 'w')
    fout.writelines(["%s\n" % item for item in loss_record])
    # draw_loss_curve(loss_record)
    model_file = 'model_' + str(batch_size) + '_' + str(epochs) + '_' + str(
        lr) + '.pkl'
    print(model.cpu())
    of = open(model_file, 'wb')
    pickle.dump(model.cpu(), of)
Esempio n. 3
0
def gae_for(args):
    print("Using {} dataset".format(args.dataset_str))
    #得到原始邻接矩阵和特征
    adj, features = load_data(args.dataset_str)
    n_nodes, feat_dim = features.shape
    # Store original adjacency matrix (without diagonal entries) for later
    adj_orig = adj
    adj_orig = adj_orig - sp.dia_matrix(
        (adj_orig.diagonal()[np.newaxis, :], [0]), shape=adj_orig.shape)
    adj_orig.eliminate_zeros()
    print(adj.shape)
    adj_train, train_edges, val_edges, val_edges_false, test_edges, test_edges_false = mask_test_edges(
        adj)
    adj = adj_train
    print('adj.shape:{}'.format(adj.shape))
    print("np.sum(adj):{}".format(np.sum(adj)))
    print("len(train_edges):{}".format(len(train_edges)))
    print("len(test_edges):{}".format(len(test_edges)))
    print("len(val_edges):{}".format(len(val_edges)))
    # Some preprocessing
    adj_norm = preprocess_graph(adj)
    adj_label = adj_train + sp.eye(adj_train.shape[0])
    # adj_label = sparse_to_tuple(adj_label)
    adj_label = torch.FloatTensor(adj_label.toarray())

    pos_weight = float(adj.shape[0] * adj.shape[0] - adj.sum()) / adj.sum()
    # pos_weight=torch.from_numpy(pos_weight)
    norm = adj.shape[0] * adj.shape[0] / float(
        (adj.shape[0] * adj.shape[0] - adj.sum()) * 2)

    model = GCNModelVAE(feat_dim, args.hidden1, args.hidden2, args.dropout)
    if cuda:
        model = model.cuda()
        features = features.cuda()
        adj_norm = adj_norm.cuda()
    optimizer = optim.Adam(model.parameters(), lr=args.lr)
    hidden_emb = None
    for epoch in range(args.epochs):
        t = time.time()
        model.train()
        optimizer.zero_grad()
        #每次将整个图放入到模型中训练
        recovered, mu, logvar = model(features, adj_norm)
        loss = loss_function(preds=recovered,
                             labels=adj_label,
                             mu=mu,
                             logvar=logvar,
                             n_nodes=n_nodes,
                             norm=norm)
        loss.backward()
        cur_loss = loss.item()
        optimizer.step()

        hidden_emb = mu.cpu().data.numpy()
        roc_curr, ap_curr = get_roc_score(hidden_emb, adj_orig, val_edges,
                                          val_edges_false)

        print("Epoch:", '%04d' % (epoch + 1), "train_loss=",
              "{:.5f}".format(cur_loss), "val_ap=", "{:.5f}".format(ap_curr),
              "time=", "{:.5f}".format(time.time() - t))

    print("Optimization Finished!")
    roc_score, ap_score = get_roc_score(hidden_emb, adj_orig, test_edges,
                                        test_edges_false)
    print('Test ROC score: ' + str(roc_score))
    print('Test AP score: ' + str(ap_score))
    model = model.cpu()