Hi everyone,
[Edit] Question 1:
I had a quick question regarding the usage of TensorOperations.jl. How would one go about broadcasting certain operations such as
using TensorOperations;
function g(F)
@tensor F[i,j] * F[i,j];
end
which works if I have F as two dimensional (say of shape (3,3)). What if I want to broadcast this over a n-dimensional array, say of shape (3,3,100,4,...)? In NumPy I would do something like:
from numpy import einsum
einsum("ij...,ij...", F, F)
where the ellipsis (...) controls the broadcasting.
I have checked Tullio.jl too, but I couldn’t see anything. Any pointers would be helpful.
Thanks
Edit:
I did find EllipsisNotation.jl allows one to index into an array F[1,1,..], but not directly of use in this case.
Question 2:
The end goal is to be able to differentiate through g using ForwardDiff and broadcast the result. This brings me to my next question. Say I have this function:
f(u) = @. 1. + u[1]^2 + u[2]^2
I would take it’s gradient as
g = x-> gradient(f, x)
v = rand(2)
@assert g(v) == 2. .* v #true
Now what if my input to f is higher dimensional say of shape (2,100,4). How would I take broadcast it’s gradient over the trailing axes? I have taken a look at the posts in discourse, but if you feel this has been answered, feel free to point
Many thanks!