TensorFlow 常见关键词

 

查看全部 84 个回答

 

 

 

棒呵呵

 

emmmmm....

 

 

一些自己看法和见解,希望有所帮助,有错误的地方欢迎指出^_^

----------------------------------------------------------------------

对于tensorlfow 的认识和学习顺序

本文是想描述以下两个问题:

1. tensorflow是什么,有什么函数必须理解

自己的理解:

tensorflow就是一个容器,这个容器里面呢,有一个图(data flow graph,其实就是我们的神经网络模型:model),并且这个图(模型)中包含了很多的tensor(张量,目前我的理解,其实就是矩阵,也就是数据存放的方式,)。tensor可以这个flow graph中运算,输入,输出。 因此这就是为什么叫tensorflow。

所以,核心就是图(flow Graph,那神经网络结构在tensorflow里也就是一张图)

那么使用tensorflow核心主要的流程其实就是三步:

  1. 1 ". "将计算的流程表示成图(做深度学习的话,也就是构造神经网络)
  2. 2 ". "启动这个图,也就是Session(Session,你可以理解成,你访问一次网页,在网页中打开了一个新的窗口。在这个窗口中进行网页的文章的读取,对关键词查询等过程。当你把这个窗口关掉之后,那么这个Session也就结束了。)
  3. 3 ". "往session里面填入值,让 session运算得到结果。

其实后来仔细看看官网上的解释,也就两步:

  1. 1 ". "Building the computational graph
  2. 2 ". "Running the computational graph

即使创建一个模型,跑这个模型,就没有了, 但是呢,如果直接打印这个模型时不实际的,因为打印出来的值是这个tensor的值,而不是tensor里面所赋予的value的值(这个地方,我把它理解为一个tensor是一个多维的矩阵,那么你直接打印这个矩阵的话呢,得到的是这个矩阵的地址或者位置,为了得到这个矩阵里面的值,必须使用session函数),所以,为了得到tensor里面我们的内容,加入了session的步骤。

来个入门的函数理解:

函数原文: http://blog.csdn.net/lenbow/article/details/52152766...

import tensorflow as tf
 #定义‘符号’变量,也称为占位符
 a = tf.placeholder("float")
 b = tf.placeholder("float")

 y = tf.mul(a, b) #构造一个op节点 第一步

 sess = tf.Session()#建立会话 第二步
 #运行会话,输入数据,并计算节点,同时打印结果
 print sess.run(y, feed_dict={a: 3, b: 3}) #第三步
 # 任务完成, 关闭会话.
 sess.close()

上面描述了我对tensorflow的概念和tensorflow的运算逻辑,那么下面介绍tensorflow中几个常用函数。

必须理解和掌握的几个tensorflow概念:

  • tensor
  • Varibale
  • placeholder
  • Session

下面逐一开始介绍:

1. tensor:

在计算图(Graph)中,操作间传递的数据都是tensor

tensor即使我们尴尬所提到的张量(矩阵,或者是tensorflow中储存数据的方式),那么声明tensor的方式有很多种。

里面有Ranks,Shape,Type需要理解一下

Ranks:is the number of dimensions of the tensor

Shape:这是指的是纬度,几纬的就是指几个shape

types: 这里指类型,int,float,还是double等等

import tensorflow as tf
a = tf.zeros(shape=[1,2])
import tensorflow as tf
matrix1 = tf.constant([[3., 3.]])

等等等,都是声明tensor的函数,方法

(这一块我说明的不是很好,可以一起研究下)

2. Variable

variable即为变量的意思,当训练模型的时候,使用变量去存储和更新参数。

那么变量是可以被存储(Saver函数)到磁盘中,并且在读取它们(load函数)。

这里必须强调一下:创建一个变量时,必须先初始化后

创建Variable:

例子:创建2个Variable

import tensorflow as tf
weights = tf.Variable(tf.random_normal([784, 200], stddev=0.35),
name = "weights")

biases = tf.Variable(tf.zeros([200]), name="biases")

初始化

在使用变量的时候必须初始化这个变量,而且是必须在模型的其他操作运行之前完成。最简单的例子是添加一个给所有变量初始化的操作。

例子:

#create two variables
import tensorflow as tf
weights = tf.Variable(tf.random_normal([784, 200], stddev=0.35), 
name = "weights")

biases = tf.Variable(tf.zeros([200]), name="biases")

#add an operation to initialize the variables.
init_op = tf.global_variables_initializer()

#Later, when launching the model 
with tf.Session() as sess:
    #Run the init operation:
    sess.run(init_op)
    ...
    #then use the model
    ...

这一块就很清楚了, 首先声明两个Variable变量,之后,声明一个能够是所有变量初始化的函数,然后,在运行session的时候,先把所有的Variable都初始化,再运算其他模块

我说明一下,我觉得我这块说明的不是很好,有兴趣的可以去看看,或者一起交流交流: https://www.tensorflow.org/programmers_guide/variables...

上面还讲了Saver()函数和restore()函数,这两个函数会在以后我们训练神经网络的时候非常的重要,以后我想在这两个函数中做一个专题,举几个例子。

3. placeholder

看名字就知道这是个什么函数了,占位符,这个函数是个好东西,一般用于tensorflow的第一步,构建flow graph(或神经网络的时候)的时候,但是不赋予值(数据),只是把空间(位置)占住,在我们的第三步(赋予值运算)的时候,把数据传入进去进行运算。

我在网上找到一种说法挺有意思:这个函数相当于告诉系统:这里有一个值/向量/矩阵,现在我没发给你具体数值,但是正式运算的时候我会补上!

import tensorflow as tf
x = tf.placeholder(tf.float32, shape=(1024, 1024))
y = tf.matmul(x, x)

with tf.Session() as sess:
  print(sess.run(y))  # ERROR: will fail because x was not fed.

  rand_array = np.random.rand(1024, 1024)
  print(sess.run(y, feed_dict={x: rand_array}))  # Will succeed.

4. Session

在刚刚的代码实例中,已经演示了很多有session的东西,上面也讲了session的概念,其实就是相当于你去访问一个网页,打开了一个新的窗口,在这个窗口上进行各种上网的活动(各种函数的运算),然后关掉这个窗口,你的运算也就终止了。

2. 对于现在的目标来说,如何更好,更快的使用tensorflow去搭建自己的神经网络

根据第一个问题的描述,我觉得已经对tensorflow有个大致的理解和入门了。 现在我觉得需要的是实战例子,理解了实战的例子后,才能更好的编码。

目前来说我也处于这一阶段,正在学习别人写代码的角度去学习,那么我想推荐一个人的视频,这个人边写边讲解,不懂得,可以停下来查查资料

需要翻墙:

https://www.youtube.com/watch?v=oYbVFhK_olYwww.youtube.com

 

编辑于 2018-05-30

更多回答

 

 

 

 

Sherlock

 

I want to create some new things!

 

 

可以学一下斯坦福新开的课程,cs20si,http://web.stanford.edu/class/cs20si/index.html...,国内可以看b站的视频,CS 20SI: Tensorflow for Deep Learning Research,通过这个课程,能够对tensorflow有个全面的了解,从最基本的计算图开始,到如何结构化模型,了解最新的seq2seq,neural style等前沿算法的实现。

我准备写一个课程笔记,这是第一篇笔记

以上

 

编辑于 2017-08-13

 

 

 

 

想飞的石头

 

夯实基础,埋头苦干 happy coding

 

 

李沐大神说过,深度学习框架就是丹炉.

  1. 1 ". "google丹炉的使用说明书:确实是很完善,从最开始出来到现在一直在更新,有段时间不看文档,发现对了好多contrib的文档内容(这个特别棒,建议持续关注),所以,所以一直要持续的关注/学习;
  2. 2 ". "炼丹友的反馈:做实验用第三方框架 tflearn, tensorlayer都很好,不过个人感觉还是要先猜猜原生tensorflow源码的坑,所以在github上,watch tensorflow这个项目是必须的,尤其是没事看看别人提的issue,很多时候会避免在之后你用到的问题;
  3. 3 ". "定位自己的方向:就是你做的这块的内容在tensorflow的体现,比如本人做cv的,会去关注tensorflow/model下的各种cv方向的tensorflow/models,会去读它的代码实现,google的工程实现确实很厉害,代码很完善,看着很漂亮,是种享受,还有就是github其他的基于tensorflow的cv下的内容,挑star高的去看下,过不了多久,你就会慢慢模仿着用来写自己的model,而且会显得很专业;
  4. 4 ". "关注丹方: TensorFlow就是一套工具,无论是mxnet、torch、paddle,真正我们要做的是用某套工具把我们熟悉,了解的丹方炼出来,google model下tensorflow/models里面很最新的image下的丹方,建议多熟悉熟悉,如果发现其他框架比如tflearn,tensorlayer,mxnet上没有的可以去尝试用别的丹炉炼出来,这个很有用的,本人用tflearn写过googlenet,inception-resnet-v2,用mxnet写过inception-resnet-v2,难度不大但你会学到从头到尾去熟悉丹炉;
  5. 5 ". "第三方支持框架: tensorflow出来后有很多高级的第三方包,例如tflearn,keras,tensorlayer,提供高级的api用来快速实现某些功能,但是我觉得更大的好处其实不是快速写好某个模型,而是其内部专业的高级api的代码实现,极其值得参考,本人比较熟悉tflearn,tflearn里面的各种layer的写法简直是教科书级别的,童靴们在写tensorflow源码的时候完全可以拿来参考
  6. 6 ". "金丹使用: model训练出来,如何使用?做inference还是保存下来对新的task做pretrained+fine-tuning,这些都要关注,具体可以去看看例如neural style的model还有一些图像分类比赛使用pretrained model的源码;
  7. 7 ". "框架底层的学习: 本人在这块不熟悉,但是个人觉得还是很有必要掌握这些,我之后会在一段时间好好关注下这部分,读读轻量级框架pjreddie/darknettiny-dnn/tiny-dnn的源码

最后不要脸地推荐下我博客的几篇相关文章:

TensorFlow入门一-小石头的码疯窝

TensorFlow之深入理解Neural Style

TensorFlow之深入理解AlexNet-小石头的码疯窝

TensoFlow之深入理解GoogLeNet-小石头的码疯窝

TensorFlow之深入理解VGG\Residual Network

TensorFlow之深入理解Fast Neural Style

风格画之最后一弹MRF-CNN-小石头的码疯窝

深度学习之Neural Image Caption

MXnet初体验之inception-resnet-v2从Model到Predict-小石头的码疯窝

 

 

 

查看全部 84 个回答

 

David_Li

我还没有学会写个人说明!

暂无评论

相关推荐