• 面经自己汇总(三维视觉算法)——持续更新


    1.pytorch和tensorflow的区别?

    1、首先是图的创建和调试
    pytorch图结构的创建是动态的,即图是运行时创建的,,更容易调试pytorch代码
    tensorflow图结构的创建是静态的,即图首先被“编译”,然后再运行。
    (一个好的框架应该要具备三点:
    ——方便实现大计算图;
    ——可自动求变量的导数;
    ——可简单的运行在GPU上;
    pytorch都做到了,但是现在很多公司用的都是TensorFlow,而pytorch由于比较灵活,在学术科研上用得比较多一点。鄙人认为可能,Google可能下手早一些,而Facebook作后来者,虽然灵活,但是很多公司已经入了TensorFlow的坑了,要全部迁移出来还是很费功夫;而且,TensorFlow在GPU的分布式计算上更为出色,在数据量巨大时效率比pytorch要高一些,我觉得这个也是一个重要的原因吧。)

    2、在灵活性方面
    pytorch是动态计算图,数据参数在CPU和GPU之间迁移十分灵活,调试简便
    tensorflow是静态计算图,数据参数在CPU和GPU之间迁移麻烦,调试麻烦

    3、设备管理方面——(内存,显存)
    tensorflow:不需要手动调整,简单
    TensorFlow的设备管理非常好用。通常你不需要进行调整,因为默认的设置就很好。例如,TensorFlow会假设你想运行在GPU上(如果有的话);
    TensorFlow设备管理唯一的缺点是,默认情况下,它会占用所有的GPU显存。简单的解决办法是指定CUDA_VISIBLE_DEVICES。有时候大家会忘了这一点,所以GPU在空闲的时候,也会显得很忙。
    pytorch:需要明确启用的设备,启用CUDA时,需要明确把一切移入设备;
    缺点:代码需要频繁的检查CUDA是否可用,及明确的设备管理,在编写能同时在CPU和GPU上运行的代码时尤其如此

    4、在部署方面
    tensorflow强于pytorch
    tensorflow的分布式训练要比pytorch性能更好

    5、数据并行方面
    PyTorch 是声明式数据并行:用 torch.nn.DataParellel 封装任何模型,模型能在批处理维度上实现并行,这样你就可以毫不费力的使用多个 GPU
    tensorflow需要手动调整数据并行
    note: 两个框架都支持分布式执行,提供用于定义集群的高水平界面

    2. 什么是Tensorboard?

    Tensorboard原本是Google TensorFlow的可视化工具,可以用于记录训练数据、评估数据、网络结构、图像等,并且可以在web上展示,对于观察神经网络的过程非常有帮助。
    PyTorch也推出了自己的可视化工具——torch.utils.tensorboard。

    3.pytroch多卡训练的实现方法

    pytorch单机多卡最简单的实现方法就是使用nn.DataParallel类,其几乎仅使用一行代码net = torch.nn.DataParallel(net)就可让模型同时在多张GPU上训练。

    4.C++中的虚函数

    C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。
    虚函数(Virtual Function)是通过一张虚函数表(Virtual Table)来实现的。简称为V-Table。 在这个表中,主是要一个类的虚函数的地址表,这张表解决了继承、覆盖的问题,保证其容真实反应实际的函数。这样,在有虚函数的类的实例中这个表被分配在了 这个实例的内存中,所以,当我们用父类的指针来操作一个子类的时候,这张虚函数表就显得由为重要了,它就像一个地图一样,指明了实际所应该调用的函数。

    5.C++中的static关键字

    static是C++中的关键字之一,是常用的函数与变量(C++中还有类)的修饰符,它常被用来控制变量的存储方式和作用范围。
    static可以修饰静态局部变量静态全局变量
    当static修饰局部变量时:
    1.变量的存储区域由栈变为静态常量区
    2.变量的生命周期由局部变为全局
    3.变量的作用域不变
    当 static 修饰全局变量时:
    1.变量的存储区域在全局数据区的静态常量区。
    2.变量的作用域由整个程序变为当前文件。(extern声明也不行)
    3.变量的生命周期不变。

  • 相关阅读:
    记录:COMSOL仿真——光子晶体光纤
    Android 系统属性(SystemProperties)
    Jest 如何支持异步及时间函数
    如何创建python虚拟环境
    备战蓝桥杯---图论之最短路Floyd算法
    Java Web 学习笔记(二) —— JDBC
    Python150题day14
    如何封禁大量恶意IP?
    三分类网络的物理意义是什么?
    C++ string类(一)
  • 原文地址:https://blog.csdn.net/toCVer/article/details/125562974