Assume that I have a trainable tensor T of shape torch.size([8]).
Now I would like to train that tensor but also to have the following constraint:
the tensor sould be symmetric in the sense that
T[0] = T[7]
T[1] = T[6],
T[2] = T[5],
T[3] = T[4].

i.e. the tensor T consists of actually two tensors, one of which is the flipped version of the other one.

I have tried to assign to the first half of T its flipped version, i.e.

self.T[4:] = torch.flip(self.T[:4],dims=[0])

but this fails as the optimizer tells me the it can’t optimize a non-leaf tensor.

I would not use a tensor of length 8 and attempt to constrain its first
half to mirror its second. Just use a tensor of length 4, and use each
of its 4 elements twice in your computations.