17.4.3 Advanced Hyperparameter Customization
GraphWiseConvLayerConfig
: GraphWiseConvLayer is based on Inductive Representation Learning on Large Graphs (GraphSage) by Hamilton et al.GraphWiseAttentionLayerConfig
: GraphWiseAttentionLayer is based on Graph Attention Networks (GAT) by Velickovic et al. which makes the aggregation smarter but comes with larger computation cost.
The following code examples uses the
GraphWiseConvLayerConfig
class for the convolutional layer
configuration. The examples also specifies a weight decay parameter of
0.001
and dropout with dropping probability
0.5
for the GraphWise model to counteract
overfitting.
opg4j> var weightProperty = analyst.pagerank(trainGraph).getName()
opg4j> var convLayerConfig = analyst.graphWiseConvLayerConfigBuilder().
setNumSampledNeighbors(25).
setActivationFunction(ActivationFunction.TANH).
setWeightInitScheme(WeightInitScheme.XAVIER).
setWeightedAggregationProperty(weightProperty).
setDropoutRate(0.5).
build()
opg4j> var dgiLayerConfig = analyst.graphWiseDgiLayerConfigBuilder().
setCorruptionFunction(new PermutationCorruption()).
setDiscriminator(GraphWiseDgiLayerConfig.Discriminator.BILINEAR).
setReadoutFunction(GraphWiseDgiLayerConfig.ReadoutFunction.MEAN).
build()
opg4j> var model = analyst.unsupervisedGraphWiseModelBuilder().
setVertexInputPropertyNames("vertex_features").
setEdgeInputPropertyNames("edge_features").
setConvLayerConfigs(convLayerConfig).
setDgiLayerConfig(dgiLayerConfig).
setLossFunction(UnsupervisedGraphWiseModelConfig.LossFunction.SIGMOID_CROSS_ENTROPY).
setEmbeddingDim(256).
setLearningRate(0.05).
setNumEpochs(30).
setSeed(42).
setShuffle(false).
setStandardize(true).
setBatchSize(64).
build()
String weightProperty = analyst.pagerank(trainGraph).getName();
GraphWiseConvLayerConfig convLayerConfig = analyst.graphWiseConvLayerConfigBuilder()
.setNumSampledNeighbors(25)
.setActivationFunction(ActivationFunction.TANH)
.setWeightInitScheme(WeightInitScheme.XAVIER)
.setWeightedAggregationProperty(weightProperty)
.setDropoutRate(0.5)
.build();
GraphWiseDgiLayerConfig dgiLayerConfig = analyst.graphWiseDgiLayerConfigBuilder()
.setCorruptionFunction(new PermutationCorruption())
.setDiscriminator(GraphWiseDgiLayerConfig.Discriminator.BILINEAR)
.setReadoutFunction(GraphWiseDgiLayerConfig.ReadoutFunction.MEAN)
.build();
UnsupervisedGraphWiseModel model = analyst.unsupervisedGraphWiseModelBuilder()
.setVertexInputPropertyNames("vertex_features")
.setEdgeInputPropertyNames("edge_features")
.setDgiLayerConfig(dgiLayerConfig)
.setLossFunction(UnsupervisedGraphWiseModelConfig.LossFunction.SIGMOID_CROSS_ENTROPY)
.setConvLayerConfigs(convLayerConfig)
.setWeightDecay(0.001)
.setEmbeddingDim(256)
.setLearningRate(0.05)
.setNumEpochs(30)
.setSeed(42)
.setShuffle(false)
.setStandardize(true)
.setBatchSize(64)
.build();
weightProperty = analyst.pagerank(train_graph).name
conv_layer_config = dict(num_sampled_neighbors=25,
activation_fn='tanh',
weight_init_scheme='xavier',
neighbor_weight_property_name=weightProperty,
dropout_rate=0.5)
conv_layer = analyst.graphwise_conv_layer_config(**conv_layer_config)
dgi_layer_config = dict(corruption_function=None,
readout_function="mean",
discriminator="bilinear")
dgi_layer = analyst.graphwise_dgi_layer_config(**dgi_layer_config)
params = dict(conv_layer_config=[conv_layer],
dgi_layer_config=dgi_layer,
loss_fn="sigmoid_cross_entropy",
vertex_input_property_names=["vertex_features"],
edge_input_property_names=["edge_features"],
weight_decay=0.001,
layer_size=256,
learning_rate=0.05,
num_epochs=30,
seed=42,
standardize=true,
batch_size=64
)
model = analyst.unsupervised_graphwise_builder(**params)
In the preceding example, you can replace
GraphWiseConvLayerConfig
with the
GraphWiseAttentionLayerConfig
class to build a graph attention
network model. Also, note that if the number of sampled neighbors is set to
-1
using setNumSampledNeighbors
, then all the
neighboring nodes will be sampled.
opg4j> var convLayerConfig = analyst.graphWiseAttentionLayerConfigBuilder().
setNumSampledNeighbors(25).
setActivationFunction(ActivationFunction.LEAKY_RELU).
setWeightInitScheme(WeightInitScheme.XAVIER_UNIFORM).
setHeadAggregation(AggregationOperation.MEAN).
setNumHeads(4).
setDropoutRate(0.5).
build()
GraphWiseAttentionLayerConfig convLayerConfig = analyst.graphWiseAttentionLayerConfigBuilder()
.setNumSampledNeighbors(25)
.setActivationFunction(ActivationFunction.LEAKY_RELU)
.setWeightInitScheme(WeightInitScheme.XAVIER_UNIFORM)
.setHeadAggregation(AggregationOperation.MEAN)
.setNumHeads(4)
.setDropoutRate(0.5)
.build();
conv_layer_config = dict(num_sampled_neighbors=25,
activation_fn='leaky_relu',
weight_init_scheme='xavier_uniform',
aggregation_operation='mean',
num_heads=4,
dropout_rate=0.5)