Toggle Light / Dark / Auto color theme
Toggle table of contents sidebar
Source code for spateo.external.CAST.model.aug
import numpy as np
import torch as th
# __func is original, func is GPU optimized
[docs] def __random_aug ( graph , x , feat_drop_rate , edge_mask_rate ):
import dgl
n_node = graph . number_of_nodes ()
edge_mask = mask_edge ( graph , edge_mask_rate )
feat = drop_feature ( x , feat_drop_rate )
ng = dgl . graph ([])
ng . add_nodes ( n_node )
src = graph . edges ()[ 0 ]
dst = graph . edges ()[ 1 ]
nsrc = src [ edge_mask ]
ndst = dst [ edge_mask ]
ng . add_edges ( nsrc , ndst )
return ng , feat
[docs] def __drop_feature ( x , drop_prob ):
drop_mask = th . empty (( x . size ( 1 ),), dtype = th . float32 , device = x . device ) . uniform_ ( 0 , 1 ) < drop_prob
x = x . clone ()
x [:, drop_mask ] = 0
return x
[docs] def __mask_edge ( graph , mask_prob ):
E = graph . number_of_edges ()
mask_rates = th . FloatTensor ( np . ones ( E ) * mask_prob )
masks = th . bernoulli ( 1 - mask_rates )
mask_idx = masks . nonzero () . squeeze ( 1 )
return mask_idx
[docs] def random_aug ( graph , x , feat_drop_rate , edge_mask_rate ):
import dgl
n_node = graph . number_of_nodes ()
edge_mask = mask_edge ( graph , edge_mask_rate )
feat = x . clone ()
feat = drop_feature ( feat , feat_drop_rate )
ng = dgl . graph ([], device = graph . device )
ng . add_nodes ( n_node )
src = graph . edges ()[ 0 ]
dst = graph . edges ()[ 1 ]
nsrc = src [ edge_mask ]
ndst = dst [ edge_mask ]
ng . add_edges ( nsrc , ndst )
return ng , feat
[docs] def drop_feature ( x , drop_prob ):
drop_mask = th . empty (( x . size ( 1 ),), dtype = th . float32 , device = x . device ) . uniform_ ( 0 , 1 ) < drop_prob
# x = x.clone()
x [:, drop_mask ] = 0
return x
[docs] def mask_edge ( graph , mask_prob ):
E = graph . number_of_edges ()
mask_rates = th . ones ( E , device = graph . device ) * mask_prob
masks = th . bernoulli ( 1 - mask_rates )
mask_idx = masks . nonzero () . squeeze ( 1 )
return mask_idx