***说明:我的博客只是自己的学习笔记,供自己整理和复习使用。若有瑕疵,欢迎指教。
***第一次笔记,其实是整理思路,基本没有代码。。。
***question 1:What is tensorflow ? (The definition on the Internet is ... there are lots of definitions. I won't talk about them any more.)Actually, I am not very clear about it.
但就这几次的学习来看,tensorflow是一种在python的基础上再次封装的(这里的封装指的是数据包,函数包,以及tensorflow自己独特的框架包)便于用于大量数据分析和机器学习的框架(甚至对于初学者可以看作一门语言)。
***question 2 : Why did I think it is a kind of language?
之前我已经学了C语言(一种典型的面向过程的编程语言,在相关的测试题和操作系统的层面上用的尤为突出),C++和Java(Java不是很熟)(典型的面向对象的语言(其实所谓的对象主要归功与class的出现与运用),在进行App开发的时候尤为突出),python(一种相比于前几种语言都要“随意的语言”,因为python很便于数据段分析)
而tensorflow的编程完全是另一种“思维”(“构图”+“运行”),所以你千万不要按照以往的任何C或者C++的习惯去理解tensorflow的代码。
一、tensorflow的运行机制
下面是 graph , session , operation , tensor 四个概念的简介。
Tensor:类型化的多维数组,图的边;
Operation:执行计算的单元,图的节点;
Graph:一张有边与点的图,其表示了需要进行计算的任务;
Session:称之为会话的上下文,用于执行图。
import tensorflow as tf
# Build a graph.
a = tf.constant(5.0)
b = tf.constant(6.0)
c = a + b
# Launch the graph in a session.
sess = tf.Session()
print(sess.run(c))
二、tensorflow的“构图”要点
但是在最开始我学习的时候,被这些变量弄糊涂了,因为在过去的学习中,从来没有看见过这些。
t = tf.constant(42.0)
f = tf.Variable(3,name='foo')
d = tf.placeholder(tf.int32,shape=[1],name='dif')
那这些到底是什么呢??
我把他们看作是tensorflow自己封装的“变量类型”:
为什么说是“变量类型”呢?因为在tensorflow中,不再单独有我们熟悉的int、float、char、string等类型,所有变量首先应该是上面的三种类型。
tf.constant(42.0)
这是常量类型,具体可以表示很多变量(数字,string等等)具体要你里面放的是什么。
f = tf.Variable(3,name='foo')
这是变量类型(这是真的变量),这种类型的数据才是我们在C,C++中见到的正常的变量(即创建变量时分配存储空间,可以重新赋值,可以用在运算中)
d = tf.placeholder(tf.int32,shape=[1],name='dif')
这是“占位符”类型,这种类型的变量其实没有具体的“值”,只是一个空架子,它的作用是:在运行阶段中,可以直接赋值(把变量塞进这个空架子里),但是一旦用完后直接清除掉,不会保存数据。(但是我们在后面会发现,因为tensorflow用于大量的数据分析,这种“架子”其实很方便)
***重点来了(彩蛋来了)
那为什么我们要定义这些“变量类型”呢?有什么意义呢?
因为在tensorflow中我们往往会用到比较复杂的数学运算(像矩阵运算,高维运算),对应的数据结构也很复杂。
但是上面三种“变量”,都可以帮助我们非常方便的定义(声明)复杂的数据结构。
例如:
W = tf.Variable(tf.zeros([784, 10]))
那么这段代码,马上就定义了一个784*10的全为0矩阵(具体Valiable和placeholder的声明其实比较复杂,可以参见:https://my.oschina.net/yilian/blog/659618)
三、tensorflow的“运行”要点
http://blog.csdn.net/helei001/article/details/51750910
暂时先写到这里吧
第二次准备做一个关于“三种变量类型”的专题(以代码为主)(毕竟要先把基础打好)
估计暂时不会更新,因为总结基础很繁琐,我先往前学,等有时间在更。