Skip to content

Qfl3x/GeometricFlux.jl

 
 

Repository files navigation

GeometricFlux.jl

codecov

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.

Installation

]add GeometricFlux

Features

  • 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)

Featured Graphs

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)   

Graph convolutional layers

Construct a GCN layer:

GCNConv(input_dim => output_dim, relu)

Use it as you use Flux

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))

About

Geometric Deep Learning for Flux

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Julia 59.9%
  • TeX 38.8%
  • Ruby 1.3%