es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿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?

Tags:  ,

Answer

  1. Avatar for 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:

    def get_prompt_token_fn(self):
        if self.prompt_ids:
            return lambda x: torch.any(torch.tensor([x == p for p in self.prompt_ids]))
        else:
            return lambda x: (x>=self.id_offset)&(x<self.id_offset+self.length)
    

    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 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 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 valor.>

Comments are closed.