public static Tensor GraphConv_func( Tensor features, Tensor A, int output_units = 64, Activation activation = null, Tensorflow.Keras.Layers.Dense layer = null, bool building = false ) { var dot = tf.batch_matmul(A, features); Tensor res; if (building) { return(layer.Apply(features)); } if (layer is null) { res = keras.layers.Dense(output_units, activation: activation).Apply(dot); } else { res = batch_dense(dot, layer); } return(res); }
public static Tensor batch_dense(Tensor inputs, Tensorflow.Keras.Layers.Dense layer) { var original_shape = inputs.shape; var all_results = new List <Tensor>(); foreach (Tensor item in tf.split(inputs, original_shape[1], -2)) { var reshape = tf.reshape(item, (-1, original_shape[2])); all_results.append(layer.Apply(reshape)); } return(tf.transpose(tf.stack(all_results), (1, 0, 2))); }