Derivative of a norm

Hi! I am trying to integrate the fenics loss function into a NN system in which I would want to calculate the derivative of a loss function w.r.t. y_hat where L is defined as

L = sqrt(||y_hat - y||) / sqrt(||y||)

How can I get dL/d_hat, to be used for “assemble(dL/d_hat)” with functional norms? I tried defining my own functional, how never I couldn’t define a root infront of the norm. Any pointers is very much appreciated!!

Thanks.

“”"
from dolfin import *

from fenics import *

import numpy as np

#mesh and function space

mesh = UnitSquareMesh(1, 1)

#define measure

dx = Measure(‘dx’, domain=mesh)

#define a functional

d_space = VectorFunctionSpace(mesh, “CG”, 1)

#define my own functional

u = Function (d_space)

u_hat = Function (d_space)

#set values of u and u_hat

u.vector()[:] = np.ones(d_space.dim())

u_hat.vector()[:] = np.ones(d_space.dim()) * 5

print("u: ", u.vector().get_local())

#define a functional (l2-norm of the difference) → sqrt(integral((u-u_hat)^2))

L = (u-u_hat)**2 * dx

#we want a root of the functional

#L_sqrt = ? I NEED A FUNCTIONAL WITH SQRT HERE

#compute J

L_value = assemble(L)

print ("L2: ", L_value)

##print ("J: ", J)

dLdu_hat = derivative(L, u_hat)

##compute

dLdu_hat = assemble(dLdu_hat)

print("dJdu_hat: ", dLdu_hat.get_local())

“”"

Ariana

You should have a look at dolfin_adjoint, as it contains example of algorithmic differentiation with fenics:

1 Like