该笔记使用斯坦福的tensorflow课程CS20SI作为教程,可以在https://web.stanford.edu/class/cs20si/syllabus.html获得相关资源
为什么要学习tensorflow
因为tensorflow是目前最流行的开源深度学习框架,由google开发,跨平台且具有良好的可移植性。 当然是因为用的人多,资料好找,例子大把大把的。国外都不流行的框架,国内想耍肯定不容易。此外,使用python的api也是原因之一,毕竟好上手嘛。
安装并使用tensorflow
安装教程: https://www.tensorflow.org/install/
跟着官方的说明走走就是了,但如果要安装gpu版的,有些地方就要注意了。
http://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html#system-requirements
参考这个网址,建议选择其中的发行版,跟着教程安装cuda和cudnn(我就因为linux本身的问题导致opengl出了问题,不过貌似没啥影响)。
安装成功后,打开终端的python命令行,如果下面这行代码不报错,差不多就成功了。
import tensorflow as tf
如果有问题就慢慢查资料吧~
基本概念: 张量(tensor)
张量(tensor)是一个n维的数组
- 0维的tensor是一个标量(scalar)
- 1维的tensor是一个向量(vector)
- 2维的tensor是一个矩阵(matrix)
基本概念: 图(Graph)和会话(Session)
图(Graph)是计算过程的组合,会话(Session)则用于启动Graph。
一个简单的graph:
a = tf.add(1, 2)
这行代码会让tensorflow自动将x,y分别赋值为1,2。至于为什么是x和y?当没有手动指定时,默认就是这样。
要注意的是,a的值不是3,要得到3,需要使用session。
a = tf.add(1, 2)
sess = tf.Session()
print(sess.run(a))
sess.close()
也有另一种写法:
a = tf.add(1, 2)
with tf.Session() as sess:
print(sess.run(a))
每个graph都包含数个节点(nodes),这些node有多种类型
- 常量(constant)
- 变量(variable)
- 运算符(operator)
- 占位符(placeholder)
而连接node之间的线(edges),则在nodes之间传递tensor
来看一个大点的graph:
x = 2
y = 3
add_op = tf.add(x, y)
multiply_op = tf.multiply(x, y)
useless = tf.multiply(x, add_op)
pow_op = tf.pow(op2, op1)
with tf.Session() as sess:
sess.run(pow_op)
在这段代码中,useless这个运算符并不会被用到,session不会计算无用的值
当然,在tensorflow中,一个完整的图可以被分成多块,由多个不同设备进行运算。