# 聲明變量和張量
張量是 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