预备任务
- tensorflow安装
推荐Anaconda(针对自己操作系统和位数下载对应版本);推荐用conda create创建对应的python环境(注:某些python版本可能不支持tensorflow);通过pip install来安装tensorflow。
参考:
tensorflow安装教程 http://www.tensorflownews.com/series/tensorflow-install-tutorial/
-
tensrflow基础
关注图、会话、tensor、变量、feed和fetch。
使用图(graphs)来表示计算任务、在被称之为会话(Session)的上下文(context)中执行图、使用tensor表示数据、通过变量(Variable)维护状态;使用feed和fetch为任意的操作赋值或者从其中获取数据。参考:
TENSORFLOW从入门到精通之——TENSORFLOW基本操作 :http://www.tensorflownews.com/2018/03/28/tensorflow_base/
tensorflow简介: http://wiki.jikexueyuan.com/project/tensorflow-zh/get_started/introduction.html
tensorflow基本使用 :http://wiki.jikexueyuan.com/project/tensorflow-zh/get_started/basic_usage.html
莫凡tensorflow :https://morvanzhou.github.io/tutorials/machine-learning/tensorflow/TensorFlow-Examples: https://github.com/aymericdamien/TensorFlow-Examples(关注Hello World、Basic Operations、Linear Regression、Simple Neural Network)
史上最全的Tensorflow学习资源汇总: https://zhuanlan.zhihu.com/p/35515805
-
NLP
微软周明:自然语言处理的历史与未来 http://zhigu.news.cn/2017-06/08/c_129628590.html
Tensorflow结构
Tensorflow的基本使用
import tensorflow as tf
# 创建一个常量 op, 产生一个 1x2 矩阵. 这个 op 被作为一个节点
# 加到默认图中.
#
# 构造器的返回值代表该常量 op 的返回值.
matrix1 = tf.constant([[3., 3.]])
# 创建另外一个常量 op, 产生一个 2x1 矩阵.
matrix2 = tf.constant([[2.],[2.]])
# 创建一个矩阵乘法 matmul op , 把 'matrix1' 和 'matrix2' 作为输入.
# 返回值 'product' 代表矩阵乘法的结果.
product = tf.matmul(matrix1, matrix2)
Tensorflow使用图来表示计算任务
TensorFlow 是一个编程系统, 使用图来表示计算任务. 图中的节点被称之为op(operation)
Tensor
一个 op(operation)获得 0 个或多个 Tensor, 执行计算, 产生 0 个或多个 Tensor. 每个 Tensor 是一个类型化的多维数组.
会话 (Session)
图必须在会话 (Session)里被启动. 会话 将图的 op(operation) 分发到诸如 CPU 或 GPU 之类的 设备 上, 同时提供执行 op 的方法. 这些方法执行后, 将产生的 tensor 返回. 在 Python 语言中, 返回的 tensor 是 numpy ndarray对象; 在 C 和 C++ 语言中, 返回的 tensor 是 tensorflow::Tensor 实例.
Session 对象在使用完后需要关闭以释放资源. 可以使用 “with” 代码块 来自动完成关闭动作.
with tf.Session() as sess:
result = sess.run([product])
print result
变量
在TensorFlow中,变量(Variable)是特殊的张量(Tensor),它的值可以是一个任何类型和形状的张量。与其他张量不同,变量存在于单个 session.run 调用的上下文之外,也就是说,变量存储的是持久张量,当训练模型时,用变量来存储和更新参数。除此之外,在调用op之前,所有变量都应被显式地初始化过。
import tensorflow as tf
v = tf.Variable([1,2,3]) #创建变量v,为一个array
print(v) #查看v的shape,不是v的值。结果是: <tf.Variable 'Variable:0' shape=(3,) dtype=int32_ref>
with tf.Session() as sess:
sess.run(v.initializer) #运行变量的initializer。调用op之前,所有变量都应被显式地初始化过。
sess.run(v) #查看v的值,结果是:array([1, 2, 3])
除了我们自己填写变量的值外,一般可以使用TensorFlow提供了一系列操作符来初始化张量,初始值是常量或是随机值。
r = tf.Variable(tf.random_normal([20, 10], stddev=0.35)) #以标准差0.35的正太分布初始化一个形状为[20,40]的张量
z = tf.Variable(tf.zeros([20])) #初始化一个形状为[20]的张量, 里面的元素值全部为0.
Fetch
为了取回操作的输出内容, 可以在使用 Session 对象的 run() 调用 执行图时, 传入一些 tensor, 这些 tensor 会帮助你取回结果.你也可以在 op 的一次运行中一起获得多个 tensor而不是逐个去获取 tensor。
input1 = tf.constant(3.0)
input2 = tf.constant(2.0)
input3 = tf.constant(5.0)
intermed = tf.add(input2, input3)
mul = tf.mul(input1, intermed)
with tf.Session() as sess:
result = sess.run([mul, intermed])
print result
# 输出:
# [ 21., 7.]
Feed
TensorFlow 还提供了 feed 机制, 该机制 可以临时替代图中的任意操作中的 tensor 可以对图中任何操作提交补丁, 直接插入一个 tensor.feed 使用一个 tensor 值临时替换一个操作的输出结果. 你可以提供 feed 数据作为 run() 调用的参数. feed 只在调用它的方法内有效, 方法结束, feed 就会消失. 最常见的用例是将某些特殊的操作指定为 “feed” 操作, 标记的方法是使用 tf.placeholder() 为这些操作创建占位符.
#创建占位符
input1 = tf.placeholder(tf.float32)
input2 = tf.placeholder(tf.float32)
output = tf.mul(input1, input2)
with tf.Session() as sess:
#feed的数据一字典的形式传入
print sess.run([output], feed_dict={input1:[7.], input2:[2.]})
# 输出:
# [ 14.]