<jupyter_start><jupyter_text>注意，函数名后面带下划线_ 的函数会修改Tensor本身。例如，x.add_(y)和x.t_()会改变 x，但x.add(y)和x.t()返回一个新的Tensor， 而x不变。<jupyter_code># Tensor的选取操作与Numpy类似
x[:,1]
x[:,1].size()
a=t.ones(5) # 新建一个全1的Tensor
a
b=a.numpy() # Tensor -> Numpy
b
import numpy as np
a=np.ones(5)
b=t.from_numpy(a) # Numpy->Tensor
print(a)
print(b)<jupyter_output>[1. 1. 1. 1. 1.]
tensor([1., 1., 1., 1., 1.], dtype=torch.float64)<jupyter_text>Tensor和numpy对象共享内存，所以他们之间的转换很快，而且几乎不会消耗什么资源。但这也意味着，如果其中一个变了，另外一个也会随之改变。<jupyter_code>b.add_(1) # 以`_`结尾的函数会修改自身
print(a)
print(b) # Tensor和Numpy共享内存<jupyter_output>[2. 2. 2. 2. 2.]
tensor([2., 2., 2., 2., 2.], dtype=torch.float64)<jupyter_text>Tensor可通过.cuda 方法转为GPU的Tensor，从而享受GPU带来的加速运算。<jupyter_code># 在不支持CUDA的机器下，下一步不会运行
if t.cuda.is_available():
    x=x.cuda()
    y=y.cuda()
    x+y<jupyter_output><empty_output><jupyter_text>Autograd: 自动微分深度学习的算法本质上是通过反向传播求导数，而PyTorch的`Autograd`模块则实现了此功能。在Tensor上的所有操作，Autograd都能为它们自动提供微分，避免了手动计算导数的复杂过程。`autograd.Variable`是Autograd中的核心类，它简单封装了Tensor，并支持几乎所有Tensor有的操作。Tensor在被封装为Variable之后，可以调用它的`.backward`实现反向传播，自动计算所有梯度。Variable主要包含三个属性。- `data`：保存Variable所包含的Tensor- `grad`：保存`data`对应的梯度，`grad`也是个Variable，而不是Tensor，它和`data`的形状一样。- `grad_fn`：指向一个`Function`对象，这个`Function`用来反向传播计算输入的梯度，具体细节会在下一章讲解。<jupyter_code>from torch.autograd import Variable
# 使用Tensor新建一个Variable
x=Variable(t.ones(2,2),requires_grad=True)
x
y=x.sum()
y
y.grad_fn
y.backward() # 反向传播,计算梯度
# y = x.sum() = (x[0][0] + x[0][1] + x[1][0] + x[1][1])
# 每个值的梯度都为1
x.grad<jupyter_output><empty_output><jupyter_text>注意：grad在反向传播过程中是累加的(accumulated)，这意味着每一次运行反向传播，梯度都会累加之前的梯度，所以反向传播之前需把梯度清零。<jupyter_code>y.backward()
x.grad
y.backward()
x.grad
# 以下划线结束的函数是inplace操作，就像add_
x.grad.data.zero_()
y.backward()
x.grad<jupyter_output><empty_output><jupyter_text>Variable和Tensor具有近乎一致的接口，在实际使用中可以无缝切换。<jupyter_code>x=Variable(t.ones(4,5))
y=t.cos(x)
x_tensor_cos=t.cos(x.data)
print(y)
x_tensor_cos<jupyter_output>tensor([[0.5403, 0.5403, 0.5403, 0.5403, 0.5403],
        [0.5403, 0.5403, 0.5403, 0.5403, 0.5403],
        [0.5403, 0.5403, 0.5403, 0.5403, 0.5403],
        [0.5403, 0.5403, 0.5403, 0.5403, 0.5403]])
{'fraction_non_alphanumeric': 0.1781528363806845, 'fraction_numerical': 0.06704172526957337, 'mean_word_length': 7.7818930041152266, 'pattern_counts': {'":': 0, '<': 22, '<?xml version=': 0, '>': 24, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '6', 'dir': 'jupyter-structured-clean-dedup', 'id': '428687', 'license': 'MIT', 'n_tokens_mistral': 1379, 'n_tokens_neox': 1415, 'n_words': 107, 'path': 'tutorials/01-basics/quickstart.ipynb', 'repo_name': 'awesome-archive/LIS-YNP', 'size': '2133'}