美文网首页
基本用法

基本用法

作者: Ziv_紫藤花开 | 来源:发表于2019-01-11 19:05 被阅读10次

TensorFlow使用图(graph)表示计算任务,图中的节点被称为op。一个Tensor一般为一个类型化的多维数组,一个op获得零个或多个数据(Tensor)后,在会话(session)的上下文(context)中将图的op分发给CPU或GPU,同时提供执行op的方法执行计算,结果产生零个或多个Tensor。使用Variable表示变量,用来维护状态。Fetch取回操作的输出内容,Feed可以对图中任意op操作直接插入一个tensor替换图中原有操作。

节点(operation)

节点被称之为op(节点也叫操作、算子,是operation的缩写)。一个op获得0个或多个tensor,执行计算产生0个或多个tensor

张量数据(tensor)

TensorFlow,字面意思就是张量的流动(flow),即保持计算节点不变,让数据进行流动。tensor是一个数据类型是一个多维数组

图(graph)

节点和边相互连接成计算图,一个计算图描述了一次计算过程。

会话(session)

计算图必须在会话里被启动。会话将计算图的op分发到诸如CPU或GPU之类的设备上,同时提供执行op的方法。这些方法执行后,将产生的tensor返回。
在Python语言中, 返回的tensor是numpy ndarray对象;
在C和C++语言中,返回的tensor是tensorflow Tensor实例。

详细说明

构建图

构建图的第一步, 是创建源 op (source op). 源 op 不需要任何输入, 例如 常量 (Constant). 源 op 的输出被传递给其它 op 做运算。

import tensorflow as tf

# ---------------- 构建图 ----------------
# 1*2常量矩阵op
matrix1 = tf.constant([[3., 3.]])
# 2*1常量矩阵op
matrix2 = tf.constant([[2.], [2.]])
# matmul矩阵乘法op
product = tf.matmul(matrix1, matrix2)

启动图

图的启动只能在Session中启动计算,无任何创建参数, 会话构造器将启动默认图。tf.device("/gpu:1")用于指派使用GPU进行计算。

# ---------------- 启动图 ----------------
# 会话session启动
sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))
result = sess.run(product)
print(result)

# 任务完成关闭会话
sess.close()

Session 对象在使用完后需要关闭以释放资源. 除了显式调用 close 外, 也可以使用 "with" 代码块 来自动完成关闭动作.

with tf.Session() as sess:
  result = sess.run([product])
  print result

数据类型和操作

张量-Tensor

张量tensor是一个n维的数组或列表,有一个静态类型和动态类型的维数。张量可以在图中的节点之间流通。
TensorFlow 文件编制中通过三种符号约定来描述张量维度(Shape):阶,形状和维数。
张量的阶:与矩阵的阶不同,张量的阶仅是张量维数的一个数量描述。
0阶 -> 纯量(常量数字,只有大小) -> a = 483
1阶 -> 向量(线,有大小和方向) -> b = [1, 2, 3]
2阶 -> 矩阵(二维平面,数据表,矩阵) -> c = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
3阶 -> 立体(三维数据,立方矩阵) -> [[[1], [2], [3]], [[4], [5], [6]], [[7], [8], [9]]]
更高阶…
张量的形状:张量的形状是每个维度中元素的数量。TensorFlow 在图的构建过程中自动推理形状。这些推理的形状可能具有已知或未知的阶。如果阶已知,则每个维度的大小可能已知或未知。

张量的数据类型

数据类型 Python类型 描述
DT_FLOAT tf.float32 32位浮点数
DT_DOUBLE tf.float64 64位浮点数
DT_INT8 tf.int8 8位有符号整形
DT_INT16 tf.int16 16位有符号整形
DT_INT32 tf.int32 32位有符号整形
DT_INT64 tf.int64 64位有符号整形
DT_UINT8 tf.uint8 8位无符号整形
DT_STRING tf.string 可变程度的字节数组,每一个张量元素都是一个字节数组
DT_BOOL tf.bool 布尔型
DT_COMPLEX64 tf.complex64 复数: 由两个32位浮点数组成
DT_QINT8 tf.qint8 用于量化Ops的8位有符号整形
DT_QINT32 tf.qint32 用于量化Ops的32位有符号整形
DT_QUINT8 tf.quint8 用于量化Ops的8位无符号整形
变量-Variables

创建一个变量tf.Variable,变量维护图执行过程中的状态信息,tf.assign真正执行赋值操作

# 创建一个变量并初始化为标量 0
state = tf.Variable(0, name="counter")

one = tf.constant(1)
new_value = tf.add(state, one)
update = tf.assign(state, new_value)

init = tf.initialize_all_variables()

with tf.Session() as _sess:
    _sess.run(init)
    print(_sess.run(state))
    for _ in range(3):
        _sess.run(update)
        print(_sess.run(state))
Fetch

取回操作的输出内容

input1 = tf.constant(3.0)
input2 = tf.constant(2.0)
input3 = tf.constant(5.0)
intermed = tf.add(input2, input3)
mul = tf.multiply(input1, intermed)

with tf.Session() as sess:
    result = sess.run([mul, intermed])
    print(result)
Feed

feed 机制可以临时替代图中的任意操作中的 tensor 可以对图中任何操作提交补丁, 直接插入一个 tensor。feed 只在调用它的方法内有效, 方法结束, feed 就会消失。最常见的用例是使用 tf.placeholder() 为操作标记创建占位符

input4 = tf.placeholder(tf.float32)
input5 = tf.placeholder(tf.float32)

output = tf.add(input4, input5)

with tf.Session() as sess:
    print(sess.run([output], feed_dict={input4: [7.], input5:[2.]}))

常见错误

  1. module 'tensorflow' has no attribute
    如果你是参考TensorFlow中文社区的学习教程,一定是你经常看到的错误,原因是新版本的TensorFlow修改了许多函数的名字,本文示例已经修正,不完全整理如下
tf.sub()更改为tf.subtract()
tf.mul()更改为tf.multiply()
tf.types.float32更改为tf.float32
tf.pact()更改为tf.stact()

相关文章

  • 定时器

    setTimeout和clearTimeout基本用法 setInterval和clearInterval基本用法...

  • 2019-11-16

    E战到底DAY14 SUMIF和SUMIFS函数 一.基本用法 SUMIF基本用法 SUMIFS基本用法 SUMI...

  • 11 - 动态数据绑定实现原理

    一、defineProperty 基本用法 1、基本写法: 2、参数 3、descriptor 参数的基本用法 1...

  • as 基本用法

    插件安装 plugin auto import 相当于 eclipse ctrl+o 或者as alt+enter...

  • 基本用法

    Installation 安装 npm install vue vue-server-renderer --sav...

  • 基本用法

    html css js

  • 基本用法

    本地与远程:push 命令会把本地仓库推送到远程仓库(比如gitbub,码云)在push之前要与某个远程仓库建立连...

  • 基本用法

    TensorFlow使用图(graph)表示计算任务,图中的节点被称为op。一个Tensor一般为一个类型化的多维...

  • "?.","??","??=","!"基本用法

    空值合并操作符( ?? )ES2020 const a = b ?? c; // 解释为 如果b为null或un...

  • 查找函数(Vlookup、Hlookup、Index、Match

    查找函数(Vlookup、Hlookup、Index、Match) 一、基本用法 (1)、VLOOKUP的基本用法...

网友评论

      本文标题:基本用法

      本文链接:https://www.haomeiwen.com/subject/zjhfdqtx.html