-
Notifications
You must be signed in to change notification settings - Fork 15
Description
Suite à notre discussion pour intégrer des mesures flexibles sur plusieurs dimensions, j'ai pensé à un opérateur de mesure qui suit ces principes:
-
un opérateur de mesure
H
, qui a des dimensions(M, *)
, où(*)
a au moins une dimension (la/les dimension/s sur la/lesquelle/s on mesure).
Par exemple pour faire un équivalent du HadamSplit avech=64
, on prendraitHadamSplit.H.reshape(64**2, 64, 64)
Avec cette construction, on voit tout de suite qu'on aM=64**2
mesures, et que les mesures s'appliquent sur 2 dimensions - les 2 dimensions restantes (par exemple les 2 dernières dimensions du tenseur à mesurer). -
le tenseur mesuré en entrée devrait avoir les
(*)
dernières dimensions égales aux(*)
dernières dimensions de l'opérateur de mesure. Dans le même exemple, l'opérateur a comme 2 dernières dimensions(64,64)
, donc on mesure ici des images (ou autre) de taille 64x64. -
Si on veut 'sauter' une dimension lors de la mesure (par exemple mesurer sur
(c,h)
au lieu de(h,w)
dans l'exemple de(b,c,h,w)
), on peut indiquer une dimension en plus dans l'opérateur : au lieu d'avoirH.shape = (64**2, 64, 64)
on aurait (dans un cas à 512 canaux) :H.shape = (64**2, 512, 64, 1)
. Ici avec le 1 à la fin on comprend qu'on ne mesure rien sur cette dimension : on la 'saute' et on passe aux 2 suivantes
Voilà c'est encore un peu brouillon, je sais pas comment régler le pb du dynamique dessus mais ça m'a l'air pas mal.