Fonction torch.tensor de PyTorch
Manuel de référence PyTorch torch
torch.tensorC'est la fonction principale de PyTorch pour créer des tenseurs. Elle crée un nouveau tenseur en copiant les données et ne préserve pas l'historique de gradient automatique des données d'origine.
C'est l'une des méthodes les plus couramment utilisées pour créer des tenseurs PyTorch et elle convient à la plupart des scénarios.
Définition de fonction
torch.tensor(data, dtype=None, device=None, requires_grad=False, pin_memory=False)
Parameters:
data(tout type) : Les données du tenseur, qui peuvent être une liste Python, un tuple, un tableau NumPy, etc.dtype(torch.dtype, facultatif) : Spécifie le type de données du tenseur, tel quetorch.float32、torch.int64etc.device(torch.device, facultatif) : Spécifie le périphérique sur lequel le tenseur est stocké, tel quetorch.device('cpu')outorch.device('cuda')。requires_grad(bool, facultatif) : Indique si un gradient doit être calculé ; la valeur par défaut estFalse。pin_memory(bool, facultatif) : Indique s'il faut utiliser la mémoire épinglée ; la valeur par défaut estFalse。
Valeur de retour:
torch.TensorRenvoie un tenseur PyTorch.
Exemples d'utilisation
Voici quelques exemples d'utilisation detorch.tensorfonction.
Exemple 1 : Création d'un tenseur à partir d'une liste
Exemple
# Créer un tenseur 1D à partir d'une liste Python
data = [1, 2, 3, 4, 5]
x = torch.tensor(data)
print(x)
print(x.dtype)
La sortie est :
tensor([1, 2, 3, 4, 5]) torch.int64
Dans cet exemple, nous avons créé un tenseur 1D à partir d'une liste Python. PyTorch déduit automatiquement le type de données commeint64。
Exemple 2 : Spécification du type de données
Exemple
# Créer un tenseur de type float32
x = torch.tensor([1.0, 2.0, 3.0], dtype=torch.float32)
print(x)
print(x.dtype)
La sortie est :
tensor([1., 2., 3.]) torch.float32
Dans cet exemple, nous avons explicitement spécifié le type de données du tenseur commefloat32。
Exemple 3 : Création d'un tenseur qui nécessite des gradients
Exemple
# Créer un tenseur qui nécessite le calcul du gradient
x = torch.tensor([1.0, 2.0, 3.0], requires_grad=True)
print(x.requires_grad)
La sortie est :
True
Dans cet exemple, nous avons créé un tenseur qui nécessite le calcul de gradient, ce qui est très utile lors de l'entraînement de réseaux de neurones.
Exemple 4 : Création d'un tenseur à partir d'une liste 2D
Exemple
# Créer un tenseur 2D (matrice) à partir d'une liste 2D
data = [[1, 2, 3], [4, 5, 6]]
x = torch.tensor(data)
print(x)
print(x.shape)
La sortie est :
tensor([[1, 2, 3],
[4, 5, 6]])
torch.Size([2, 3])
Dans cet exemple, nous avons créé un tenseur 2D de 2x3 à partir d'une liste 2D.
Exemple 5 : Création d'un tenseur sur un périphérique CUDA
Exemple
# Vérifier si CUDA est disponible
if torch.cuda.is_available():
# Créer un tenseur sur un périphérique CUDA
x = torch.tensor([1, 2, 3], device='cuda')
print(x.device)
else:
print("CUDA n'est pas disponible")
La sortie est :
cuda:0
Dans cet exemple, nous vérifions si CUDA est disponible, puis créons un tenseur sur le GPU.
Différence entre torch.tensor et torch.as_tensor
torch.tensorettorch.as_tensorLes deux sont utilisés pour créer des tenseurs, mais ils présentent des différences importantes :
torch.tensorCopie toujours les données ; le tenseur créé ne partage pas la mémoire avec les données d'origine.torch.as_tensorPartage les données autant que possible, ne copie pas la mémoire, et ne copie que lorsque c'est nécessaire.
Si vous avez besoin de préserver l'historique autograd ou d'éviter une copie inutile des données, vous pouvez utilisertorch.as_tensor。
Notes
torch.tensorIl copie les données, donc les modifications apportées au tenseur renvoyé n'affecteront pas les données d'origine.- Si vous avez besoin de créer un nouveau tenseur avec la même forme et le même périphérique qu'un autre tenseur, vous pouvez utiliser
torch.zeros_like()outorch.ones_like()。 - Lors de la création d'un tenseur, si vous ne spécifiez pas
dtype, PyTorch déduira automatiquement le type de données.
Autres extensions