2 years ago

https://mp.weixin.qq.com/s/o1Op8Ebly4bF8rWq9qptlA

PyTorch 基础：张量&梯度（本文） 线性回归 & 梯度下降：https://medium.com/jovian-io/linear-regression-with-pytorch-3dde91d60b50

In [4]:
``import torch``

In [2]:
``````# Number
t1 = torch.tensor(4.)
t1
``````
Out[2]:
``tensor(4.)``

4.是 4.0 的缩写。它用来表示你想创建浮点数的 Python（和 PyTorch）。我们可以通过检查张量的 dtype 属性来验证这一点：

In [5]:
``t1.dtype``
Out[5]:
``torch.float32``

In [6]:
``````# Vector
t2 = torch.tensor([1., 2, 3, 4])
t2
``````
Out[6]:
``tensor([1., 2., 3., 4.])``
In [16]:
``````# Matrix
t3 = torch.tensor([[5., 6], [7, 8], [9, 10]])
t3
``````
Out[16]:
``````tensor([[ 5.,  6.],
[ 7.,  8.],
[ 9., 10.]])``````
In [10]:
``````# 3-dimensional array
t4 = torch.tensor([
[[11, 12, 13],
[13, 14, 15]],
[[15, 16, 17],
[12, 18, 19.]]
])
t4
``````
Out[10]:
``````tensor([[[11., 12., 13.],
[13., 14., 15.]],

[[15., 16., 17.],
[12., 18., 19.]]])``````

In [11]:
``t1.shape``
Out[11]:
``torch.Size([])``
In [12]:
``t2.shape``
Out[12]:
``torch.Size([4])``
In [17]:
``t3.shape``
Out[17]:
``torch.Size([3, 2])``
In [18]:
``t4.shape``
Out[18]:
``torch.Size([2, 2, 3])``

In [19]:
``````# Create tensors
x = torch.tensor(3.)

In [20]:
``````# Arithmetic operations
y = w * x + b
y
``````
Out[20]:
``tensor(17., grad_fn=<AddBackward0>)``

In [21]:
``````# Compute derivatives
y.backward()
``````

In [22]:
``````# Display gradients
```dy/dx None dy/dw tensor(3.) dy/db tensor(1.) ```

Numpy 是 Python 中用于数学和科学计算的流行开源库。它支持在大型多维数组上进行高效运算，拥有一个支持多个库的大型生态系统。这些库包括：

PyTorch 并没有重新创造 wheel，而是与 Numpy 很好地交互，以利用它现有的工具和库生态系统。

In [23]:
``````import numpy as np

x = np.array([[1, 2], [3, 4]])
x
``````
Out[23]:
``````array([[1, 2],
[3, 4]])``````

In [24]:
``````# Convert the numpy array to a torch tensor
y = torch.from_numpy(x)
y
``````
Out[24]:
``````tensor([[1, 2],
[3, 4]], dtype=torch.int32)``````

In [25]:
``x.dtype, y.dtype``
Out[25]:
``(dtype('int32'), torch.int32)``

In [26]:
``````# Convert a torch tensor to a numpy array
z = y.numpy()
z
``````
Out[26]:
``````array([[1, 2],
[3, 4]])``````

PyTorch 和 Numpy 之间的互操作性真的非常重要，因为你要用的大部分数据集都可能被读取并预处理为 Numpy 数组。

In [31]:
``````import jovian
jovian.commit()
``````
```--------------------------------------------------------------------------- ModuleNotFoundError Traceback (most recent call last) <ipython-input-31-97223f28e913> in <module>() ----> 1 import jovian 2 jovian.commit() ModuleNotFoundError: No module named 'jovian'```

Jovian 将 notebook 上传到 https://jvn.io (https://jvn.io/)，用以上方式为你的 notebook 捕获 Python 环境并创建可共享的链接。你可以利用这一链接分享自己的作品，让任何人都可以利用 jovian clone 命令轻松复现。Jovian 还拥有一个强大的评论界面，供你和其他人讨论及评论你 notebook 中的某个部分：

PyTorch 中的张量支持很多运算，这里列出的并不详尽。如果你想了解更多关于张量和张量运算的信息，可参考以下地址：

2. 如果「y」是用 torch.tensor 创建的矩阵，矩阵的每个元素都表示为数字张量「x」、「w」和「b」的组合，该怎么办？
3. 如果我们有一个运算链，而不止一个运算，即 y = x * w + b, z = l * y + m, e =c * z + d，该怎么办？调用 e.backward() 会发生什么？

Yunjey Choi，PyTorch Tutorial for Deep Learning Researchers

Jeremy Howard，FastAI development notebooks

In [ ]:
`` ``