# 声明变量和张量
张量是 TensorFlow 用于在计算图上操作的主要数据结构。我们可以将这些张量声明为变量和/或将它们作为占位符提供。要做到这一点,首先,我们必须学习如何创建张量。
> `tensor`是指广义向量或矩阵的数学术语。如果向量是一维的并且矩阵是二维的,则张量是 n 维的(其中`n`可以是 1,2 或甚至更大)。
## 做好准备
当我们创建一个张量并将其声明为变量时,TensorFlow 会在我们的计算图中创建几个图结构。同样重要的是要指出,仅通过创建张量,TensorFlow 不会向计算图中添加任何内容。 TensorFlow 仅在运行初始化变量的操作后执行此操作。有关更多信息,请参阅下一节有关变量和占位符的内容。
## 操作步骤
在这里,我们将介绍我们可以在 TensorFlow 中创建张量的主要方法:
1.固定张量:
* * 在下面的代码中,我们创建了一个零填充张量:
```py
zero_tsr = tf.zeros([row_dim, col_dim])
```
* * 在下面的代码中,我们创建了一个填充张量:
```py
ones_tsr = tf.ones([row_dim, col_dim])
```
* * 在下面的代码中,我们创建了一个常量填充张量:
```py
filled_tsr = tf.fill([row_dim, col_dim], 42)
```
* * 在下面的代码中,我们从现有常量中创建一个张量:
```py
constant_tsr = tf.constant([1,2,3])
```
> 请注意,`tf.constant()`函数可用于将值广播到数组中,通过编写`tf.constant(42, [row_dim, col_dim])`来模仿`tf.fill()`的行为。
1. 相似形状的张量:我们还可以根据其他张量的形状初始化变量,如下所示:
```py
zeros_similar = tf.zeros_like(constant_tsr)
ones_similar = tf.ones_like(constant_tsr)
```
> 请注意,由于这些张量依赖于先前的张量,我们必须按顺序初始化它们。尝试一次初始化所有张量将导致错误。有关变量和占位符,请参阅下一节末尾的“更多...”小节。
1. 序列张量:TensorFlow 允许我们指定包含定义间隔的张量。以下函数与 NumPy 的`linspace()`输出和`range()`输出非常相似。请参阅以下函数:
```py
linear_tsr = tf.linspace(start=0, stop=1, start=3)
```
得到的张量具有[0.0,0.5,1.0]的序列。请注意,此函数包含指定的停止值。有关更多信息,请参阅以下函数:
```py
integer_seq_tsr = tf.range(start=6, limit=15, delta=3)
```
结果是序列[6,9,12]。请注意,此函数不包括限制值。
1. 随机张量:以下生成的随机数来自均匀分布:
```py
randunif_tsr = tf.random_uniform([row_dim, col_dim], minval=0, maxval=1)
```
注意,这种随机均匀分布来自包含`minval`但不包括`maxval`(`minval <= x < maxval`)的区间。
要从正态分布中获取随机抽取的张量,可以运行以下代码:
```py
randnorm_tsr = tf.random_normal([row_dim, col_dim], mean=0.0, stddev=1.0)
```
有时候我们想要生成在某些范围内保证的正常随机值。 `truncated_normal()`函数总是在指定均值的两个标准偏差内选择正常值:
```py
runcnorm_tsr = tf.truncated_normal([row_dim, col_dim], mean=0.0, stddev=1.0)
```
我们可能也对随机化数组条目感兴趣。要做到这一点,有两个函数可以帮助我们:`random_shuffle()`和`random_crop()`。以下代码执行此操作:
```py
shuffled_output = tf.random_shuffle(input_tensor)
cropped_output = tf.random_crop(input_tensor, crop_size)
```
在本书的后面,我们将有兴趣随机裁剪尺寸(高度,宽度,3)的图像,其中有三种颜色光谱。要修复`cropped_output`中的尺寸,您必须在该尺寸中为其指定最大尺寸:
```py
cropped_image = tf.random_crop(my_image, [height/2, width/2, 3])
```
## 工作原理
一旦我们决定如何创建张量,我们也可以通过在`Variable()`函数中包含张量来创建相应的变量,如下所示(下一节将详细介绍):
```py
my_var = tf.Variable(tf.zeros([row_dim, col_dim]))
```
## 更多
我们不仅限于内置函数:我们可以使用`convert_to_tensor()`函数将任何 NumPy 数组转换为 Python 列表,或将常量转换为张量。注意,如果我们希望概括函数内部的计算,该函数也接受张量作为输入。
- TensorFlow 入门
- 介绍
- TensorFlow 如何工作
- 声明变量和张量
- 使用占位符和变量
- 使用矩阵
- 声明操作符
- 实现激活函数
- 使用数据源
- 其他资源
- TensorFlow 的方式
- 介绍
- 计算图中的操作
- 对嵌套操作分层
- 使用多个层
- 实现损失函数
- 实现反向传播
- 使用批量和随机训练
- 把所有东西结合在一起
- 评估模型
- 线性回归
- 介绍
- 使用矩阵逆方法
- 实现分解方法
- 学习 TensorFlow 线性回归方法
- 理解线性回归中的损失函数
- 实现 deming 回归
- 实现套索和岭回归
- 实现弹性网络回归
- 实现逻辑回归
- 支持向量机
- 介绍
- 使用线性 SVM
- 简化为线性回归
- 在 TensorFlow 中使用内核
- 实现非线性 SVM
- 实现多类 SVM
- 最近邻方法
- 介绍
- 使用最近邻
- 使用基于文本的距离
- 使用混合距离函数的计算
- 使用地址匹配的示例
- 使用最近邻进行图像识别
- 神经网络
- 介绍
- 实现操作门
- 使用门和激活函数
- 实现单层神经网络
- 实现不同的层
- 使用多层神经网络
- 改进线性模型的预测
- 学习玩井字棋
- 自然语言处理
- 介绍
- 使用词袋嵌入
- 实现 TF-IDF
- 使用 Skip-Gram 嵌入
- 使用 CBOW 嵌入
- 使用 word2vec 进行预测
- 使用 doc2vec 进行情绪分析
- 卷积神经网络
- 介绍
- 实现简单的 CNN
- 实现先进的 CNN
- 重新训练现有的 CNN 模型
- 应用 StyleNet 和 NeuralStyle 项目
- 实现 DeepDream
- 循环神经网络
- 介绍
- 为垃圾邮件预测实现 RNN
- 实现 LSTM 模型
- 堆叠多个 LSTM 层
- 创建序列到序列模型
- 训练 Siamese RNN 相似性度量
- 将 TensorFlow 投入生产
- 介绍
- 实现单元测试
- 使用多个执行程序
- 并行化 TensorFlow
- 将 TensorFlow 投入生产
- 生产环境 TensorFlow 的一个例子
- 使用 TensorFlow 服务
- 更多 TensorFlow
- 介绍
- 可视化 TensorBoard 中的图
- 使用遗传算法
- 使用 k 均值聚类
- 求解常微分方程组
- 使用随机森林
- 使用 TensorFlow 和 Keras