CS20si课程笔记1:Tensorflow Introduction

虽然一直使用Tensorflow+Keras,但是没有一个关于Tensorflow的整体框架理解,所以趁着暑假刷一下Stanford刚开的关于Tensorflow的课程CS20si。
关于课程的slides, notes以及各种介绍请参照课程官网以及Github Repo。须注明的是课程是一门新课,而且Tensorflow也没有稳定下来的API,所以应该只是当前时刻一个较棒的分享,并不具有太多的权威性。另课程没有视频,但网上有一些基于slides的视频教程,可以自行搜索。
笔记不是对slides内容的整理,只是记录一些笔者认为用意思的想法,会有一些笔者自己的思考,正确性有待考证,欢迎指教。


使用Tensorflow的理由

1 . tutorial充足
tutorial compare
2. 使用python
3. portability: CPU/GPU, mobie device
4. flexibility: Raspberry Pi, Android, Windows, iOS, Linux
5. Tensorboard
6. checkpoints
7. 自动求导
8. 众多用户

Tensorflow 概览

几个关键词:Session, Graph, Tensor
简而言之:
Session用于执行运算Graph,负责资源分配,配置环境等等。
Graph就是计算图,神经网络模型就是计算图的一种。
Tensor就是多维数据。
Graph中包括点和有向边,点(Node)包括运算操作(Add, Mul, Const等)以及数据(Tensor)两部分;而有向边(Edge)表示数据流向。(此部分和Slide不同,因为我认为原有理解Tensor对应于边的说法无法解释一个Node有多个输出边,但每个输出边其实对应于同一个数据的情况
Graph
上图中整个表示的就是一个Graph,而每个节点(如x,y Add, Pow等等)都是个Node,而每条边(Scalar等)对应于Edge。

Tensorflow+分布式

这节slides里面关于分布式并行方面的思考对我来说很新鲜。
1. 把Graph分作SubGraph用于分布式,如图所示
subgraph
2. Session有关于是否记录设备分配的选项,关于Session中各种参数意义及设置详见config.proto

sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))

使用多个Graph

Slide不建议使用多个Graph,理由如下:
no multiple graphs
系统会默认分配一个default graph给session,所以如果不显示定义tensor/operator所在的graph的话,会默认使用default graph。这个图可以使用g = tf.get_default_graph()获得。
显示定义图的代码也很简单(先创建一个Graph,然后用其替代default graph):

g = tf.Graph()
with g.as_default():
    b = tf.constant(5)

从上面的代码也可以看出其实画多个Graph的方法很简单(只需要多创建几个Graph,然后使用with声明画板,然后在不同的Graph上作图即可)。同时Session也不一定非要使用全部资源,可以参照Keras设定GPU使用内存大小(Tensorflow backend)。另外笔者在之前使用Tensorflow的过程中,想要自行实现交叉验证,而且并不会重新初始化Session的方法,所以采用了每次新建一个Session(同时再重新画图)的做法,遇到了InvalidArgumentError(详情参考tensorflow做交叉验证遇到InvalidArgumentError),其实和这里提到的是一个问题。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值