Skip to main content

TF入门:关于图的我的理解

    TensorFlow以下简称TF,里面很多华丽的新词汇,什么基于数据流图,什么张量等等,而且TF的代码编写方式大大出乎初学者的意料,和我们以前传统的编写代码方式很不同,初学一头雾水。。我先讲一下我理解的概念:
    先说什么是图。
    先扯远一些,说说编码历史。
    最初我们编码需要自己写一个流程图,上面有什么判断循环之类的图形和线条,然后我们按照流程图的思路编写代码。后来随着系统越来越复杂,产生了类的概念,我们像搭积木一样,利用类组建编程。这时候,设计的一个个类是静止的,只有在函数里面引用或者在主函数里面调用,才会运行这些积木。再往后,又将各种类打包,形成类库的概念,此时编程就是模块化编程。我们看到,基本代码在一层层的被封装,看起来变得更容易使用,但是产生的很多新东西需要我们接受,理解并花时间去学习。
    我们知道神经网络就是一个个节点,权重关系和激活函数组成的,构成就这么简单,在设计神经网络之前,我们往往要规划网络的节点数,权重等,就像画出网络图一样:
    我们编程的时候,就像画图或者设计图一样,先产生一个个的节点或权重变量,这部分代码运行所在空间,就是图,貌似很酷很炫的名字。而数据在节点之间的来回传递,就是数据流。基于这个牵强的图概念和数据的流动,就是所谓的数据流图。
    简单说一下什么是张量,有一个炫酷高深的名词。
说白了就是几维的数据。一个数字是标量:0维,两个成对的是向量:1维,一个表格是矩阵:2维,向上还有3维4维的数据,成为n维数据,都可以称为张量,事实上经常将3维以上的称为张量。其实就是数据的一种格式。


Comments

Popular posts from this blog

Session Run的用法

feed_dict参数的作用是替换图中的某个tensor的值。例如: a = tf.add(2, 5)                        #a=7 b = tf.multiply(a, 3)                 #b=3*7=21 with tf.Session() as sess:     print(sess.run(b))     replace_dict = {a:15}           #用15代替b算式中的a     print(sess.run(b, feed_dict = replace_dict)) --------------------- 输出如下: 21 45

tf.split用法

按照行或者列分割一个矩阵 第一个参数是待切分的张量,第二个是切分的大小,共切分为三个,每一个分别为4列,15列,11列。第三个参数为1表示按照列切分,为0表示按照行切分。 切分的子块的大小加起来应该等于母块的大小。比如这个例子,4+15+11=30列 看下面的代码例子

谈axis

Python和TF张量计算中经常见的形参,代表什么意思呢?     首先请看一下官方帮助的解释:     轴用来为超过一维的数组定义的属性,二维数据拥有两个轴:第0轴沿着行的垂直往下,第1轴沿着列的方向水平延伸。如下图     注意看,官方对于0和1的解释是轴,也就是坐标轴。而坐标轴是有方向的,所以千万不要用行和列的思维去想axis,因为行和列是没有方向的,这样想会在遇到不同的例子时感到困惑。     根据官方的说法,1表示横轴,方向从左到右;0表示纵轴,方向从上到下。当axis=1时,数组的变化是横向的,而体现出来的是列的增加或者减少。我们拿图形举个例子:     我们有一个正方形,假设是4x4的     接下来我们让他横向增加一个单位,也就是长度+1,变成了一个5x4的长方形 也就是说,对于这个4x4的正方形而言,当axis=1时,体现的是横向的长度+1,而如果这是一个4行4列的二维数组同样也是如此,但是体现出来是增加了一列。     所以其实axis的重点在于方向,而不是行和列。具体到各种用法而言也是如此。当axis=1时,如果是求平均,那么是从左到右横向求平均;如果是拼接,那么也是左右横向拼接;如果是drop,那么也是横向发生变化,体现为列的减少。 当考虑了方向,即axis=1为横向,axis=0为纵向,而不是行和列,那么所有的例子就都统一了。题主的疑问也就迎刃而解。