使用OneFlow搭建神经网络
在 识别 MNIST 手写体数字 的例子中,通过 flow.layers 和 flow.nn 中提供的接口搭建了一个简单的 LeNet 网络。下面,将通过LeNet来介绍 Onflow 中网络搭建的核心元素—算子(op)和层(layer)。
LeNet 是一个主要由卷积层、池化层和全连接层组成的神经网络。

上图中有两类元素,一类是方框代表的运算单元,包括 op 和 layer 两类,比如 conv2d 、 dense 、 max_pool2d 等;一类是箭头代表的数据。对应了以下代码:
def lenet(data, train=False):
initializer = flow.truncated_normal(0.1)
conv1 = flow.layers.conv2d(
data,
32,
5,
padding=“SAME”,
activation=flow.nn.relu,
name=“conv1”,
kernel_initializer=initializer,
)
pool1 = flow.nn.max_pool2d(
conv1, ksize=2, strides=2, padding=“SAME”, name=“pool1”, data_format=“NCHW”
)
conv2 = flow.layers.conv2d(
pool1,
64,
5,
padding=“SAME”,
activation=flow.nn.relu,
name=“conv2”,
kernel_initializer=initializer,
)
pool2 = flow.nn.max_pool2d(
conv2, ksize=2, strides=2, padding=“SAME”, name=“pool2”, data_format=“NCHW”
)
reshape = flow.reshape(pool2, [pool2.shape[0], -1])
hidden = flow.layers.dense(
reshape,
512,
activation=flow.nn.relu,
kernel_initializer=initializer,
name=“dense1”,
)
if train:
hidden = flow.nn.dropout(hidden, rate=0.5, name=“dropout”)
return flow.layers.dense(hidden, 10, kernel_initializer=initializer, name=“dense2”)
作业函数运行时,data 是形状为 100x1×28×28 的数据,data 首先作为 conv2d 的输入参与卷积计算,得到计算结果conv1 ,然后 conv1 作为输入传给 max_pool2d ,依此类推。
op 和 layer
算子(Op)是比较常用的一种概念,是 OneFlow 中基本的运算单元,上文代码中的 reshape 和 nn.max_pool2d 就是两种算子。
layers.conv2d 和 layers.dense 不是基本的运算单元,由算子组合成的特定的运算层(layer)。层的存在使得搭建神经网络更方便,相关接口使用请参考 oneflow.layers API。
通过阅读 oneflow.layers 源码 ,可以学习由基本算子构建运算层的细节。
网络构建过程中的数据块
OneFlow 默认模式是静态图机制,网络的构建和运行过程其实是分开的。因此,在定义网络时,各个变量中 并没有 真实的数据,只是数据的占位符。对于真实数据的计算发生在作业函数的调用过程中。
在构建网络时,只是描述了网络中各个节点的性质、形状(如 shape、dtype)与连接关系等,这些节点中没有具体的数值,仅仅只是 数据占位符, OneFlow 可以根据这种数据占位符进行编译推理,得到计算图。
这种数据占位符在 OneFlow 的语境中被称作 Blob ,在 OneFlow 中有对应的基类 BlobDef。
搭建网络时可以打印 Blob 的属性,比如以下代码打印 conv1 的 shape 和 dtype :
print(conv1.shape, conv1.dtype)
Blob 的运算符重载 BlobDef 中定义了运算符重载,也就是说,BlobDef 对象之间可以进行加减乘除等操作。
例如下面这句代码中的加号:
output = output + fc2_biases
这句代码等价于:
output = flow.broadcast_add(output, fc2_biases)
总结
使用 OneFlow 进行神经网络搭建,需要 OneFlow 提供的算子或层作为计算单元。数据占位符 Blob 作为算子和层的输入和输出,运算符重载帮助简化了部分语句。
OneFlow 提供的算子可以参阅 API 文档中的:oneflow.nn、oneflow.math、oneflow.layers 等模块。

使用OneFlow搭建神经网络相关推荐

  1. 在《我的世界》里搭建神经网络,运行过程清晰可见,不仅好玩,而且代码全部开源!...

    晓查 凌晨 发自 凹非寺  量子位 报道 | 公众号 QbitAI 可能是疫情吧,大家在现实中行动受限,就越来越多去游戏世界中释放天性. 前有<我的世界>举办毕业典礼,后有<动物森友 ...

  2. 在《我的世界》里搭建神经网络,运行过程清晰可见,这位印度小哥开发的新玩法火了...

    点击上方"AI遇见机器学习",选择"星标"公众号 重磅干货,第一时间送达 晓查 凌晨 发自 凹非寺  量子位 报道 | 公众号 QbitAI 可能是疫情吧,大家 ...

  3. 用Numpy搭建神经网络第二期:梯度下降法的实现

    https://www.toutiao.com/a6696699352833851908/ 大数据文摘出品 作者:蒋宝尚 小伙伴们大家好呀~~用Numpy搭建神经网络,我们已经来到第二期了.第一期文摘 ...

  4. 真·机械朋克!物理学家用扬声器搭建神经网络,登上今日Nature

    晓查 发自 凹非寺 量子位 | 公众号 QbitAI 用喇叭识别手写数字? 听起来好像是玄学,但这其实是正经的Nature论文啊. 下面的图,表面上看起来是个改造过的喇叭,其实用它来识别手写数字,正确 ...

  5. 9行Python代码搭建神经网络

    9行Python代码搭建神经网络 Kaiser谈笑风生 4月前发表至趣味项目,5995次访问 原文:How to build a simple neural network in 9 lines of ...

  6. Ch2r_ood_understanding 本文档为论文限定领域口语对话系统中超出领域话语的对话行为识别的部分实验代码。代码基于Python,需要用到的外部库有: Keras(搭建神经网络) S

    Ch2r_ood_understanding 本文档为论文限定领域口语对话系统中超出领域话语的对话行为识别的部分实验代码.代码基于Python,需要用到的外部库有: Keras(搭建神经网络) Sci ...

  7. Tensorflow初学者之搭建神经网络基本流程

    本文是学习这个视频课程系列的笔记,课程链接是 youtube 上的, 讲的很好,浅显易懂,入门首选, 而且在github有代码, 想看视频的也可以去他的优酷里的频道找. Tensorflow 官网 神 ...

  8. 机器学习(七)——tf.keras搭建神经网络固定模式

    一.总纲(一般按照下面6步搭建) import--导入相关模块 train,test--指定训练集与测试集 model = tf.keras.models.Sequential--在Sequentia ...

  9. TensorFlow学习笔记(九)tf搭建神经网络基本流程

    1. 搭建神经网络基本流程 定义添加神经层的函数 1.训练的数据 2.定义节点准备接收数据 3.定义神经层:隐藏层和预测层 4.定义 loss 表达式 5.选择 optimizer 使 loss 达到 ...

最新文章

  1. mysql中的输出,mysql-将输出结果作为SQL中的列
  2. Linux内核源码分析--内核启动之(2)Image内核启动(汇编部分)(Linux-3.0 ARMv7) 【转】...
  3. python怎么学最快-怎么样快速高效学习Python
  4. 解决网通英文wiki无法显示图片问题【20100723更新】
  5. 41. Leetcode 662. 二叉树最大宽度 (二叉树-二叉树性质)
  6. maven的日志在哪里看_日志管理领域研究现状(2)
  7. 无向图的深度优先遍历非递归_图算法总结
  8. 微信小程序之wx.request:fail错误,真机预览请求无效问题解决,安卓,ios网络预览异常(转)...
  9. 为节省8亿做迁移,13亿记录出错赔偿29亿
  10. 21.策略模式(Strategy Pattern)
  11. C++ 从入门到入土(English Version) Section 2:Computer Memory and Number Systems
  12. Citrix XenDesktop VS Vmware View (上)-你必须懂得
  13. 神经网络中常用激活函数总结【Python实现激活函数与导函数,曲线可视化分析】
  14. html制作dnf,dnf怎么制作img文件 时装拼合教程
  15. html网页详细代码
  16. 修改注册表——让Excel同时显示两个窗口/多个文件
  17. shell脚本之单引号,双引号,反引号
  18. rootfs bootfs bootloader
  19. Nginx 基础配置
  20. android学习记录(3)查看Device File Explore

热门文章

  1. 2022-2028年中国钢材市场投资分析及前景预测报告(全卷)
  2. 2022-2028年中国离心机行业市场研究及前瞻分析报告
  3. IDEA的Docker插件实战(Dockerfile篇)
  4. docker-compose的安装与简单使用
  5. dataframe sample 采样,抽样
  6. 解决Python模块报错:ModuleNotFoundError: No module name 'StringIO'
  7. linux C++打包程序总结
  8. 将HLSL射线追踪到Vulkan
  9. php将图片链接转换为base64编码文件流
  10. Django celery6.4