TensorFlow的个人理解
2017-06-29 15:07
197 查看
本篇文章只是基于自己对TensorFlow使用过程中的个人理解,以及一些基本注意事项。
TensorFlow™ 是一个采用数据流图(data flow graphs),用于数值计算的开源软件库。节点(Nodes)在图中表示数学操作,图中的线(edges)则表示在节点间相互联系的多维数据数组,即张量(tensor)。它灵活的架构让你可以在多种平台上展开计算,例如台式计算机中的一个或多个CPU(或GPU),服务器,移动设备等等。TensorFlow 最初由Google大脑小组(隶属于Google机器智能研究机构)的研究员和工程师们开发出来,用于机器学习和深度神经网络方面的研究,但这个系统的通用性使其也可广泛用于其他计算领域。
这是 TensorFlow 中文社区,这其特征提到:线是 tensor 类型,是一种多维数组,需要注意的是
- tensor 类型是不可迭代的
- tensor 类型和 list 类型可以相互转换,且 list 类型在图中不影响梯度传递
- 在计算图中,不可使用非数学计算符号,比如用 if 做一个数据过滤 这一条需要解释一下,如果你做一个条件过滤,相当于做一个截断,梯度无法传递给 if 条件之前的变量,之前的变量都会被当成常量。比如你用 TensorFlow 写一个 GAN (对抗式生成网络),需要做一个变量选取,如果在生成模型的输出做一个条件选取,那么生成模型的全部变量将无法被梯度下降优化器做优化。
- 关于 tf.variable_scope 的理解 网上说了很多原因为什么需要这样做的原因,我决定直接从结果上来说,或者说 TensorFlow 的规定来说(个人愚见)。以 LSTM 为例(LSTM是RNN的一个变种),在一个 variable_scope 中只允许有一个 LSTM 实例。如果你使用了 LSTMCell 这种类,你很可能直接将其封装在一个函数里,然后建立图表的时候调用一次,这时候其实你是失去了对那个 LSTMCell 实例的控制(就是你想再用一次这个实例其实是没办法做到的),但是TensorFlow会给你记着它里面的所有变量,所以 TensorFlow 只允许有一个 LSTMCell 实例,如果你需要用两个 LSTMCell 实例,那么再开一个 variable_scope 就可以了。同时 variable_scope 可以传给梯度下降优化器,可以选择一些变量进行优化,其他的变量当成常量。
- TensorFlow一般情况下是先构建计算图,对于数据使用 placeholder 进行占位,之后用feed_dict进行填充,其实也可以直接将数据当成常量投喂给计算图,不过需要解决迭代问题。参见第一条。
TensorFlow™ 是一个采用数据流图(data flow graphs),用于数值计算的开源软件库。节点(Nodes)在图中表示数学操作,图中的线(edges)则表示在节点间相互联系的多维数据数组,即张量(tensor)。它灵活的架构让你可以在多种平台上展开计算,例如台式计算机中的一个或多个CPU(或GPU),服务器,移动设备等等。TensorFlow 最初由Google大脑小组(隶属于Google机器智能研究机构)的研究员和工程师们开发出来,用于机器学习和深度神经网络方面的研究,但这个系统的通用性使其也可广泛用于其他计算领域。
这是 TensorFlow 中文社区,这其特征提到:线是 tensor 类型,是一种多维数组,需要注意的是
- tensor 类型是不可迭代的
- tensor 类型和 list 类型可以相互转换,且 list 类型在图中不影响梯度传递
- 在计算图中,不可使用非数学计算符号,比如用 if 做一个数据过滤 这一条需要解释一下,如果你做一个条件过滤,相当于做一个截断,梯度无法传递给 if 条件之前的变量,之前的变量都会被当成常量。比如你用 TensorFlow 写一个 GAN (对抗式生成网络),需要做一个变量选取,如果在生成模型的输出做一个条件选取,那么生成模型的全部变量将无法被梯度下降优化器做优化。
- 关于 tf.variable_scope 的理解 网上说了很多原因为什么需要这样做的原因,我决定直接从结果上来说,或者说 TensorFlow 的规定来说(个人愚见)。以 LSTM 为例(LSTM是RNN的一个变种),在一个 variable_scope 中只允许有一个 LSTM 实例。如果你使用了 LSTMCell 这种类,你很可能直接将其封装在一个函数里,然后建立图表的时候调用一次,这时候其实你是失去了对那个 LSTMCell 实例的控制(就是你想再用一次这个实例其实是没办法做到的),但是TensorFlow会给你记着它里面的所有变量,所以 TensorFlow 只允许有一个 LSTMCell 实例,如果你需要用两个 LSTMCell 实例,那么再开一个 variable_scope 就可以了。同时 variable_scope 可以传给梯度下降优化器,可以选择一些变量进行优化,其他的变量当成常量。
- TensorFlow一般情况下是先构建计算图,对于数据使用 placeholder 进行占位,之后用feed_dict进行填充,其实也可以直接将数据当成常量投喂给计算图,不过需要解决迭代问题。参见第一条。
相关文章推荐
- 个人理解:笔记
- 计算机专业的学习资料与个人对本专业的理解
- JMS学习的个人理解笔记
- JavaScript 闭包(个人理解)
- haproxy和keepalived的个人理解(转载)
- 对于oauth2.0的个人理解-客户端篇
- 关于CAP定理的个人理解
- android应用开发存储方式之SQLite(android自带的数据库)的一些个人理解
- PCA(Principal Component Analysis)之个人理解
- RIP个人理解
- 个人对DirectX3D做2D编程的理解
- (八)Tensorflow学习之旅——理解过拟合overfitting
- 关于java中finally中的语句在return前还是后执行的个人理解。
- EIGRP个人理解
- 对 工厂模式与建造者模式 的个人理解,以及结合运用
- 关于数组的个人理解
- android launchMode 加载模式 个人理解
- 学习常量中指针变量和它指向的实体的个人理解
- 谈谈个人对持续集成CI的理解
- EL表达式 个人理解