Читать книгу PyTorch für Deep Learning - Ian Pointer - Страница 37
Tensoren
ОглавлениеEin Tensor ist sowohl ein Container für Zahlen als auch ein Regelsatz, der Transformationen zwischen Tensoren definiert, die neue Tensoren erzeugen. Es ist wahrscheinlich am einfachsten für uns, Tensoren als mehrdimensionale Arrays aufzufassen. Jeder Tensor hat einen Rang, der seinem Dimensionsraum entspricht. Ein einfacher Skalar (z.B. 1) kann als Tensor mit dem Rang 0 dargestellt werden, ein Vektor besitzt den Rang 1, eine n × n-Matrix den Rang 2 und so weiter. Im vorigen Beispiel haben wir einen Tensor mit Zufallswerten vom Rang 2 durch die Verwendung von torch.rand() erstellt. Wir können sie auch aus Listen erzeugen:
x = torch.Tensor([[0,0,1],[1,1,1],[0,0,0]])
x
>tensor([[0, 0, 1],
[1, 1, 1],
[0, 0, 0]])
Wir können ein Element in einem Tensor ändern, indem wir die gewöhnliche Python-Indizierung verwenden:
x[0][0] = 5
>tensor([[5, 0, 1],
[1, 1, 1],
[0, 0, 0]])
Sie können spezielle vordefinierte Funktionen einsetzen, um bestimmte Arten von Tensoren zu erzeugen. Insbesondere die Funktionen ones() und zeroes() erzeugen Tensoren, die mit Einsen bzw. mit Nullen gefüllt sind:
torch.zeros(2,2)
> tensor([[0., 0.],
[0., 0.]])
Auch mathematische Standardoperationen können mit Tensoren durchgeführt werden (z.B. können zwei Tensoren addiert werden):
torch.ones(1,2) + torch.ones(1,2)
> tensor([[2., 2.]])
Und wenn Sie einen Tensor vom Rang 0 haben, können Sie sich den Wert des Elements mit der Funktion item() ausgeben lassen:
torch.rand(1).item()
> 0.34106671810150146
Tensoren können sowohl auf der CPU als auch auf der GPU eingesetzt und mit der Funktion to() zwischen den Komponenten kopiert werden:
cpu_tensor = tensor.rand(2)
cpu_tensor.device
> device(type='cpu')
gpu_tensor = cpu_tensor.to("cuda")
gpu_tensor.device
> device(type='cuda', index=0)