
训练框架
文章平均质量分 53
leo0308
AI攻城狮
展开
-
cuda编译报错
-- The CXX compiler identification is GNU 7.5.0-- The CUDA compiler identification is unknown-- Check for working CXX compiler: /usr/bin/c++-- Check for working CXX compiler: /usr/bin/c++ -- works-- Detecting CXX compiler ABI info-- Detecting CXX comp原创 2022-06-23 23:13:23 · 965 阅读 · 1 评论 -
用torch.cuda.Event() 精确记录GPU的运行时间
用torch.cuda.Event() 精确记录GPU的 运行时间:start = torch.cuda.Event(enable_timing=True)end = torch.cuda.Event(enable_timing=True)start.record()model.train(xxx)end.record()elapsed_time = start.elapsed_time(end)原创 2021-10-19 11:06:28 · 7352 阅读 · 0 评论 -
tensorflow调试小技巧
前言在调试网络的时候, 经常需要输出网络的中间结果进行分析比对。如果你使用的是Pytorch, 那么这不是一个问题, 在Pytorch中可以非常方便地用各种方式打印输出。 但是在tensorflow中就没那么容易了。 因为tensorflow是静态图模式,计算图的构造和计算是分开的, 在生成计算图的时候并不会有真正的计算过程, 因此在网络中直接打印的话只是一个Tensor值, 没有什么意义。方法使用tf.Print算子算子定义如下tf.Print(input_, data, message=Non原创 2022-02-25 23:00:35 · 1269 阅读 · 0 评论 -
torch程序转tf指南
1 网络迁移基于torch实现的网络需要修改为基于tf的实现, 类似于翻译的工作, 主要是把torch的算子替换为tf等价的替换。经常会遇到torch中的算子tf中没有, 或者虽然有但功能不等价的情况, 尤其是后一种情况需要格外注意。还有一个主要区别是torch中通常定义一个类, 在__init__中定义好需要用到的算子,在forward中进行网络的连接;但是tf通常是函数式编程, 虽然也可以定义类, 但是通常没必要, 因为tf中很多算子都是函数, 定义和计算是一起完成的。比如在torch中:c原创 2022-02-26 10:15:18 · 667 阅读 · 0 评论 -
torch权重与tf转换方法及tf权重常用操作
0 前言由于torch的简单易用和灵活性,很多研究实现都是基于torch的。但在实际部署或者其他原因需要迁移到tf时, 我们都希望能直接复用torch已经预训练好的权重。当前tf转torch 也是类似的。1 方法简单讲, 其实就是一个映射的过程。 权重保存的其实就是一个dict, 权重的名字和具体的数值, 只不过不用框架的组织形式会有所不同。不同体现在2点: 一是名字的命名组织不同, 如torch中conv的权重一般是.weight,tf中则是kernel, torch中用.连接, tf中是/等原创 2022-02-26 10:46:34 · 1788 阅读 · 0 评论 -
tf depth_to_space 与torch pixshuffle 踩坑
0 前言根据文档中对于api介绍, tf.depth_to_space与torch中pixshuffle功能应该是一致的,都是把深度维的数据给move到宽度和高度上。然而实际测试发现了不一致的情况。1 现象当输出通道不为1的时候, 两者的结果不一致, 当输出通道为1的时候, 两者的结果一致。试验代码如下:import tensorflow.compat.v1 as tfimport torchfrom torch.nn import functional as Fimport numpy原创 2022-02-26 14:55:32 · 1664 阅读 · 1 评论 -
Pytorch中model.eval()与torch.no_grad()的作用
0 model.eval()经常在模型推理代码的前面, 都会添加model.eval(), 主要有3个作用:1 不进行dropout2 不更新batchnorm的mean 和var 参数3 不进行梯度反向传播, 但梯度仍然会计算1 torch.no_grad()torch.no_grad的一般使用方法是, 在代码块外面用with torch.no_grad()给包起来。 如下面这样:with torch.no_grad(): # your code 它的主要作用有2个:1 不进行原创 2022-05-04 22:10:59 · 2373 阅读 · 0 评论 -
torch权重转mindspore
由于torch的简单易用和灵活性,很多研究实现都是基于torch的。但在实际应用或者其他原因需要迁移到mindspore时, 我们都希望能直接复用torch已经预训练好的权重。当然mindspore转torch 也是类似的。 ...............原创 2022-06-21 20:23:51 · 739 阅读 · 0 评论 -
Pytorch和tensorflow api映射
0 前言当前pytroch是最流行的深度学习框架, 最主要的优点就是灵活易用。 tensorflow在很多生产部署环境中应用也还比较广泛, 虽然不好用, 但是效率上还是有点优势的。很多最新的研究工作是基于torch做的, 实际应用时可能需要转换为tensorflow。 因此, 这里列出一些常用的api映射关系,方便查阅和避坑。需要注意的是, torch的api比较简单, 但tensorflow的api却非常的混乱, 有底层api, 高级api, 还有各种第3方库的api, 功能上很多是重复的。并且tf原创 2022-05-25 20:48:57 · 792 阅读 · 0 评论