| @@ -28,7 +28,7 @@ def fixed_unigram_candidate_sampler( | |||
| if len(num_repeats.shape) != 1: | |||
| raise ValueError('num_repeats must be 1D') | |||
| if torch.any(len(unigrams) - \ | |||
| if torch.any((unigrams > 0).sum() - \ | |||
| (true_classes >= 0).sum(dim=1) < \ | |||
| num_repeats): | |||
| raise ValueError('Not enough classes to choose from') | |||
| @@ -132,6 +132,7 @@ def negative_sample_adj_mat(adj_mat: torch.Tensor, | |||
| raise ValueError('adj_mat must be a torch.Tensor, got: %s' % adj_mat.__class__.__name__) | |||
| edges_pos, degrees = get_edges_and_degrees(adj_mat) | |||
| degrees = degrees.to(torch.float32) + 1.0 / torch.numel(adj_mat) | |||
| true_classes, row_count = get_true_classes(adj_mat) | |||
| if remove_diagonal: | |||
| @@ -172,6 +173,7 @@ def negative_sample_data(data: Data) -> Data: | |||
| for vt in data.vertex_types: | |||
| res.add_vertex_type(vt.name, vt.count) | |||
| for key, et in data.edge_types.items(): | |||
| print('key:', key) | |||
| adjacency_matrices_neg = [] | |||
| for adj_mat in et.adjacency_matrices: | |||
| remove_diagonal = True \ | |||
| @@ -30,7 +30,7 @@ def split_adj_mat(adj_mat: torch.Tensor, ratios: List[float]): | |||
| ind = indices[:, beg:end] | |||
| val = values[beg:end] | |||
| res.append(_sparse_coo_tensor(ind, val, adj_mat.shape)) | |||
| res.append(_sparse_coo_tensor(ind, val, adj_mat.shape).coalesce()) | |||
| # ofs += cnt | |||
| return res | |||
| @@ -40,7 +40,7 @@ def split_edge_type(et: EdgeType, ratios: Tuple[float, float, float]): | |||
| ratios = list(ratios) | |||
| if sum(ratios) != 1: | |||
| raise ValueError('Sum of ratios must be 1') | |||
| res = [ split_adj_mat(adj_mat, ratios) \ | |||
| for adj_mat in et.adjacency_matrices ] | |||
| @@ -74,7 +74,7 @@ def split_data(data: Data, | |||
| res_1 = [] | |||
| for new_edge_types in res: | |||
| d = Data() | |||
| d.vertex_types = data.vertex_types, | |||
| d.vertex_types = data.vertex_types | |||
| d.edge_types = new_edge_types | |||
| res_1.append(d) | |||
| @@ -78,28 +78,28 @@ def test_train_loop_01(): | |||
| data.add_vertex_type('Bar', 4) | |||
| foo_foo = torch.tensor([ | |||
| [0, 0, 0, 1, 0], | |||
| [0, 0, 1, 0, 0], | |||
| [1, 0, 0, 1, 0], | |||
| [0, 0, 1, 0, 1], | |||
| [0, 1, 0, 0, 0] | |||
| [0, 0, 0, 1, 0], | |||
| [1, 0, 0, 0, 0], | |||
| [0, 1, 0, 0, 0], | |||
| [0, 0, 0, 0, 0] | |||
| ], dtype=torch.float32) | |||
| foo_foo = (foo_foo + foo_foo.transpose(0, 1)) / 2 | |||
| foo_bar = torch.tensor([ | |||
| [0, 1, 0, 1], | |||
| [0, 0, 1, 0], | |||
| [0, 0, 0, 1], | |||
| [0, 1, 0, 0], | |||
| [1, 0, 0, 0], | |||
| [0, 0, 1, 1] | |||
| [0, 0, 0, 1] | |||
| ], dtype=torch.float32) | |||
| bar_foo = foo_bar.transpose(0, 1) | |||
| bar_bar = torch.tensor([ | |||
| [0, 0, 1, 0], | |||
| [1, 0, 0, 0], | |||
| [0, 1, 0, 1], | |||
| [0, 1, 0, 0], | |||
| [1, 0, 0, 0], | |||
| [0, 0, 0, 1], | |||
| [0, 0, 1, 0], | |||
| ], dtype=torch.float32) | |||
| bar_bar = (bar_bar + bar_bar.transpose(0, 1)) / 2 | |||
| @@ -123,7 +123,10 @@ def test_train_loop_01(): | |||
| conv_activation=torch.sigmoid, | |||
| dec_activation=torch.sigmoid) | |||
| train_data, val_data, test_data = split_data(data, (.9, .1, .0) ) | |||
| train_data, val_data, test_data = split_data(data, (.5, .5, .0) ) | |||
| print('val_data:', val_data) | |||
| print('val_data.vertex_types:', val_data.vertex_types) | |||
| loop = TrainLoop(model, val_data, test_data, initial_repr, | |||
| max_epochs=1, batch_size=1) | |||