pytorch时facebook提供的一个基于python的深度学习开源框架。其有两个来源,其一是Torch,Torch最早是基于2002年的一个基于Lua的神经网络库。另一个来源是2015年日本创建的Chainer。Chainer是最早提供动态图计算的神经网络库之一。
(这本书是19年的,应该会有一些不同,如有不同望留言指出,感谢)
在使用TensorFlow时,先建立神经网络结构的图形表示然后再在该图形上执行操作。TensorFlow使用静态图(2.0版本之前)。
在TensorFlow2.0版本之后添加了 eager execution,使得其工作原理和PyTorch相似。
Keras最初支持TeaNo和TensorFlow现在还支持MXNet。其目前为TensorFlow的一个单独部分(tf.keras)。
斜体:术语、UTL、电子邮件地址、文件名和文件扩展名。
等宽:用于程序列表,以及在段落中引用程序元素,如变量或函数名、数据库、数据类型、环境变量、语句和关键字。
等宽加粗:显示用户应按字面意思键入的命令或其他文本。
等宽斜体:显示应替换为用户提供的值或由上下文确定的值的文本。
(包括代码示例和练习)可在以下网址下载:https://github.com/falloutdurham/beginners-pytorch-deep-learning。
书中建议使用云资源(如果没有相应资源不要配置):Amazon Web Services, Google Cloud, or Microsoft Azure。
深度学习box的核心,(书中说到由于挖矿gpu涨价、然后这种情况似乎在消退(其实没有))。书中建议使用 NVIDIA GeForce RTX 2080 Ti(我实验室也是这种)。
书中推荐Z370系列。也提到了CPU不行话可能也会成为深度学习的瓶颈。
建议至少64GB DDR4的主存
建议4TB 用于储存不活跃的数据。
如果刚开始学习DL不建议使用云端的Tesla V100 。可以使用更便宜(甚至免费)的K-80。并且使用云端更容易配置。
Colaboratory(或Colab)是一个基本免费、零安装要求的定制Jupyter笔记本环境。只需要一个谷歌账号即可。
在AWS上创建深度学习box步骤:
需要下载anaconda和对应版本的CUDA。详情自行搜索(因为实验室安装好了anaconda和CUDA)。
打开anaconda prompt。
conda create -n py37pt11 python=3.7 # 安装python环境
conda activate py37pt11 # 激活环境
pip install --upgrade pip # 更新pip
conda install pytorch==1.1.0 torchvision==0.3.0 cudatoolkit=10.0 # 安装pytorch1.1
不同版本pytorch可查看这里。
安装后在python查看是否安装成功。
打开anaconda prompt
pip install jupyter notebook
参考这里对服务器进行配置
输入
jupyter notebook --ip=0.0.0.0
在浏览器上输入ip:8888(也可以是自定义端口,但需要注意有些浏览器中默认奇怪的端口无法访问)
在图中选中红框创建。
输入
import torch
print(torch.cuda.is_available())
print(torch.rand(2,2))
Tensor既是数字的容器也是定义成新张量之间张量转换的一组规则。每个Tensor都有一个对应其维空间的rank(阶)。指的是Tensor的基底数。从下图就可以比较形象的感受。
这里我们创建一个二阶Tensor
x = torch.tensor([[0,0,1],[1,1,1],[0,0,0]])
x[0][0] = 5
torch.ones(1,2) + torch.ones(1,2)
torch.zeros(2,2)
print(torch.tensor(1),torch.tensor(1).item())
cpu_t = torch.rand(2,2)
print(cpu_t.device)
gpu_t = cpu_t.to("cuda")
print(gpu_t.device)
这里介绍一部分运算。
long_t = torch.tensor([2,3])
print("long_t type is {}".format(long_t.type()))
float_t = long_t.to(dtype=torch.float32)
print("float_t type is {}".format(float_t.type()))
3. tensor.function_()
很多对tensor的操作会让电脑重新开辟出一个空间用于储存张量,为了节省空间可以在原funciton下加一个"_"
4. 更改张量形状(reshape)
比如MINST数据集是2828格式,再输入神经网络时需要128*28的格式。
可以使用view()或者reshape()。
书中作者推荐使用reshape(),因为view()在原数据发生变化时也会变化,或者当数据不连续时会报错,这里的数据不连续指的是数据储存不连续。
如果详细了解可以看这里
hwc_t = torch.rand(648,480,3)
chw_t = hwc_t.permute(2,0,1)
print(hwc_t.shape,chw_t.shape)