.. DO NOT EDIT. .. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. .. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: .. "beginner/examples_tensor/polynomial_tensor.py" .. LINE NUMBERS ARE GIVEN BELOW. .. only:: html .. note:: :class: sphx-glr-download-link-note Click :ref:`here ` to download the full example code .. rst-class:: sphx-glr-example-title .. _sphx_glr_beginner_examples_tensor_polynomial_tensor.py: PyTorch: Tensors ---------------- A third order polynomial, trained to predict :math:`y=\sin(x)` from :math:`-\pi` to :math:`pi` by minimizing squared Euclidean distance. This implementation uses PyTorch tensors to manually compute the forward pass, loss, and backward pass. A PyTorch Tensor is basically the same as a numpy array: it does not know anything about deep learning or computational graphs or gradients, and is just a generic n-dimensional array to be used for arbitrary numeric computation. The biggest difference between a numpy array and a PyTorch Tensor is that a PyTorch Tensor can run on either CPU or GPU. To run operations on the GPU, just cast the Tensor to a cuda datatype. .. GENERATED FROM PYTHON SOURCE LINES 20-64 .. rst-class:: sphx-glr-script-out .. code-block:: none 99 463.81201171875 199 312.108154296875 299 211.08497619628906 399 143.78140258789062 499 98.92195129394531 599 69.00719451904297 699 49.04833984375 799 35.724693298339844 899 26.82526397705078 999 20.877582550048828 1099 16.900102615356445 1199 14.238385200500488 1299 12.455989837646484 1399 11.26158618927002 1499 10.46059799194336 1599 9.923055648803711 1699 9.561992645263672 1799 9.319270133972168 1899 9.15597152709961 1999 9.045997619628906 Result: y = 0.009059899486601353 + 0.8446162343025208 x + -0.0015629848930984735 x^2 + -0.0916057676076889 x^3 | .. code-block:: default import torch import math dtype = torch.float device = torch.device("cpu") # device = torch.device("cuda:0") # Uncomment this to run on GPU # Create random input and output data x = torch.linspace(-math.pi, math.pi, 2000, device=device, dtype=dtype) y = torch.sin(x) # Randomly initialize weights a = torch.randn((), device=device, dtype=dtype) b = torch.randn((), device=device, dtype=dtype) c = torch.randn((), device=device, dtype=dtype) d = torch.randn((), device=device, dtype=dtype) learning_rate = 1e-6 for t in range(2000): # Forward pass: compute predicted y y_pred = a + b * x + c * x ** 2 + d * x ** 3 # Compute and print loss loss = (y_pred - y).pow(2).sum().item() if t % 100 == 99: print(t, loss) # Backprop to compute gradients of a, b, c, d with respect to loss grad_y_pred = 2.0 * (y_pred - y) grad_a = grad_y_pred.sum() grad_b = (grad_y_pred * x).sum() grad_c = (grad_y_pred * x ** 2).sum() grad_d = (grad_y_pred * x ** 3).sum() # Update weights using gradient descent a -= learning_rate * grad_a b -= learning_rate * grad_b c -= learning_rate * grad_c d -= learning_rate * grad_d print(f'Result: y = {a.item()} + {b.item()} x + {c.item()} x^2 + {d.item()} x^3') .. rst-class:: sphx-glr-timing **Total running time of the script:** ( 0 minutes 0.327 seconds) .. _sphx_glr_download_beginner_examples_tensor_polynomial_tensor.py: .. only:: html .. container:: sphx-glr-footer sphx-glr-footer-example .. container:: sphx-glr-download sphx-glr-download-python :download:`Download Python source code: polynomial_tensor.py ` .. container:: sphx-glr-download sphx-glr-download-jupyter :download:`Download Jupyter notebook: polynomial_tensor.ipynb ` .. only:: html .. rst-class:: sphx-glr-signature `Gallery generated by Sphinx-Gallery `_