Advertisement
Guest User

Untitled

a guest
Aug 7th, 2018
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Julia 0.59 KB | None | 0 0
  1.  
  2. function dot2(v)
  3.     sums = fill(0.0, size(v,1)-1)
  4.     for i = 1:size(v,1)-1
  5.         for j = 1:size(v,2)
  6.             sums[i] += v[i,j]*v[i+1,j]
  7.         end
  8.     end
  9.     return sums
  10. end
  11. function dot2Δ(v, Δ)
  12.     g = fill(0.0, size(v)...)
  13.     g[1,:] .+= Δ[1].*v[2,:]
  14.     for i = 2:size(v,1)-1
  15.         g[i,:] .+= Δ[i-1]*v[i-1,:] .+ Δ[i]*v[i+1,:]
  16.     end
  17.     g[end,:] .+= Δ[end].*v[end-1,:]
  18.     return g
  19. end
  20.  
  21. dot2(v::TrackedArray) = Flux.Tracker.track(dot2, v)
  22. Flux.Tracker.@grad function dot2(v)
  23.     dot2(data(v)),
  24.     Δ-> (nobacksies(:dot2, dot2Δ(data.((v, Δ))...)) ,)
  25. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement