Save the date! Google I/O returns May 18-20 Register now


Wraps the function feature_steered_convolution as a TensorFlow layer.

The shorthands used below are V: The number of vertices. C: The number of channels in the input data.


In the following, A1 to An are optional batch dimensions.

data A float tensor with shape [A1, ..., An, V, C].
neighbors A SparseTensor with the same type as data and with shape [A1, ..., An, V, V] representing vertex neighborhoods. The neighborhood of a vertex defines the support region for convolution. For a mesh, a common choice for the neighborhood of vertex i would be the vertices in the K-ring of i (including i itself). Each vertex must have at least one neighbor. For a faithful implementation of the FeaStNet paper, neighbors should be a row-normalized weight matrix corresponding to the graph adjacency matrix with self-edges: neighbors[A1, ..., An, i, j] > 0 if vertex i and j are neighbors, neighbors[A1, ..., An, i, i] > 0 for all i, and sum(neighbors, axis=-1)[A1, ..., An, i] == 1.0 for all i. These requirements are relaxed in this implementation.
sizes An int tensor of shape [A1, ..., An] indicating the true input sizes in case of padding (sizes=None indicates no padding). sizes[A1, ..., An] <= V. If data and neighbors are 2-D, sizes will be ignored. As an example, consider an input consisting of three graphs G0, G1, and G2 with V0, V1 and V2 vertices respectively. The padded input would have the following shapes: data.shape = [3, V, C], and neighbors.shape = [3, V, V], where V = max([V0, V1, V2]). The true sizes of each graph will be specified by sizes=[V0, V1, V2]. data[i, :Vi, :] and neighbors[i, :Vi, :Vi] will be the vertex and neighborhood data of graph Gi. The SparseTensor neighbors should have no nonzero entries in the padded regions.
translation_invariant A bool. If True the assignment of features to weight matrices will be invariant to translation.
num_weight_matrices An int specifying the number of weight matrices used in the convolution.
num_output_channels An optional int specifying the number of channels in the output. If None then num_output_channels = C.
initializer An initializer for the trainable variables.
name A (name_scope) name for this op. Passed through to feature_steered_convolution().
var_name A (var_scope) name for the variables. Defaults to graph_convolution_feature_steered_convolution_weights.

Tensor with shape [A1, ..., An, V, num_output_channels].