这些日子,借着新版本 opencv4.0库,把以往工程学的图像处理知识都温习一遍;然后花了2个月左右写了一个“可视化算法平台”,将大部分的算法,都集成到了 平台里面。
最近决定好好整理、并认真学习一下 pytorch框架,
对于深度学习,我目前只是用 Yolov3和FasterRCNN等模型库,但是还没有去深入学习一个框架。最近正好有时间和心情,我计划三步走:
先熟练pytorch库,
然后学习构建深度学习模型,
最后就是优化现有的模型。
首先从 官网下载 pytorch.
https://download.pytorch.org/libtorch/cu100/libtorch-win-shared-with-deps-latest.zip
pip3 install https://download.pytorch.org/whl/cu100/torch-1.1.0-cp37-cp37m-win_amd64.whlpip3 install https://download.pytorch.org/whl/cu100/torchvision-0.3.0-cp37-cp37m-win_amd64.whl
我比较喜欢用 C++写代码,毕竟写了10年了,容易用在高性能上。虽然写了3年python,但仍然热爱 C/C++,因为我可以看到底层代码。我正好可以用 python 和 C++对照着 翻译代码。
我编译pytorch的 demo,发现 visual studio 2015 有一堆bug. 该死的 C++17语法,导致很多代码无法编译。没办法,安装 visual studio 2017。仍然还有一堆bug.
我解决了一些重要的bug:
我直接用
::std:: 替换 std:: 解决
还有就是 using 语句 导致的一些 异常,可以用等价的 typedef语法解决。
……
然后就是学习 tutorial.
第一个demo,官网
https://pytorch.org/tutorials/beginner/blitz/tensor_tutorial.html#sphx-glr-beginner-blitz-tensor-tutorial-py
import torchx = torch.empty(5, 3) #没初始化的 张量print(x)x = torch.rand(5, 3) #随机初始化的 张量print(x)x = torch.zeros(5, 3, dtype=torch.long) #初始化0的 张量print(x)x = torch.tensor([5.5, 3]) #直接从数据初始化张量print(x)x = x.new_ones(5, 3, dtype=torch.double) #复制x属性,初始化张量print(x)x = torch.randn_like(x, dtype=torch.float) # override dtypey = torch.rand(5, 3)print(x + y) #加法print(torch.add(x, y)) #第二种加法result = torch.empty(5, 3) #第三种加法torch.add(x, y, out=result)print(result)y.add_(x) #第四种, 就地加法,修改 yprint(y)print(x[:, 1]) #切片语法……
翻译成 C++,
vector sizes; at::TensorOptions opts; at::Tensor t = torch::ones( at::IntArrayRef(sizes) ,opts);其他创建方法类似
C++支持的 创建方法:
然后我用 可视化平台编译成几个插件,测试一下:
其中,我遇到一个坑,Qt 库对 slots 冲突:
我用很简单方法解决,就是 把 业务逻辑、算法全部写在 库里,解决冲突问题。
由于 对 pytorch不是很熟,凭借自己这些年对C++的理解和软件工程能力,我将好好学习、整理,把torch的功能用可视化平台,边学边集成。
万事开头难,迈出学习pytorch的第一步。