一、PyTorch框架介绍
编辑
PyTorch是在2017年1月由Facebook推出的。它是经典机器学习库Torch框架的一个端口,主要编程语言为python。PyTorch“曾经”的优点是动态图,现在的优点是开源代码和开源社区。
PyTorch是一个年轻的框架。2017年1月28日,PyTorch 0.1版本正式发布,这是Facebook公司在机器学习和科学计算工具Torch的基础上,针对Python语言发布的全新的深度学习工具包。PyTorch类似NumPy,并且支持GPU,有着更高级而又易用的功能,可以用来快捷地构建和训练深度神经网络。一经发布,PyTorch便受到深度学习和开发者们广泛关注和讨论。经过一年多的发展,目前PyTorch已经成为机器学习和深度学习者重要的研究和开发工具之一。
二、tensor(张量)的属性
张量是PyTorch里的基本运算单位,与numpy的ndarray相同都表示一个多维的矩阵。与ndarray最大的区别在于Tensor能使用GPU加速,而ndarray只能用在CPU上。
1、导入torch库
import torch a = torch.tensor([1,2,3],dtype=int) b = torch.tensor([4,5,6],dtype=float) print(a) print(a.dtype) print(b) //结果 //tensor([1, 2, 3]) //torch.int64 64位的int类型 //tensor([4., 5., 6.], dtype=torch.float64)
2、数据的维度
tensor = torch.tensor([[1,2,3],[4,5,6]])
print(tensor.ndim)
//结果
//2
3、数据的形状
tensor = torch.tensor([[1,2,3],[4,5,6]])
print(tensor.shape)
print(tensor.size())
//结果
//torch.Size([2, 3])
//torch.Size([2, 3])
4、基础运算
sample = torch.rand(3, 2) print(sample) # 求总和 print(torch.sum(sample)) # 求最小值 print(torch.min(sample)) # 求最小值所在的位置(索引) print(torch.argmin(sample)) # 求最大值所在的位置(索引) print(torch.argmax(sample)) # 求平均值 print(torch.mean(sample)) # 求中位数 print(torch.median(sample)) # 求开方 print(torch.sqrt(sample)) # 求平方 print(sample ** 2) //结果 tensor([[0.9740, 0.4381], [0.9116, 0.7061], [0.9465, 0.0322]]) tensor(4.0085) tensor(0.0322) tensor(5) tensor(0) tensor(0.6681) tensor(0.7061) tensor([[0.9869, 0.6619], [0.9548, 0.8403], [0.9729, 0.1793]]) tensor([[0.9487, 0.1919], [0.8310, 0.4986], [0.8960, 0.0010]])
三、数据生成
1、生成数据集
import torch a = torch.tensor([1,2,3],dtype=int) b = torch.tensor([4,5,6],dtype=float) print(a) print(a.dtype) print(b) //结果 //tensor([1, 2, 3]) //torch.int64 64位的int类型 //tensor([4., 5., 6.], dtype=torch.float64)
2、读取数据集
def load_array(data_arrays, batch_size, is_train=True): #@save # 构造一个PyTorch数据迭代器 # torch.utils.data.TensorDataset(Dataset):包装数据和目标张量的数据集,直接传入张量参数即可(*tensor) # 该类通过每一个 tensor 的第一个维度进行索引。因此,该类中的 tensor 第一维度必须相等。 dataset = data.TensorDataset(*data_arrays) # 通过DataLoader类从dataset中选取数据,每次读取大小为batch_size return data.DataLoader(dataset, batch_size, shuffle=is_train) batch_size = 10 # 传入张量数组,返回一个可迭代的张量组 data_iter = load_array((features, labels), batch_size)