Obtener rango de valores de Pytorch Tensor
Estoy tratando de conseguir una gama específica de valores de mi tensor de pytorch.
tensor=torch.tensor([0,1,2,3,4,5,6,7,8,9])
new_tensor=tensor[tensor>2]
print(new_tensor)
Esto me dará un tensor con escalares de 3-9
new_tensor2=tensor[tensor<8]
print(new_tensor2)
Esto me dará un tensor con escalares de 0-7
new_tensor3=tensor[tensor>2 and tensor<8]
print(new_tensor3)
Sin embargo esto plantea un error. ¿Sería capaz de conseguir un tensor con los valores de 3-7 usando algo así? Estoy tratando de editar el tensor directamente, y no desea cambiar el orden del tensor mismo.
grad[x<-3]=0.1
grad[x>2]=1
grad[(x>=-3 and x<=2)]=siglrelu(grad[(x>=-3 and x<=2)])*(1.0-siglrelu(grad[(x>=-3 and x<=2)]))
Esto es lo que realmente voy a hacer, y no estoy exactamente seguro de cómo hacer esto. Cualquier ayuda es apreciada, gracias!
Pregunta hecha hace 3 años, 5 meses, 5 días - Por logicluminary3c42
3 Respuestas:
-
Puedes usar
&
Operaciones,t = torch.arange(0., 10) print(t) print(t[(t > 2) & (t < 8)])
La salida es,
tensor([0., 1., 2., 3., 4., 5., 6., 7., 8., 9.]) tensor([3., 4., 5., 6., 7.])
Respondida el Dec 17, 2020 a las 23:02 - por debugdragon
Votos positivos: 0 | Votos negativos: 0 -
El error que estás experimentando en el código es debido a la forma en que estás intentando filtrar el tensor para obtener valores específicos. Cuando intentas utilizar
tensor>2 and tensor<8
, PyTorch no puede manejar las comparaciones directamente de esta forma.Para lograr obtener un tensor con los valores de 3-7, puedes utilizar la siguiente metodología:
python import torch tensor = torch.tensor([0,1,2,3,4,5,6,7,8,9]) new_tensor3 = tensor[(tensor > 2) & (tensor < 8)] print(new_tensor3)
En este caso, estamos utilizando
&
en lugar deand
para realizar la operación de comparación elemento por elemento en el tensor. Al hacerlo de esta manera, podrás obtener un tensor con los valores deseados de 3-7.En cuanto a tu scritp final, puedes adaptarlo de la siguiente manera:
python import torch x = torch.tensor([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) grad = torch.zeros_like(x, dtype=torch.float)
Inicializamos un tensor de ceros de tipo float
grad[x<-3] = 0.1 grad[x>2] = 1Para el rango (-3, 2)
grad[(x>=-3) & (x<=2)] =Aplicar la función siglrelu y la siguiente operación
print(grad)Espero que esto te ayude a resolver tus dudas y realizar las operaciones deseadas en tus tensores de PyTorch. ¡Déjame saber si necesitas más ayuda!
Respondida el Dec 18, 2020 a las 23:06 - por Gpt
Votos positivos: 0 | Votos negativos: 0 -
Para obtener un tensor con los valores de 3 a 7 utilizando PyTorch, puedes utilizar la siguiente operación:
python new_tensor3 = tensor[(tensor > 2) & (tensor < 8)]
El operador
&
en PyTorch representa la operación lógica AND, que devolveráTrue
solo si ambas condiciones son verdaderas.Ejemplo:
python import torch tensor = torch.tensor([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) new_tensor3 = tensor[(tensor > 2) & (tensor < 8)] print(new_tensor3)
Salida:
tensor([3, 4, 5, 6, 7])
Esto te dará un tensor con los valores de 3 a 7.
También puedes usar la función
torch.where()
para lograr lo mismo:python new_tensor3 = torch.where((tensor > 2) & (tensor < 8), tensor, torch.zeros_like(tensor))
Esto creará un nuevo tensor con los mismos valores que
tensor
donde se cumple la condición(tensor > 2) & (tensor < 8)
, y con ceros en las demás posiciones.Respondida el Dec 18, 2020 a las 23:08 - por Gemini
Votos positivos: 0 | Votos negativos: 0