四时宝库

程序员的知识宝库

什么是TensorFlow中的Tensor?(tensorflow属于什么)

Tensorflow的名称直接来自其核心框架:Tensor 。在Tensorflow中,所有计算都涉及张量。张量是n维的向量或矩阵,表示所有类型的数据。张量中的所有值都保持具有已知(或部分已知)形状的相同数据类型 。数据的形状是矩阵或数组的维数。

张量可以源自输入数据或计算结果。在TensorFlow中,所有操作都在图内部进行 。图是一组连续发生的计算。每个操作都称为操作节点,并相互连接。

图概述了节点之间的操作和连接。但是,它不显示值。节点的边缘是张量,即用数据填充操作的方法。

机器学习涉及从数据中学习基础模式。学习阶段需要选择大量的向量。每个向量都是数据的简化或测量观察到的现象的方法。这些特征向量将用于训练机器学习模型,您可以从此机器学习模型预测未来值。

在机器学习中,模型被提供一个称为特征向量的对象列表 。特征向量可以是任何数据类型。特征向量通常是填充张量的主要输入。这些值将通过张量流入op节点,此操作/计算的结果将创建一个新的张量,该张量又将用于新的操作。所有这些操作都可以在图中查看。

张量的表示

在TensorFlow中,张量是n维的特征向量(即数组)的集合。例如,如果我们有一个2x3矩阵,其值为1到6,我们这样写:

TensorFlow将此矩阵表示为:?

[[1, 2, 3], [4, 5, 6]]?

[[1, 2, 3], [4, 5, 6]]

如果我们创建一个值为1到8的三维矩阵,我们有:

TensorFlow将此矩阵表示为:

[ [[1, 2],

[[3, 4],

[[5, 6],

[[7,8] ]

注意:张量可以用标量表示,也可以有三维以上的形状。可视化更高维度级别更加复杂。

张量的类型

在TensorFlow中,所有计算都通过一个或多个张量。张量是一个具有三个属性的对象:

  • 唯一标签(name)
  • 维度(shape)
  • 数据类型(dtype)

您将使用TensorFlow执行的每个操作都涉及张量的操作。您可以创建四个主要张量:

  • tf.Variable
  • tf.constant
  • tf.placeholder
  • tf.SparseTensor

在本教程中,您将学习如何创建tf.constant和a tf.Variable 。

在我们完成本教程之前,请确保使用TensorFlow激活conda环境。我们命名了环境为hello-tf 。

对于MacOS用户:

source activate hello-tf

对于Windows用户:

activate hello-tf

完成后,您就可以导入了 tensorflow

# Import tf
import tensorflow as tf
/Users/Thomas/anaconda3/envs/hello-tf/lib/python3.6/importlib/_bootstrap.py:219: RuntimeWarning: compiletime version 3.5 of module 'tensorflow.python.framework.fast_tensor_util' does not match runtime version 3.6
 return f(*args, **kwds)

创建一个n维张量

首先创建一个具有一个维度的张量,即标量。

要创建张量,您可以使用 tf.constant()

要创建维度0的张量,请运行以下Python代码

每个张量由张量名称显示。每个张量对象都使用唯一标签(name),维度(shape)和数据类型(dtype)定义。

您可以通过更改数据类型来定义具有十进制值或字符串的张量。

可以创建维度为1的张量,如下所示:

您可以注意到形状仅由1列组成。

要创建2维的数组,需要在每行后关闭括号。请查看以下示例

矩阵有2行2列,填充值1,2,3,4。

一个有三维空间的矩阵是由另一层的方括号组成的。

矩阵看起来像图2.

张量的形状

打印张量时,TensorFlow会猜测形状。但是,您可以使用shape属性获得张量的形状。

在下面,您构建一个填充了10到15之间的数字的矩阵,并检查 m_shape形状

矩阵有3行2列。

TensorFlow具有用于创建向量或填充为0或1的矩阵的命令。例如,如果要创建具有10的特定形状的1-D张量,填充0,则可以运行以下代码:

# Create a vector of 0
print(tf.zeros(10))
Tensor("zeros:0", shape=(10,), dtype=float32)

该属性也适用于矩阵。在这里,您创建一个填充为1的10x10矩阵

# Create a vector of 1
print(tf.ones([10, 10]))
Tensor("ones:0", shape=(10, 10), dtype=float32)

您可以使用给定矩阵的形状来生成ones向量。矩阵m_shape是3x2维度。您可以使用以下代码创建一个由one’s 填充的3行的张量:

# Create a vector of ones with the same number of rows as m_shape
print(tf.ones(m_shape.shape[0]))
Tensor("ones_1:0", shape=(3,), dtype=float32)

如果把1的值传递到括号里,你就可以在矩阵m_shape中创建等于数列的ones向量。

# Create a vector of ones with the same number of column as m_shape
print(tf.ones(m_shape.shape[1]))
Tensor("ones_2:0", shape=(2,), dtype=float32)

最后,您可以创建一个矩阵3x2

print(tf.ones(m_shape.shape))
Tensor("ones_3:0", shape=(3, 2), dtype=float32)

数据类型

张量的第二个属性是数据类型。张量一次只能有一种类型的数据。张量只能有一种类型的数据。您可以使用属性返回类型dtype 。

print(m_shape.dtype)
<dtype: 'int32'>

在某些情况下,您想要更改数据类型。在TensorFlow中,可以使用tf.cast方法。

下面,使用cast方法将浮点张量转换为整数

# Change type of data
type_float = tf.constant(3.123456789, tf.float32)
type_int = tf.cast(type_float, dtype=tf.int32)
print(type_float.dtype)
print(type_int.dtype)
<dtype: 'float32'>
<dtype: 'int32'>

在创建张量期间未指定参数时,TensorFlow会自动选择数据类型。TensorFlow将猜测最可能的数据类型。例如,如果你传递一个文本,它会猜测它是一个字符串并将其转换为string 。

创建操作

一些有用的TensorFlow运算符

TensorFlow包含所有基本操作。你可以从一个简单的开始。您将使用TensorFlow方法计算数字的平方。此操作很简单,因为构造张量只需要一个参数。

一个数字的平方是用tf.sqrt(x)构造的,x是一个浮点数。

x = tf.constant([2.0], dtype = tf.float32)
print(tf.sqrt(x))
Tensor("Sqrt:0", shape=(1,), dtype=float32)

注意:输出返回张量对象而不是2的平方结果。在示例中,您打印张量的定义而不是操作的实际评估。在下一节中,您将了解TensorFlow如何执行操作。

以下是常用操作列表。每个操作都需要一个或多个参数。

  • tf.add(a, b)
  • tf.substract(a, b)
  • tf.multiply(a, b)
  • tf.div(a, b)
  • tf.pow(a, b)
  • tf.exp(a)
  • tf.sqrt(a)

代码说明

创建两个张量:

  • 一个张量拥有1和2
  • 一个张量拥有3和4

你对两个张量加上。

注意 :两个张量都需要具有相同的形状。您可以在两个张量上执行乘法运算。

变量

到目前为止,您只创建了张量。它没有多大用处。数据总是以不同的值,你可以使用Variable类。它将代表一个节点,这里的值总是会变化。

要创建变量,可以使用tf.get_variable()方法

如果指定了初始化,则不需要包含values,因为使用的是initializer的形状。

例如,下面的Python代码创建了一个带有两个随机值的二维变量。默认情况下,TensorFlow返回随机值。将变量命名为var

# Create a Variable
## Create 2 Randomized values
var = tf.get_variable("var", [1, 2])
print(var.shape)
(1, 2)

您将创建一个包含一行和两列的变量。您需要使用[1,2]来创建变量的维度

张量的初始值为零。例如,在训练机器学习模型时,需要使用初始值来计算特征的权重。在下面,您将这些初始值设置为零。

var_init_1 = tf.get_variable("var_init_1", [1, 2], dtype=tf.int32,
 initializer=tf.zeros_initializer)
print(var_init_1.shape)
(1, 2)

您可以在变量中传递常量张量的值。使用tf.constant()方法创建常量张量 。您使用此张量初始化变量。

变量的第一个值是10,20,30和40.新张量的形状为2x2。

占位符

占位符用于初始化数据流(在张量内部)。要提供占位符,您需要使用方法feed_dict 。占位符仅在会话期间提供。

在下一个示例中,您将了解如何使用方法tf.placeholder 创建占位符。

语法是:

会话

TensorFlow主要处理3个主要组件:

  • 图(Graph)
  • 张量(Tensor)
  • 会话(Session)

图和会话是独立的。您可以运行会话并获得稍后用于进一步计算的值。

在下面的示例中,您将:

  • 创建两个张量
  • 创建一个操作
  • 打开一个会话
  • 打印结果

步骤1)您创建两个张量x和y

## Create, run and evaluate a session
x = tf.constant([2])
y = tf.constant([4])

步骤2)您通过将x和y相乘来创建操作符

## Create operator
multiply = tf.multiply(x, y)

步骤3)您打开一个会话。所有计算都将在会话中进行。完成后,您需要关闭会话。

## Create a session to run the code
sess = tf.Session()
result_1 = sess.run(multiply)
print(result_1)
sess.close()
[8]

代码说明

  • tf.Session() :打开一个会话。所有操作都将在会话中
  • run(multiply) :执行步骤2中创建的操作。
  • print(result_1) :最后,您可以打印结果
  • close() :关闭会话
  • 结果:8,这是乘法x和y 。

创建会话的另一种方法是在块内。优点是它会自动关闭会话。

在会话的上下文中,您可以使用该eval()方法来执行操作。它相当于run() 。它使代码更具可读性。

您可以创建会话并查看到目前为止您创建的张量中的值。

## Check the tensors created before
sess = tf.Session()
print(sess.run(r1))
print(sess.run(r2_matrix))
print(sess.run(r3_matrix))
1
[[1 2]
 [3 4]]
[[[1 2]
 [3 4]
 [5 6]]]

即使在创建张量后,变量也默认为空。如果要使用变量,则需要初始化变量。tf.global_variables_initializer()需要调用对象来初始化变量的值。该对象将显式初始化所有变量。在训练机器学习模型之前,这很有用。

您可以检查之前创建的变量的值。请注意,您需要使用run来评估张量

sess.run(tf.global_variables_initializer())
print(sess.run(var))
print(sess.run(var_init_1))
print(sess.run(var_init_2))
[[-1.1434615 0.55900717]]
[[0 0]]
[[10 20]
 [30 40]]

您可以使用之前创建的占位符并将其与实际值一起提供。您需要将数据传递给方法feed_dict 。

例如,您将使用占位符data_placeholder_a的2次方。

代码说明

  • import numpy as np :导入numpy库以创建数据
  • tf.pow(data_placeholder_a, 2) :创建操作
  • np.random.rand(1, 10) :创建随机数据数组
  • feed_dict={data_placeholder_a: data} :使用占位符 data

TensorFlow所有计算都用数据流方案表示。已经开发了数据流图以查看各个操作之间的数据依赖性。数学公式或算法由许多连续操作组成。图是可视化计算如何协调的便捷方式。

图显示了节点和边缘 。节点是操作的表示,即计算单位。边缘是张量,它可以产生新的张量或消耗输入数据。它取决于各个操作之间的依赖关系。

图的结构将操作(即节点)连接在一起,以及这些操作是如何进给的。请注意,图不显示操作的输出,它仅有助于可视化各个操作之间的连接。

想象一下,您想要评估以下函数:

TensorFlow将创建一个图来执行该函数。该图如下所示:

您可以轻松查看张量到达最终目的地所需的路径

例如,您可以看到add在$ \ text {xz} $和$ x ^ {2} $之前无法执行操作。该图表说明它将:

  1. 计算$ xz $和$ x_2 $:
  2. 1)中相加
  3. 将$ z $添加到2)
  4. 将3)添加到$ c $

代码说明

  • x :初始化一个x使用常量值5 调用的变量
  • z :初始化一个z使用常量值6 调用的变量
  • c :初始化一个常量张量,调用c常量值为5
  • square :初始化一个常量张量,调用square常量值为2
  • f :构造运算符

在此示例中,我们选择保持变量的值固定。我们还创建了一个常量张量c,它是函数f中的常量参数 。它需要固定值5.

从图表中,您可以了解张量会发生什么以及它如何返回66的输出。

下面的代码评估会话中的函数。

最后

TensorFlow适用于:

  • 图:包含操作和张量的计算环境
  • 张量:表示将在图表中流动的数据(或值)。它是图中的边缘
  • 会话:允许执行操作

创建一个常数张量

创建一个运算符

创建一个变量张量

打开一个会话

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接