pytorch初步学习(一)
最近在学习神经网络以及深度学习,在老师建议下是从pytorch开始入手,但是在直接看到网络也是比较懵的状态,所以购买了一本书籍开始学习一些基础的概念以及参数意义,最开始就先从最简单的书籍上讲解的顺序开始记录下自己学习的过程及理解。
当然首先需要安装环境及配置,安装cuda(前提最好时英伟达显卡),首先在cmd中安装pytorch,创建虚拟环境以及调试确认是否成功,安装anaconda,以及pycharm上的调用环境以及使用,此处默认已经配置完成。欲了解可参考csdn其他大佬的配置过程,或者问我这个小萌新(我自己的安装过程)。
1.数据准备
pytorch提供两种类型的数据抽象,称为张量和变量。张量类似于python数组,可改变大小,数据抽象使得其在GPU和CPU上可以实现简易切换,简单理解就是如此操作时,机器学习算法可以理解不同格式的数据,也就是将一些想要处理的数据变为算法可以认识的语言。以下列出一些常见的张量,以及一些自己参考书籍的一些理解:
- 1:标量(0维张量)
只包含一个元素的张量称为标量,类型通常为FloatTensor或者LongTensor。在学习的时候还没有特别的0维张量,所以只是以包含一个元素的一维张量作为表示 :
import torch
x = torch.rand(10)
print(x.size())
结果为如下:
torch.Size([10])
- 2:向量(1维张量)
向量则类似于python中的数组,是一个元素序列的数组比如示例中的用于存储五个身高:
import torch
high = torch.FloatTensor([1.64,1.70,1.55,1.56,1.78])
print(temp.size())
结果为:
torch.Size([5])
注意此处显示为数量而当只有一个数据的时候显示为该数据。
- 3:矩阵(二维向量)
大多数结构化数据可表示为表或矩阵,资料为boston房价资料,位于包sticik_learn中,在包中方便调用,由代码实现输出具体数字以及其维度为:
import torch
from sklearn.datasets import load_boston#资料为boston房价资料,位于包sticik_learn中
boston = load_boston()
print(boston.data.shape)
print(boston_tensor.size())
print(boston_tensor[:2])
print(boston_tensor[:10:5])
结果为:
(506, 13)#506行,13列
torch.Size([506, 13])
tensor([[6.3200e-03, 1.8000e+01, 2.3100e+00, 0.0000e+00, 5.3800e-01, 6.5750e+00,
6.5200e+01, 4.0900e+00, 1.0000e+00, 2.9600e+02, 1.5300e+01, 3.9690e+02,
4.9800e+00],
[2.7310e-02, 0.0000e+00, 7.0700e+00, 0.0000e+00, 4.6900e-01, 6.4210e+00,
7.8900e+01, 4.9671e+00, 2.0000e+00, 2.4200e+02, 1.7800e+01, 3.9690e+02,
9.1400e+00]], dtype=torch.float64)
tensor([[6.3200e-03, 1.8000e+01, 2.3100e+00, 0.0000e+00, 5.3800e-01, 6.5750e+00,
6.5200e+01, 4.0900e+00, 1.0000e+00, 2.9600e+02, 1.5300e+01, 3.9690e+02,
4.9800e+00],
[2.9850e-02, 0.0000e+00, 2.1800e+00, 0.0000e+00, 4.5800e-01, 6.4300e+00,
5.8700e+01, 6.0622e+00, 3.0000e+00, 2.2200e+02, 1.8700e+01, 3.9412e+02,
5.2100e+00]], dtype=torch.float64)
- 4:3维张量
可以想象,将多个矩阵累加则得到一个3维张量。主要用途呢,当然就是表现类似图像这样的数据。图像的本质可以表示为堆叠到一起的矩阵的数字。即将使用的例子中解释各个数字的意思,代码实现如下:
import numpy as np#所有的开头都要加入torch 前边都已经写了所以这时候一般都是省略
from PIL import Image
panda = np.array(Image.open(‘D:\pytorch书籍源码\DeepLearningwithPyTorch_Code\DLwithPyTorch-master\images\panda.jpg’).resize((224, 224)))
panda_tensor = torch.from_numpy(panda)
print(panda_tensor.size())
plt.imshow(panda)
结果为:
torch.Size([224, 224, 3])
以及一个图片,但是我电脑好像有点问题没法显示,但是没报错所以估计是哪有一点小问题,之后在处理,现在主要是理解各个数字的含义,拿输出来说,前两个数字224,224分别为高和宽,这里第三个数字3为通道数(RGB),简单理解就是为了使图像呈现彩色即三个颜色通道。
- 5:切片张量
切片,类似于python数组切片的模式,在这里是为了切出第n个之前的元素,即 0~(n-1)个,形式:张量名[:n]拿下列代码举例:
sales1 = torch.FloatTensor([1000.0, 323.2, 333.4, 444.5, 1000.0, 323.2, 333.4, 444.5])
sales2 = torch.FloatTensor([1000.0, 323.2, 333.4, 444.5, 1000.0, 323.2, 333.4, 444.5])
print(sales1[:5])#切片张量
print(sales2[:-5])
plt.imshow(panda_tensor[:, :, 0].numpy())#这两个分别为只取图像一个通道(上)和裁剪熊猫头部(下)
plt.imshow(panda_tensor[25:175,60:130,0].numpy())
结果为:
tensor([1000.0000, 323.2000, 333.4000, 444.5000, 1000.0000])
tensor([1000.0000, 323.2000, 333.4000])
由两个输出那可知,第一个取出了前5个,第二个取出了倒数第5个之前的。最下边两行表示只取图像一个通道(上)和裁剪熊猫头部(下),所以下边那行代码为尺寸比例。
剩下的见下篇。。。