![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
pytorch
文章平均质量分 66
hyliuisme
这个作者很懒,什么都没留下…
展开
-
onnx模型可视化以及pytorch算子与onnx节点对应关系
pytorch模型转成onnx时会产生很多意想不到的错误,然而对onnx模型进行Debug是非常麻烦的事,往往采用可视化onnx模型然后找到报错节点之后确定报错节点在源码中的错误位置的方法进行Debug,然而将可视化的onnx图与源代码对应起来可不是一件简单的事,本文主要记录pytorch算子与可视化的onnx节点的对应关系以方便对onnx节点在源代码中进行溯源,本文中的onnx模型使用Netron软件进行可视化,记录会随时补充。1.onnx中Gather节点对应pytorch中对tensor的索引操作原创 2020-11-25 17:24:19 · 6558 阅读 · 4 评论 -
[ONNXRuntimeError] :6 : RUNTIME_EXCEPTION : Non-zero status code returned while running Reshape node
onnx模型运行时遇到Reshape节点报错如下:很明显这个是reshape操作的错误,在pytorch中转成onnx对应是Reshape节点的是view()、transpose()等方法,用Netron可视化onnx模型定位到问题节点,然后找到问题节点在源代码中的位置,复现这个报错代码如下:import torcha=torch.randn(250, 1, 1) # a.size=(250, 1, 1)b=a.transpose(0,2).view(1,1,10, 25) # 把a维原创 2020-11-20 17:31:10 · 8898 阅读 · 5 评论 -
onnx模型转openvino报错nGraph does not support the following ONNX operations: If
onnx模型转换openvino进行部署时首先需要用openvino官方给的优化程序对onnx模型进行优化,之后使用openvino官方API加载优化后的模型如果不报错说明onnx模型转openvino模型成功,就可以编写推理代码然后进行部署。我在使用优化程序转换onnx模型时虽无报错但是在使用openvino官方API加载模型时报错nGraph does not support the following ONNX operations: If,这个错误好像是onnx模型转openvino模型不支持if条原创 2020-11-08 18:11:37 · 1002 阅读 · 2 评论 -
pytorch模型转onnx Exporting the operator _thnn_fused_lstm_cell to ONNX opset version 9 is not supported
转换onnx模型的时候遇到_thnn_fused_lstm_cell的报错,刚开始的报错是提示Keyerror:_thnn_fused_lstm_cell,然后在https://github.com/pytorch/pytorch/issues/25533看到有人说是pytorch和CUDA版本太低的原因以及当使用CPU就不会报错,然后我首先尝试将pytorch升级到最新,CUDA也升级到10.2,最终还是报错Exporting the operator _thnn_fused_lstm_cell to O原创 2020-10-29 15:43:21 · 5768 阅读 · 5 评论 -
pytorch转onnx模型常见的Expected object of device type cuda but got device type cpu错误分析
在将pytorch训练好的模型转成onnx模型时遇到最多的报错之一就是Expected object of device type cuda but got device type cpu这种数据计算位置的错误,这个错误的原因是在转成onnx模型时会将自动将原来代码中所有的python数值都转为tensor(不管是常量还是变量),在转为tensor之后肯定要牵扯到数据计算位置的问题,比如之前源代码是在GPU能正常运行但是有些数据是python数值,然后在转换onnx模型时这些python数值都转为了tens原创 2020-10-27 16:56:10 · 1104 阅读 · 0 评论 -
pytorch模型转onnx,报错kind_.is_prim() INTERNAL ASSERT FAILED at /pytorch/torch/csrc/jit/ir.cpp:922
在将pytorch模型转为onnx模型时遇到一个报错如下:debug之后发现错误原因是在转换onnx模型时不能使用torch.Tensor()接口新建tensor,而应该使用torch.tensor()来创建新的tensor.原创 2020-10-27 16:20:05 · 1891 阅读 · 2 评论 -
深度学习在线数据增广与离线数据增广理解与对比
众所周知在搞深度学习的时候数据是一个大问题,实践证明增加数据量在深度学习过程中能提高模型的性能,因此当数据集非常小的时候数据增广就成为了一个必要手段,而数据增广又分为在线增广和离线增广,下面介绍一下这两个方法的区别并列举pytorch和Keras的数据增广方法帮助理解。数据增广就是对现有的数据进行一些图形学或者几何学上的图像变换,网上有很多介绍的因此这里就不过多介绍了。在线增广即在模型训练过程中一边训练一边对数据进行增广,这种方法优点是不需要将增广的数据合成出来,因此节省了数据的存储空间,具有很高的原创 2020-09-23 17:38:24 · 3029 阅读 · 1 评论 -
pytorch 删除tensor中的指定位置元素
pytorch似乎并没有提供删除指定位置的元素或者删除某个值的直接方法,但是可以使用其他方法曲线达到目标。删除指定位置元素或者具体某个值需要先用nonzero()获取到要删除的元素的索引位置,之后使用torch.cat()进行删除操作import torcha = torch.randn(4,5).int() #生成一个随机的4,5 tensorprint(a, a.size())tensor([[ 0, 1, 0, 0, 0], [ 0, 0, 0, -1,原创 2020-09-13 00:40:47 · 10028 阅读 · 0 评论 -
pytorch 使用torch.scatter_()之后无法计算梯度
上一篇文章介绍到当对需要计算梯度的矩阵进行修改之后梯度计算出错,解决办法是少用a+=a或a=a+1这种形式的赋值操作,然后如果非得使用这些赋值方式的话可以在进行赋值操作之前使用clone()。这篇文章遇到一个问题当使用torch.scatter_()函数对矩阵进行修改时发现就算使用clone()还是会出现梯度无法计算的错误,Google之后找到的解决方法是在对变量进行clone()之前先使用Variable()函数,例子如下:from torch.autograd import Variablet原创 2020-09-13 00:09:42 · 956 阅读 · 7 评论 -
one of the variables needed for gradient computation has been modified by an inplace operation
用pytorch对网络求梯度时如果修改其中某个需要求梯度的矩阵就会出现这个报错,搜索了大部分的解决方法都是建议在进行矩阵修改的时候不要用a= a...以及a+=a(a是要进行修改矩阵变量)这种赋值操作,但是这个办法并不能解决我的问题,因为当我试图进行a=0的赋值操作时依然会报这个错误,这种情况的解决办法是在对矩阵进行赋值操作操作之前先对矩阵进行clone(),比如a=a.clone()之后就可以对矩阵进行任何赋值操作了。保存截图:参考:https://discuss.pytorch.org/原创 2020-09-09 23:39:43 · 229 阅读 · 0 评论 -
torch.manual_seed()
pytorch官方解释是设置生成随机数的种子。设置种子有什么用呢?神经网络在训练的时候参数需要随机初始化,有的时候初始化的参数非常好,然后我们希望以后训练的时候能复现之前效果非常好的随机初始化参数,但是如何让初始化的参数和之前的相同呢?这就是torch.manual_seed()这个函数的作用,利用相同的随机数种子就能保证复现之前的随机初始化参数。更详细的可以参考:https://clou...原创 2020-05-05 23:35:04 · 217 阅读 · 0 评论