📜  Tensorflow 介绍 Tensor

📅  最后修改于: 2021-10-19 05:25:11             🧑  作者: Mango

TensorFlow 是一个开源软件库,用于跨一系列任务进行数据流编程。它是一个符号数学库,也用于机器学习应用程序,如神经网络。谷歌于 2015 年 11 月开源了 TensorFlow。此后,TensorFlow 成为 Github 上最受好评的机器学习存储库。 (https://github.com/tensorflow/tensorflow)

为什么是 TensorFlow? TensorFlow 的流行有很多原因,但主要是因为计算图概念、自动微分以及 Tensorflow Python API 结构的适应性。这使得大多数程序员都可以使用 TensorFlow 解决实际问题。

谷歌的 Tensorflow 引擎有一种独特的解决问题的方法。这种独特的方式可以非常有效地解决机器学习问题。我们将介绍了解 Tensorflow 如何运作的基本步骤。

Tensorflow 中的张量是什么

TensorFlow,顾名思义,是一个定义和运行涉及张量的计算的框架。张量是向量和矩阵到潜在更高维度的推广。在内部,TensorFlow 将张量表示为基本数据类型的 n 维数组。 Tensor 中的每个元素都具有相同的数据类型,并且数据类型始终是已知的。形状(即它具有的维数和每个维的大小)可能只是部分已知的。如果输入的形状也是完全已知的,则大多数操作都会生成形状完全已知的张量,但在某些情况下,只能在图执行时找到张量的形状。

通用 TensorFlow 算法大纲

这里我们将介绍 Tensorflow 算法的一般流程。

  1. 导入或生成数据

    我们所有的机器学习算法都将依赖于数据。在实践中,我们将生成数据或使用外部数据源。有时最好依赖生成的数据,因为我们想知道预期的结果。而且 tensorflow 预装了著名的数据集,如 MNIST、CIFAR-10 等。

  2. 转换和规范化数据

    数据通常不是我们的 Tensorflow 算法期望的正确维度或类型。我们必须先转换我们的数据,然后才能使用它。大多数算法也期望标准化数据。 Tensorflow 内置了可以为您规范化数据的函数。

    data = tf.nn.batch_norm_with_global_normalization(...)
  3. 设置算法参数

    我们的算法通常有一组我们在整个过程中保持不变的参数。例如,这可以是迭代次数、学习率或我们选择的其他固定参数。将它们一起初始化被认为是一种很好的形式,以便读者或用户可以轻松找到它们。

    learning_rate = 0.001  iterations = 1000
  4. 初始化变量和占位符

    Tensorflow 取决于我们告诉它什么可以修改,什么不能修改。 Tensorflow 将在优化期间修改变量以最小化损失函数。为了实现这一点,我们通过占位符输入数据。我们需要用大小和类型初始化这两个变量和占位符,以便 Tensorflow 知道会发生什么。

    a_var = tf.constant(42)  x_input = tf.placeholder(tf.float32, [None, input_size])  y_input = tf.placeholder(tf.fload32, [None, num_classes])
  5. 定义模型结构

    获得数据并初始化变量和占位符后,我们必须定义模型。这是通过构建计算图来完成的。我们告诉 Tensorflow 必须对变量和占位符进行哪些操作才能达到我们的模型预测。

    y_pred = tf.add(tf.mul(x_input, weight_matrix), b_matrix)
  6. 声明损失函数

    定义模型后,我们必须能够评估输出。这是我们声明损失函数。损失函数非常重要,因为它告诉我们预测与实际值相差多远。

    loss = tf.reduce_mean(tf.square(y_actual – y_pred))
  7. 初始化和训练模型

    现在一切就绪,我们创建一个实例或图形,并通过占位符输入数据,让 Tensorflow 更改变量以更好地预测我们的训练数据。这是初始化计算图的一种方法。

    with tf.Session(graph=graph) as session:
     ...
     session.run(...)
     ...

    请注意,我们也可以使用

    session = tf.Session(graph=graph)  session.run(…)
  8. 评估模型(可选)

    一旦我们建立并训练了模型,我们应该通过一些指定的标准查看它在新数据上的表现来评估模型。

  9. 预测新结果(Optional)

    了解如何对新的、未见的数据进行预测也很重要。一旦我们对它们进行了训练,我们就可以对所有模型执行此操作。

概括

在 Tensorflow 中,我们必须在告诉程序训练和更改变量以改进预测之前设置数据、变量、占位符和模型。 Tensorflow 通过计算图来实现这一点。我们告诉它最小化损失函数,Tensorflow 通过修改模型中的变量来做到这一点。 Tensorflow 知道如何修改变量,因为它会跟踪模型中的计算并自动计算每个变量的梯度。因此,我们可以看到进行更改和尝试不同的数据源是多么容易。

总的来说,算法在 TensorFlow 中被设计为循环的。我们将此循环设置为计算图,并且(1)通过占位符输入数据,(2)计算计算图的输出,(3)将输出与具有损失函数的期望输出进行比较,(4)修改模型变量根据自动反向传播,最后(5)重复该过程,直到满足停止标准。


现在开始使用 tensorflow 的实际会话并使用它实现张量。

首先,我们需要导入所需的库。

import tensorflow as tf
from tensorflow.python.framework import ops
ops.reset_default_graph()

然后开始图形会话

sess = tf.Session()

现在是主要部分,即创建张量。

TensorFlow 内置了创建张量以用于变量的函数。例如,我们可以使用 tf.zeros()函数创建一个预定义形状的零填充张量,如下所示。

my_tensor = tf.zeros([1,20])

我们可以通过在会话中调用 run() 方法来评估张量。

sess.run(my_tensor)

TensorFlow 算法需要知道哪些对象是变量,哪些是常量。所以我们使用 TensorFlow函数tf.Variable() 创建一个变量。请注意,您不能运行 sess.run(my_var),这会导致错误。由于 TensorFlow 使用计算图进行操作,因此我们必须创建一个变量初始化操作来评估变量。对于这个脚本,我们可以通过调用变量方法 my_var.initializer 一次初始化一个变量。

my_var = tf.Variable(tf.zeros([1,20]))
sess.run(my_var.initializer)
sess.run(my_var)

输出:

array([[ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  
              0.,  0.,  0.,  0.,  0.,  0.,  0.,  
              0.,  0.,  0.,  0.,  0.,  0.]], dtype=float32)

现在让我们创建我们的变量来处理具有特定形状的维度,然后用所有 ‘1’ 或 ‘0’ 初始化变量

row_dim = 2
col_dim = 3
zero_var = tf.Variable(tf.zeros([row_dim, col_dim]))
ones_var = tf.Variable(tf.ones([row_dim, col_dim]))

现在评估它们的值,我们可以再次对我们的变量运行初始化方法。

sess.run(zero_var.initializer)
sess.run(ones_var.initializer)
print(sess.run(zero_var))
print(sess.run(ones_var))

输出:

[[ 0.  0.  0.]
 [ 0.  0.  0.]]
[[ 1.  1.  1.]
 [ 1.  1.  1.]]

这个列表会继续下去。其余的将供您学习,请按照我的这个 jupyter notebook 从这里获取有关张量的更多信息。

可视化 TensorBoard 中的变量创建

为了可视化 Tensorboard 中变量的创建,我们将重置计算图并创建一个全局初始化操作。

# Reset graph
ops.reset_default_graph()
  
# Start a graph session
sess = tf.Session()
  
# Create variable
my_var = tf.Variable(tf.zeros([1,20]))
  
# Add summaries to tensorboard
merged = tf.summary.merge_all()
  
# Initialize graph writer:
writer = tf.summary.FileWriter("/tmp/variable_logs", graph=sess.graph)
  
# Initialize operation
initialize_op = tf.global_variables_initializer()
  
# Run initialization of variable
sess.run(initialize_op)

现在在cmd中运行以下命令。

tensorboard --logdir=/tmp

它会告诉我们可以在浏览器中导航以查看 Tensorboard 的 URL,以实现您的损失图。

用于创建所有类型的张量并对其进行评估的代码。

import tensorflow as tf
from tensorflow.python.framework import ops
ops.reset_default_graph()
  
# Introduce tensors in tf
  
# Get graph handle
sess = tf.Session()
  
my_tensor = tf.zeros([1,20])
  
# Declare a variable
my_var = tf.Variable(tf.zeros([1,20]))
  
# Different kinds of variables
row_dim = 2
col_dim = 3 
  
# Zero initialized variable
zero_var = tf.Variable(tf.zeros([row_dim, col_dim]))
  
# One initialized variable
ones_var = tf.Variable(tf.ones([row_dim, col_dim]))
  
# shaped like other variable
sess.run(zero_var.initializer)
sess.run(ones_var.initializer)
zero_similar = tf.Variable(tf.zeros_like(zero_var))
ones_similar = tf.Variable(tf.ones_like(ones_var))
  
sess.run(ones_similar.initializer)
sess.run(zero_similar.initializer)
  
# Fill shape with a constant
fill_var = tf.Variable(tf.fill([row_dim, col_dim], -1))
  
# Create a variable from a constant
const_var = tf.Variable(tf.constant([8, 6, 7, 5, 3, 0, 9]))
# This can also be used to fill an array:
const_fill_var = tf.Variable(tf.constant(-1, shape=[row_dim, col_dim]))
  
# Sequence generation
linear_var = tf.Variable(tf.linspace(start=0.0, stop=1.0, num=3)) # Generates [0.0, 0.5, 1.0] includes the end
  
sequence_var = tf.Variable(tf.range(start=6, limit=15, delta=3)) # Generates [6, 9, 12] doesn't include the end
  
# Random Numbers
  
# Random Normal
rnorm_var = tf.random_normal([row_dim, col_dim], mean=0.0, stddev=1.0)
  
# Add summaries to tensorboard
merged = tf.summary.merge_all()
  
# Initialize graph writer:
  
writer = tf.summary.FileWriter("/tmp/variable_logs", graph=sess.graph)
  
# Initialize operation
initialize_op = tf.global_variables_initializer()
  
# Run initialization of variable
sess.run(initialize_op)

输出:

参考链接:

1)Tensorflow 文档