Skip to content

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

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 7月 24, 2017 by saxon_zh@saxon_zhGuest

我需要的灵活的神经网络框架支持什么功能

Created by: lcy-seso

@Superjom 建议写一些我作为用户,对神经网络框架会有什么样的功能需求。这里是简单写一些,不涉及具体的设计,仅抛砖引玉。

神经网络就像搭积木,当现有积木不能满足实现新的 idea 时,就需要自己来造积木,或者用旧积木拼新积木。开发新的模型,通常无外乎三件事情:写新的layer / op,写新的损失函数,动态连接网络。

  1. 写新的 layer / op

    • 像写公式一样写前向反向,这一点我相信可以通过支持细粒度的 OP 来实现,以及通过将操作 Tensor 的各种运行也直接暴露给用户。
  2. 写新的损失函数

    • 损失函数是学习任务的核心,深度学习的出现让花在“特征工程”上的时间,转向了“cost工程”。
    • 除了学习任务的常见损失函数,实际上用户会定制各种千奇百怪的损失函数,即使是细粒度的 OP 也无法解决,这时需要对 Tensor直接操作。
    • 把前向/反向怎么算扔给用户在(Paddle的)外部实现。前向/反向本质上只要返回 tensor,前向返回最终计算结果,反向返回对参数的导数,对输入的导数。
    • 对 Tensor 直接操作的结果能够再次还给框架,继续参于网络其它部分的BP过程。
  3. 动态构建网络结构需要两种逻辑控制 :循环和条件

    • 神经网络的构建类似于程序语言的三种执行逻辑:
      1. 顺序结构
        • 只要依次 forward-backward 网络中的每一个计算单元(layer 或者 细粒度的operator),也就是静态图。
      2. 条件结构
        • 需要支持逻辑运算operator,来判断条件是否成立,可能会包括:(1)与、或、非、异或;(2)判等、比大小
      3. 循环结构
        • 循环结构三要素:循环变量、循环体和循环终止条件,只有循环终止条件是需要考虑和设计的,也同样是条件结构需要解决的问题。

  • 我个人认为,pytorch 的极端动态性是和python是一种动态语言绑定在一起
  • 我见过的最大的一部分动态网络,用户是在向框架描述如何根据(1)输入数据;(2)前层计算结果来连接一些预定义子模型的连接策略,也就是需要:“条件”和“循环”两种操作。
  • 我个人觉得“以静换动”已经可以满足很大一部分需要,因为连接策略始终是静态的,只有输入数据和运算结果是动态的,不必在一开始便追求极致地动态性。

  1. 灵活的输入数据操作 operator (这个基于 Tensor 其实比较简单)
    • 当网络具有一定的动态性时,也会需要一些相应的数据处理:对 tensor 的选择行/列、裁剪、拼接,重组为神经网络中下一个op 需要的输入数据。

简单地总结一下,我需要框架能够非常方便(留给我处理的越少越好)实现两个大的功能:

  1. 直接操作 tensor (像numpy和matlab的矩阵操作):获取网络任一层的计算结果和梯度。
  2. 循环和条件 operator (含逻辑判断operator)
指派人
分配到
无
里程碑
无
分配里程碑
工时统计
无
截止日期
无
标识: paddlepaddle/Paddle#3028
渝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