def test_forward_cpu_graph_invariant(model, data): atom_data, adj_data = data[0], data[1] y_actual = cuda.to_cpu(model(atom_data, adj_data).data) permutation_index = numpy.random.permutation(atom_size) permute_atom_data = permute_node(atom_data, permutation_index) permute_adj_data = permute_adj(adj_data, permutation_index) permute_y_actual = cuda.to_cpu(model( permute_atom_data, permute_adj_data).data) assert numpy.allclose(y_actual, permute_y_actual, rtol=1e-5, atol=1e-6)
def test_forward_cpu_graph_invariant(model, data): atom_data, adj_data = data[0], data[1] y_actual = cuda.to_cpu(model(atom_data, adj_data).data) permutation_index = numpy.random.permutation(atom_size) permute_atom_data = permute_node(atom_data, permutation_index) permute_adj_data = permute_adj(adj_data, permutation_index) permute_y_actual = cuda.to_cpu( model(permute_atom_data, permute_adj_data).data) assert numpy.allclose(y_actual, permute_y_actual, rtol=1e-5, atol=1e-6)
def test_forward_cpu_graph_invariant(model, data): # type: (GraphConvPredictor, Tuple[numpy.ndarray, numpy.ndarray, numpy.ndarray]) -> None # NOQA atom_data, adj_data = data[:2] y_actual = cuda.to_cpu(model(atom_data, adj_data).data) permutation_index = numpy.random.permutation(atom_size) permute_atom_data = permute_node(atom_data, permutation_index) permute_adj_data = permute_adj(adj_data, permutation_index) permute_y_actual = cuda.to_cpu( model(permute_atom_data, permute_adj_data).data) assert numpy.allclose(y_actual, permute_y_actual, rtol=1e-5, atol=1e-5)
def test_forward_cpu_graph_invariant(update, data): atom_data, adj_data = data[:2] y_actual = cuda.to_cpu(update(atom_data, adj_data).data) permutation_index = numpy.random.permutation(atom_size) permute_atom_data = permute_node(atom_data, permutation_index, axis=1) permute_adj_data = permute_adj(adj_data, permutation_index) permute_y_actual = cuda.to_cpu( update(permute_atom_data, permute_adj_data).data) numpy.testing.assert_allclose( permute_node(y_actual, permutation_index, axis=1), permute_y_actual, rtol=1e-5, atol=1e-5)
def test_forward_cpu_graph_invariant(model, data): # This RSGCN uses dropout, so we need to forward with test mode # to remove stochastic calculation. atom_data, adj_data = data[0], data[1] with chainer.using_config('train', False): y_actual = cuda.to_cpu(model(atom_data, adj_data).data) permutation_index = numpy.random.permutation(atom_size) permute_atom_data = permute_node(atom_data, permutation_index) permute_adj_data = permute_adj(adj_data, permutation_index) with chainer.using_config('train', False): permute_y_actual = cuda.to_cpu( model(permute_atom_data, permute_adj_data).data) assert numpy.allclose(y_actual, permute_y_actual, rtol=1.e-4, atol=1.e-5)
def test_forward_cpu_graph_invariant(model, data): # This RSGCN uses dropout, so we need to forward with test mode # to remove stochastic calculation. atom_data, adj_data = data[0], data[1] with chainer.using_config('train', False): y_actual = cuda.to_cpu(model(atom_data, adj_data).data) permutation_index = numpy.random.permutation(atom_size) permute_atom_data = permute_node(atom_data, permutation_index) permute_adj_data = permute_adj(adj_data, permutation_index) with chainer.using_config('train', False): permute_y_actual = cuda.to_cpu(model( permute_atom_data, permute_adj_data).data) assert numpy.allclose(y_actual, permute_y_actual, rtol=1.e-4, atol=1.e-5)
def test_forward_cpu_graph_invariant(model, data): # type: (MPNN, Tuple[numpy.ndarray, numpy.ndarray, numpy.ndarray]) -> None if model.message_func == 'edgenet': return # Because EdgeNet uses NN for expanding edge vector dimension, # graph invariant is not ensured. atom_data, adj_data = data[0], data[1] y_actual = cuda.to_cpu(model(atom_data, adj_data).data) permutation_index = numpy.random.permutation(atom_size) permute_atom_data = permute_node(atom_data, permutation_index) permute_adj_data = permute_adj(adj_data, permutation_index) permute_y_actual = cuda.to_cpu( model(permute_atom_data, permute_adj_data).data) assert numpy.allclose(y_actual, permute_y_actual, rtol=1e-3, atol=1e-3)
def test_forward_cpu_graph_invariant(update, data): # type: (GINUpdate, Tuple[numpy.ndarray, numpy.ndarray, numpy.ndarray]) -> None # NOQA atom_data, adj_data = data[:2] y_actual = cuda.to_cpu(update(atom_data, adj_data).data) permutation_index = numpy.random.permutation(atom_size) permute_atom_data = permute_node(atom_data, permutation_index, axis=1) permute_adj_data = permute_adj(adj_data, permutation_index) permute_y_actual = cuda.to_cpu( update(permute_atom_data, permute_adj_data).data) numpy.testing.assert_allclose(permute_node(y_actual, permutation_index, axis=1), permute_y_actual, rtol=1e-3, atol=1e-3)
def _test_forward_cpu_graph_invariant( model, atom_data, adj_data, node_permute_axis=-1): y_actual = cuda.to_cpu(model(atom_data, adj_data).data) permutation_index = numpy.random.permutation(atom_size) permute_atom_data = permute_node(atom_data, permutation_index, axis=node_permute_axis) permute_adj_data = adj_data.reshape( batch_size, atom_size, atom_size, pair_feature_dim ).astype(numpy.float32) permute_adj_data = permute_adj( permute_adj_data, permutation_index, axis=[1, 2]) permute_adj_data = permute_adj_data.reshape( batch_size, atom_size * atom_size, pair_feature_dim ).astype(numpy.float32) permute_y_actual = cuda.to_cpu(model( permute_atom_data, permute_adj_data).data) assert numpy.allclose(y_actual, permute_y_actual, rtol=1.e-4, atol=1.e-6)
def test_forward_cpu_graph_invariant(update, data): atom_data, adj_data, deg_conds = data[:3] y_actual = cuda.to_cpu(update(atom_data, adj_data, deg_conds).data) permutation_index = numpy.random.permutation(atom_size) # atom_data: (batch_size, atom_size, hidden_channels) permute_atom_data = permute_node(atom_data, permutation_index, axis=1) permute_adj_data = permute_adj(adj_data, permutation_index) # deg_conds: (num_degree_type, batch_size, atom_size, hidden_channels) permute_deg_conds = permute_node(deg_conds, permutation_index, axis=2) permute_y_actual = cuda.to_cpu( update(permute_atom_data, permute_adj_data, permute_deg_conds).data) numpy.testing.assert_allclose(permute_node(y_actual, permutation_index, axis=1), permute_y_actual, rtol=1e-5, atol=1e-5)
def _test_forward_cpu_graph_invariant(model, atom_data, adj_data, node_permute_axis=-1): y_actual = cuda.to_cpu(model(atom_data, adj_data).data) permutation_index = numpy.random.permutation(atom_size) permute_atom_data = permute_node(atom_data, permutation_index, axis=node_permute_axis) permute_adj_data = adj_data.reshape(batch_size, atom_size, atom_size, pair_feature_dim).astype(numpy.float32) permute_adj_data = permute_adj(permute_adj_data, permutation_index, axis=[1, 2]) permute_adj_data = permute_adj_data.reshape( batch_size, atom_size * atom_size, pair_feature_dim).astype(numpy.float32) permute_y_actual = cuda.to_cpu( model(permute_atom_data, permute_adj_data).data) assert numpy.allclose(y_actual, permute_y_actual, rtol=1.e-4, atol=1.e-6)