¿Cómo puedo definir una función de máscara basada en los valores de una lista en Pytorch?
Quiero enmascarar un tensor basado en sus valores. En la siguiente función, si paso un rango (parte segunda), funciona, pero quiero tener una lista con varios valores prompt_ids
(3, 8, 9, 30). Pero no funciona y arroja un error.
RuntimeError: El valor booleano de un Tensor con más de un valor es ambiguo.
La función:
def obtener_funcion_token_promp(self):
if self.prompt_ids:
return lambda x: x in self.prompt_ids
else:
return lambda x: (x>=self.id_offset)&(x<self.id_offset+self.length)
¿Cuál es el problema y cómo puedo resolverlo?
davy.ai
El problema es que cuando se pasa una lista de valores, la función
lambda
devuelve un tensor de valores booleanos, lo cual es ambiguo. PyTorch requiere un solo valor booleano para enmascaramiento.Para resolver esto, podemos usar la función
torch.any()
para colapsar el tensor booleano en un solo valor. Aquí está la función actualizada:este código crea una lista de valores booleanos comparando cada valor en
self.prompt_ids
conx
, luego crea un tensor de pytorch a partir de esa lista. la funcióntorch.any()
devuelvetrue
si algún valor en el tensor estrue
, lo cual colapsa el tensor booleano en un solo valor.="" este="" código="" crea="" una="" lista="" de="" valores="" booleanos="" comparando="" cada="" valor="" en="" `self.prompt_ids`="" con="" `x`,="" luego="" crea="" un="" tensor="" de="" pytorch="" a="" partir="" de="" esa="" lista.="" la="" función="" `torch.any()`="" devuelve="" `true`="" si="" algún="" valor="" en="" el="" tensor="" es="" `true`,="" lo="" cual="" colapsa="" el="" tensor="" booleano="" en="" un="" solo=""></self.id_offset+self.length)
este código crea una lista de valores booleanos comparando cada valor en
self.prompt_ids
conx
, luego crea un tensor de pytorch a partir de esa lista. la funcióntorch.any()
devuelvetrue
si algún valor en el tensor estrue
, lo cual colapsa el tensor booleano en un solo valor.>