前言
理论知识对于 AI 算法工程师极其重要。敲代码只是思路的一个实现过程。这里的「算法」和计算机 CS 的「算法」还不太一样,AI 算法是偏数学推导的,所以数学底子还是需要点的,学的越深,要求越高。面试的时候,很少让手写代码,90% 都是在问模型抠算法细节。
快速入门教程
https://morvanzhou.github.io/tutorials/machine-learning/torch/
Tensor
张量是对矢量和矩阵向潜在的更高维度的泛化,表示为基本数据类型的 n 维数组。
张量中的每个元素都具有相同的数据类型,且该数据类型一定是已知的。形状,即张量的维数和每个维度的大小,可能只有部分已知。
Note
(1)任何以“_”结尾的操作都会用结果替换原变量
例如: x.copy_(y)
, x.t_()
, 都会改变 x
.
(2)Torch Tensor与NumPy数组共享底层内存地址,修改一个会导致另一个的变化。
(3)所有的 Tensor 类型默认都是基于CPU, CharTensor 类型不支持到
NumPy 的转换.
(4)Tensor
和 Function
互相连接并生成一个非循环图,它表示和存储了完整的计算历史。
每个张量都有一个.grad_fn
属性,这个属性引用了一个创建了Tensor
的Function
(除非这个张量是用户手动创建的,即,这个张量的grad_fn是
None)
如果需要计算导数,你可以在Tensor
上调用.backward()
。
如果Tensor
是一个标量(即它包含一个元素数据)则不需要为backward()
指定任何参数,
但是如果它有更多的元素,你需要指定一个gradient
参数来匹配张量的形状。
(5)torch.nn
只支持小批量输入。整个 torch.nn
包都只支持小批量样本,而不支持单个样本。例如,nn.Conv2d
接受一个4维的张量,每一维分别是sSamples nChannels Height Width(样本数通道数高宽)如果你有单个样本,只需使用 `input.unsqueeze(0)
来添加其它的维数
(6)output为网络的输出,target为实际值
(7)torch.view()与 np.reshape()的区别:
效果一样,reshape()操作nparray,view()操作tensor
view()只能操作contiguous的tensor,且view后的tensor和原tensor共享存储,reshape()对于是否contiuous的tensor都可以操作。
(8)
1 | import matplotlib.pyplot as plt |
img的格式为(channels,imagesize,imagesize),plt.imshow在现实的时候输入的是(imagesize,imagesize,channels) 因此由np.transpose函数进行转换
np.transpose函数理解 常用于图片翻转
(9)在张量创建时,通过设置 requires_grad 标识为Ture来告诉Pytorch需要对该张量进行自动求导,PyTorch会记录该张量的每一步操作历史并自动计算
卷积神经网络快速回顾 其中GoogLeNet (Inception) 、ResNet(跳连接)仔细看看
(10)MNIST数据集手写数字识别
1 | import torch |
其中 PyTorch中的nn.Conv1d与nn.Conv2d
tips:
- 在PyTorch中,池化操作默认的
stride
大小与卷积核的大小一致; - 如果池化核的大小为一个方阵,则仅需要指明一个数,即
kernel_size
参数为常数n,表示池化核大小为n x n
。
question
- window下 tensorboard不显示相应的网络结构以及数据
解决方案https://www.cnblogs.com/tengge/p/6376073.html
tips:路径中不能存在中文路径