It would be nice to be able to fix the random samples once and for all.
Once solution would be to store the RNG within the Perturbed object: see https://docs.julialang.org/en/v1/stdlib/Random/
We should be able to provide keywords arguments as input of the SPOPlusLoss, in a similar way as for the FenchelYoungLoss. Also needs to be implemented for SSVMLoss.
Hello I have a task to create a graph from the output of the convolutional neural network that then will be used in graph neural network.
I have a cost function that can tell wheather graph was well created.
My main problem is that graph by its nature is discrete hence constructing graph creation algorithm in a way that will enable back propagation is problematic (as you see in my architecture gradients need to pass from graph neural networks to CNN)
Can it be potentially possible to use your package for differentiable graph creation from 3D array?
As of today, Enzyme.jl allows custom rules, written in a different format than ChainRules.jl. It would be nice to test InferOpt.jl with this new autodiff backend
This issue is used to trigger TagBot; feel free to unsubscribe.
If you haven't already, you should update your TagBot.yml to include issue comment triggers.
Please see this post on Discourse for instructions and more details.
If you'd like for me to do this for you, comment TagBot fix on this issue.
I'll open a PR within a few hours, please be patient!
Currently, most of our code deals with values $y$ or $\theta$ that are typed as AbstractArray{<:Real}. This restriction is not used for dispatch, so it is not essential, and may even prevent the use of other interesting number formats that do not subtype Real. I suggest we remove it
It would be nice to be compatible with Julia's Long Term Support (LTS) version 1.6.
I think the main obstacle at the moment is the use of the destructuring syntax (; a, b) = x, which was introduced in Julia 1.7. Shouldn't be hard to fix, and the test CI needs to be updated too.
It would be interesting to be able to run perturbed maximizers in parallel, especially when nb_samples is high or/and the combinatorial algorithm has a long runtime.
One option would be to use ThreadsX.jl. For this, we need to wait until the following PR is merged: tkf/ThreadsX.jl#195 in order to not have conflict with SetField version.
Reverse rules for PerturbedAdditive and PerturbedMultiplicative take a sum instead of a weighted mean. As a result we've been computing M * J instead of J this whole time
At the moment, DifferentiableFrankWolfe (see the giom branch) only works when θ is a vector, not a higher-dimensional array.
It should be easy to implement flattening / unflattening to generalize it.
Currently, InferOpt fully supports predictors of the form $\arg\max_y \theta^\top y$ in combinatorial layers.
It would be interesting to allow the more general form $$\arg\max_y \theta^\top g(y) + h(y)$$
For the moment, a workaround is to make your predictor return $g(y)$ instead of $y$. This way, gradient computation are correct, but loss value computations are not when $h\neq0$ (there is a missing term), therefore the training will work but the loss metric value will be slightly incorrect.
One implementation option would be to enforce returning the objective value as an additional output of the predictor.
I think traits are a hassle for users who want a quick and easy implem. If the required methods do not exist for their structures, Julia will throw an error anyway. I suggest we get rid of SimpleTraits and just use unconstrained type parameters for regularization and imitation losses.
Since I figured out how to use JET.report_package properly, it throws a few errors for interface functions that are not implemented. For now the test is skipped, but we need to reactivate it.