GeometricFlux is a geometric deep learning library for Flux. This library aims to be compatible with packages from JuliaGraphs ecosystem and have support of CUDA GPU acceleration with CUDA. Message passing scheme is implemented as a flexbile framework and fused with Graph Network block scheme. GeometricFlux is compatible with other packages that are composable with Flux.
Suggestions, issues and pull requsts are welcome.
]add GeometricFlux
- Extend Flux deep learning framework in Julia and compatible with Flux layers.
- Support of CUDA GPU with CUDA.jl
- Integrate with existing JuliaGraphs ecosystem
- Support generic graph neural network architectures
- Variable graph inputs are supported. You use it when diverse graph structures are prepared as inputs to the same model.
- Integrate GNN benchmark datasets (WIP)
GeometricFlux handles graph data (the topology plus node/vertex/graph features)
thanks to FeaturedGraph
type.
A FeaturedGraph
can be constructed from various graph structures, including
adjacency matrices, adjacency lists, Graphs' types...
fg = FeaturedGraph(adj_list)
Construct a GCN layer:
GCNConv(input_dim => output_dim, relu)
model = Chain(
WithGraph(fg, GCNConv(fg, 1024 => 512, relu)),
Dropout(0.5),
WithGraph(fg, GCNConv(fg, 512 => 128)),
Dense(128, 10)
)
## Loss
loss(x, y) = logitcrossentropy(model(x), y)
accuracy(x, y) = mean(onecold(model(x)) .== onecold(y))
## Training
ps = Flux.params(model)
train_data = [(train_X, train_y)]
opt = ADAM(0.01)
evalcb() = @show(accuracy(train_X, train_y))
Flux.train!(loss, ps, train_data, opt, cb=throttle(evalcb, 10))