《CS224n学习笔记7》TensorFlow入门

本文详细介绍TensorFlow的基础概念,包括图计算模型、变量、占位符和运算单元的使用。并通过实例演示如何构建计算图,执行session进行模型训练,以及资源在多GPU间的共享策略。
  1. TensorFlow是一个 描述机器学习算法 和 实现机器学习算法的接口。
  2. 图计算编程模型:
    中心思想是 将数值运算以图的形式描述
    1)图的节点是某种运算,支持任意数量的输入和输出;
    2)图的边是tensor(张量,n维数组),在节点之间流动。
    变量:variable。w和b是变量,变量通常是模型的参数。变量可以存储下来,作为模型的一部分发布。
    占位符:placeholder。例如x。只在执行的时候填充输入,编程的时候指定大小即可。
    运算单元
  3. 描述计算图
    1)Create weights, including initialization
    W ~ Uniform(-1, 1) ; b = 0
    2)Create input placeholder x
    m * 784 matrix
    3)Build flow graph
import tensorflow as tf

b = tf.Variable(tf.zeros((100, )))
W = tf.Variable(tf.random_uniform((784, 100), -1, 1))

x = tf.placeholder(tf.float32, (100, 784))

h = tf.nn.relu(tf.matmul(x, W) + b)

TensorFlow根据数学表达式自动构造运算图。
4. 执行
通过session将图部署到某个执行环境(CPU、GPU等)
session就是到某个软硬件执行环境的绑定。

sess = tf.Session()
sess.run(tf.initialize_all_variables())
sess.run(h, {x: np.random.random(100, 784)})

sess.run(fetches.feeds)的说明:
fetches:是一系列图节点(or称为 变量)。因为图是联通的,给一个节点 即可找到所有节点。
feeds:是一个从placeholder到其输入值的映射。
英文解释
Getting output
sess.run(fetches, feeds)
Feeds:Dictionary mapping from graph nodes to concrete values.
Specifies the value of each graph node given in the dictionary
5. 训练模型
5.1 定义损失
用变量定义损失,用placeholder定义label。

prediction = tf.nn.softmax(...)  # Output of neural netword
label = tf.placeholder(tf.float32, [100, 10])

cross_entroy = -tf.reduce_sum(label * tf.log(prediction), axis=1)

5.2 计算梯度
先初始化一个optimizer, 然后在图中损失函数节点后面添加一个优化操作(最小化,也是一种运算节点)

train_step = tf.tfain.GradientDescentOptimizer(0.5).minize(cross_entropy)

代码中是这样调用的

Training the Mode
sess.run(train_step, feeds)

1)Create Session
2)Build training schedule
3)Run train_step
sess = tf.Session()
sess.run(tf.initialize_all_variables())

for i in range(1000):
    batch_x, batch_label = data.next_batch()
    sess.run(train_step, feed_dict={x: batch_x,
                                    label: batch_label}

5.3 资源共享
有时想要 生成一张图的多个实例 or 在多个GPU上训练同一个模型,
所以 实现同一个变量在不同位置出现/ 如何在不同位置共享同一个变量?
TF支持命名空间

with tf.variable_scope("foo"):
    v = tf.get_variable("v", shape=[1])  # v.name == "foo/v:0"
with tf.variable_scope("foo", reuse=True):
    v1 = tf.get_variable("v"))      # Shared variable found!
with tf.variable_scope("foo", reuse=False):
    v1 = tf.get_variable("v"))      # CRASH foo/v:0 already exists!
  1. TF用法总结:
    1)创建图
    1.1)前向传播/预测
    1.2)优化操作
    2)初始化session
    3)在session中执行

链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值