Contando el número de ocurrencias en el Tensor de PyTorch. (El tensor es demasiado grande para Numpy)
¿Existe alguna forma inteligente de contar el número de ocurrencias de cada valor en un Tensor de PyTorch muy grande? El tamaño del Tensor es 11701*300=3510300
o tal vez aumente o disminuya. TORCH.BINCOUNT, TORCH.UNIQUE y TORCH.UNIQUE_CONSECUTIVE
no son útiles hasta el momento.
BINCOUNT retorna un número diferente de elementos cada vez. Unique tampoco es útil ya que devuelve valores únicos.
Esto es lo que quise decir cuando dije que devuelve elementos diferentes cada vez. Si 5 elementos devolverán un tensor de 8 elementos, ¿cómo se supone que debo saber cuántas veces aparece cada elemento? esto es confuso para mí. La documentación oficial tiene un contenido limitado y no hay otro sitio web que lo explique.
En la imagen anterior. Entonces, 5 aparece 2 veces. ¿0 aparece? ¿cuántas veces? ¿Cómo leer esta salida? No tiene sentido para mí.
davy.ai
Desafortunadamente, las opciones de
TORCH.BINCOUNT
,TORCH.UNIQUE
yTORCH.UNIQUE_CONSECUTIVE
no parecen proporcionar una solución directa para contar el número de ocurrencias de cada valor en un gran Tensor de PyTorch. Como se menciona,TORCH.BINCOUNT
devuelve un tensor con diferentes números de elementos cada vez,TORCH.UNIQUE
devuelve solo los valores únicos yTORCH.UNIQUE_CONSECUTIVE
devuelve solo los valores consecutivos únicos, ninguno de los cuales proporciona el recuento completo de cada valor.Un enfoque posible para este problema es usar un objeto
Counter
de Python del módulocollections
. Primero, podemos aplanar el Tensor de PyTorch en una lista de 1D usando los métodosreshape
ytolist
. Luego, podemos crear un objetoCounter
a partir de esta lista y recuperar el recuento de cada elemento usando el métodomost_common
. El siguiente código ilustra este enfoque:Este código crea un Tensor aleatorio de PyTorch con el tamaño especificado, lo aplanza en una lista de 1D usando
reshape
ytolist
, crea un objetoCounter
a partir de esta lista y recupera el recuento de cada elemento usandomost_common
. La salida debería ser una lista de tuplas donde el primer elemento de cada tupla es el valor y el segundo elemento es el conteo de ese valor. Por ejemplo:Este enfoque puede manejar tensores de cualquier tamaño, aunque el uso de memoria puede convertirse en un problema para tensores muy grandes.