PyTorch für Deep Learning. Ian Pointer
umfasst. Wenn Sie es mit flat_tensor.reshape(3,28,28) versuchen, werden Sie einen Fehler wie diesen sehen:
RuntimeError Traceback (most recent call last)
<ipython-input-26-774c70ba5c08> in <module>()
----> 1 flat_tensor.reshape(3,28,28)
RuntimeError: shape '[3, 28, 28]' is invalid for input of size 784
Sie fragen sich jetzt vielleicht, worin der Unterschied zwischen view() und reshape() besteht. Die Antwort ist, dass view() als ein Abbild des ursprünglichen Tensors funktioniert – wenn also die zugrunde liegenden Daten geändert werden, wird sich auch das Abbild ändern (und umgekehrt). Allerdings kann view() Fehler verursachen, wenn das erforderliche Abbild nicht kontinuierlich ist; d.h., wenn der Tensor nicht denselben Speicherblock teilt, den er belegen würde, wenn ein neuer Tensor mit der erforderlichen Form von Grund auf erstellt werden würde. Wenn dies geschieht, müssen Sie tensor.contiguous() aufrufen, bevor Sie view() verwenden können. Da reshape() jedoch all das hinter den Kulissen erledigt, empfehle ich im Allgemeinen die Verwendung von reshape() anstelle von view().
Schließlich müssen Sie möglicherweise die Dimensionen eines Tensors neu anordnen. Dies wird Ihnen wahrscheinlich bei Bildern begegnen, da diese oft in Form von [Höhe, Breite, Kanal]-Tensoren gespeichert sind. PyTorch sieht jedoch die Anordnung [Kanal, Höhe, Breite] vor, um diese zu verarbeiten. Sie können die Funktion permute() nutzen, um diesem Problem auf eine ziemlich einfache Art und Weise zu begegnen:
hwc_tensor = torch.rand(640, 480, 3)
chw_tensor = hwc_tensor.permute(2,0,1)
chw_tensor.shape
> torch.Size([3, 640, 480])
Hier haben wir gerade die Funktion permute auf einen [640,480,3]-Tensor angewendet, wobei die Argumente den Indizes der Dimensionen des Tensors entsprechen. Dadurch haben wir erreicht, dass die letzte Dimension (2, da der Index bei 0 beginnt) an der ersten Stelle unseres Tensors steht, gefolgt von den restlichen zwei Dimensionen in ihrer ursprünglichen Reihenfolge.
Tensor-Broadcasting
An NumPy angelehnt, ermöglicht Broadcasting die Durchführung von Operationen zwischen einem Tensor und einem kleineren Tensor. Rückwärts ausgehend von den letzten Dimensionen, können Sie über zwei Tensoren broadcasten, wenn:
die beiden Dimensionen identisch sind,
eine der Dimensionen 1 ist.
Hier ein Beispiel:
a = torch.ones(1,2,2)
> tensor([[[1., 1.],
[1., 1.]]])
b = torch.ones(1,2)
> tensor([[1., 1.]])
c = a + b
> tensor([[[2., 2.],
[2., 2.]]])
c.shape
> torch.Size([1, 2, 2])
Wenn wir Tensor b zu Tensor a addieren, erhalten wir als Ergebnis Tensor c. Dabei wurde der kleinere Tensor so erweitert, dass er die Dimensionen des größeren Tensors abdeckt. Würden wir versuchen, einen [2,2]-Tensor zu einem [3,3]-Tensor zu addieren, erhielten wir diese Fehlermeldung:
The size of tensor a (2) must match the size of
tensor b (3) at non-singleton dimension 1
Wir könnten jedoch problemlos einen [1,3]-Tensor zu einem [3,3]-Tensor addieren. Das Broadcasting ist ein praktisches kleines Feature, das den Code kürzer macht und oft schneller ist, als den Tensor selbst manuell zu erweitern.
Das ist alles, was Sie zunächst in puncto Tensoren benötigen, um anzufangen! Wir werden später im Verlauf des Buchs noch weitere Operationen aufgreifen. Widmen wir uns nun Kapitel 2.
Zusammenfassung
Ob in der Cloud oder auf Ihrem lokalen Rechner, Sie sollten jetzt PyTorch installiert haben. Ich habe den grundlegenden Baustein der Bibliothek, den Tensor, vorgestellt, und Sie haben einen kurzen Blick auf Jupyter Notebook geworfen. Das ist alles, was Sie zum Einstieg benötigen! Im nächsten Kapitel verwenden Sie alles, was Sie bisher gesehen haben, um mit dem Aufbau neuronaler Netze und der Klassifizierung von Bildern zu beginnen. Vergewissern Sie sich also, dass Sie mit Tensoren und Jupyter vertraut sind, bevor Sie weitermachen.
Weiterführende Literatur
Dokumentation zum Jupyter-Projekt (https://jupyter.org/documentation)
PyTorch-Dokumentation (https://pytorch.org/docs/stable)
AWS Deep Learning AMIs (https://oreil.ly/G9Ldx)
Azure Data Science Virtual Machines (https://oreil.ly/YjzVB)
Google Deep Learning VM Image (https://oreil.ly/NFpeG)
PyTorch-Ökosystem (https://pytorch.org/ecosystem/)
PyTorch-Ressourcen (https://pytorch.org/resources/)
Конец ознакомительного фрагмента.
Текст предоставлен ООО «ЛитРес».
Прочитайте эту книгу целиком, купив полную легальную версию на ЛитРес.
Безопасно оплатить книгу можно банковской картой Visa, MasterCard, Maestro, со счета мобильного телефона, с платежного терминала, в салоне МТС или Связной, через PayPal, WebMoney, Яндекс.Деньги, QIWI Кошелек, бонусными картами или другим удобным Вам способом.