TensorFlow概要&核心概念&实现原理

课堂学习笔记

核心概念

  • 计算图
    • 又称为有向图,数据流图
      • 数据流图用“结点”(nodes)和“线”(edges)的有向图来描述数学计算。
      • “节点” 一般用来表示施加的数学操作,但也可以表示数据输入(feed in)的起点/输出(push out)的终点,或者是读取/写入持久变量(persistent variable)的终点。
      • “线”表示“节点”之间的输入/输出关系。这些数据“线”可以输运“size可动态调整”的多维数据数组,即“张量”(tensor)。
      • 张量从图中流过的直观图像是这个工具取名为“Tensorflow”的原因。一旦输入端的所有张量准备好,节点将被分配到各种计算设备完成异步并行地执行运算。
import tensorflow as tf
# 导入数据集
from tensorflow.examples.tutorials.mnist import input_data

mnist = input_data.read_data_sets("MNIST_data", one_hot=True)

# 建立模型
x = tf.placeholder(tf.float32, [None, 784])  # x为输入网络的图像
W = tf.Variable(tf.zeros([784, 10]))  # 权重值
b = tf.Variable(tf.zeros([10]))  # 偏置量
y = tf.nn.softmax(tf.matmul(x, W) + b)  # 模型,y为预测的概率分布

# 训练模型
# 损失函数为交叉熵
y_ = tf.placeholder(tf.float32, [None, 10])  # y'是实际的分布
cross_entropy = -tf.reduce_sum(y_ * tf.log(y))  # 计算交叉熵
# 下降方法为梯度下降法,学习速率为0.01
optimizer = tf.train.GradientDescentOptimizer(0.01)
# 训练目标:最小化损失函数
train_step = optimizer.minimize(cross_entropy)

# 测试模型
correct_prediction = tf.equal(tf.argmax(y, 1), tf.argmax(y_, 1))  # 检测预测是否和实际值匹配
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))  # 确定正确预测项的比例

# 实际训练
sess = tf.InteractiveSession()  # 建立交互式会话
tf.global_variables_initializer().run()  # 初始化所有变量
for i in range(1000):  # 让模型循环训练1000次
    # 随机抓取训练数据中的100个批处理数据点,用来进行随机梯度下降训练
    batch_xs, batch_ys = mnist.train.next_batch(100)  # 获得一批100个数据
    sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys})  # 给训练模型提供输入和输出
    if i % 50 == 0:
        print(sess.run(accuracy, feed_dict={x: mnist.test.images, y_: mnist.test.labels}))
  • 操作
    • 一个运算操作代表了一种类型的抽象运算,比如矩阵乘法或向量加法
    • 一个运算操作可以有自己的属性,但是所有属性都必须被预先设置,或者能够在创建计算图时根据上下文推断出来
    • 通过设置运算操作的属性可以用来支持不同的tensor元素类型,比如让向量加法支持浮点数或者整数
    • 运算核是一个运算操作在某个具体的硬件的实现
    • 在tf中,可以通过注册机制加入新的运算操作或者为已有的运算操作添加新的计算核
  • 变量
    • 当训练模型时,用变量 来存储和更新参数。变量包含张量(tensor)存放于内存的缓存区。建模时,它们需要被明确地初始化,模型训练后它们必须被存储到磁盘。这些变量的值可在之后模型训练和分析时被加载。
    • 创建
      • 当创建一个变量时,你将一个张量作为初始值传入构造函数Variable()。Tensorflow提供一系列的操作符来初始化张量,初始值是常量或者是随机值
      • 所有这些操作符都需要指定张量的shape。那个形状自动成为变量的shape。变量的shape通常是固定的,但tf提供了高级的机制来重新调整其行列数
    • 初始化
      • 一次性全部初始化
      • 自定义初始化
      • 由另一个变量初始化
  • 会话
    • 创建和运行计算图

实现原理

  • TensorFlow有一个重要组件client,也就是客户端,它通过Session的接口与master以及多个worker相连接。每一个worker可以与多个硬件设备相连,比如CPU和GPU,并负责管理这些硬件。Master则负责指导所有的worker按照流程执行计算图。
  • TensorFlow有单机模式和分布式模式。
发布了56 篇原创文章 · 获赞 11 · 访问量 2425

猜你喜欢

转载自blog.csdn.net/weixin_43056275/article/details/102459668