Skip to content

  • 体验新版
    • 正在加载...
  • 登录
  • PaddlePaddle
  • Paddle
  • Issue
  • #2500

P
Paddle
  • 项目概览

PaddlePaddle / Paddle
大约 2 年 前同步成功

通知 2325
Star 20933
Fork 5424
  • 代码
    • 文件
    • 提交
    • 分支
    • Tags
    • 贡献者
    • 分支图
    • Diff
  • Issue 1423
    • 列表
    • 看板
    • 标记
    • 里程碑
  • 合并请求 543
  • Wiki 0
    • Wiki
  • 分析
    • 仓库
    • DevOps
  • 项目成员
  • Pages
P
Paddle
  • 项目概览
    • 项目概览
    • 详情
    • 发布
  • 仓库
    • 仓库
    • 文件
    • 提交
    • 分支
    • 标签
    • 贡献者
    • 分支图
    • 比较
  • Issue 1,423
    • Issue 1,423
    • 列表
    • 看板
    • 标记
    • 里程碑
  • 合并请求 543
    • 合并请求 543
  • Pages
  • 分析
    • 分析
    • 仓库分析
    • DevOps
  • Wiki 0
    • Wiki
  • 成员
    • 成员
  • 收起侧边栏
  • 动态
  • 分支图
  • 创建新Issue
  • 提交
  • Issue看板
已关闭
开放中
Opened 6月 19, 2017 by saxon_zh@saxon_zhGuest

使用protobuf的message还是使用C++结构体描述神经网络?

Created by: reyoung

在Caffe2,Tensorflow,MXNet与DyNet这四个神经网络框架中,Caffe2与Tensorflow使用protobuf描述用户的配置信息,MXNet与DyNet使用C++数据结构描述用户的配置信息。

Protobuf与C++描述用户配置的优缺点

使用Protobuf描述用户配置的优缺点

  • 优点:
    • 天然支持多编程语言的序列化。
  • 缺点:
    • Python与C++ 核心的网络配置需要经历一次序列化与反序列化过程,运行时速度较慢。
    • 不支持 Variant类型,对于Attribute的表示方式比较复杂。 See #2499 (closed)

使用C++描述用户配置的优缺点

  • 优点:
    • 因为没有序列化过程,运行速度快。
    • 有Variant类型(boost::variant或者boost::any)
  • 缺点:
    • 需要手写序列化过程。

用户配置信息描述的要求

快速的、轻量级的用户配置

参考DyNet的论文中的描述。如果实现动态神经网络,需要用户配置信息是轻量的,快速的。参考该论文23-24页与tensorflow的对比可见,DyNet实现RNN language model的速度明显快于Tensorflow(2440 vs 636),且DyNet实现用户配置,仅从代码量上看也远小于Tensorflow。

即,使用C++描述神经网络配置,实现简单,速度快。

模型序列化与保存

  • DyNet不支持拓扑结构的序列化,在预测时要求用户在C++端重新配置一下网络。
  • MXNet在C++端手写了将用户配置的C++结构序列化到JSON的过程。

即,使用C++描述神经完了过配置,序列化复杂。

指派人
分配到
无
里程碑
无
分配里程碑
工时统计
无
截止日期
无
标识: paddlepaddle/Paddle#2500
渝ICP备2023009037号

京公网安备11010502055752号

网络110报警服务 Powered by GitLab CE v13.7
开源知识
Git 入门 Pro Git 电子书 在线学 Git
Markdown 基础入门 IT 技术知识开源图谱
帮助
使用手册 反馈建议 博客
《GitCode 隐私声明》 《GitCode 服务条款》 关于GitCode
Powered by GitLab CE v13.7