# 二、聚類
在本章中,我們將開始應用在上一章中學到的數據轉換操作,并開始使用聚類技術在某些給定信息中找到有趣的模式,發現數據組或集群。
在此過程中,我們還將獲得兩個新工具:能夠通過 scikit-learn 庫從一組代表性數據結構中生成合成樣本集,并且能夠通過 matplotlib 庫以圖形方式繪制我們的數據和模型結果 。
我們將在本章中介紹的主題如下:
* 了解群集的工作原理,并將其與替代的現有分類技術進行比較
* 使用 scikit-learn 和 matplotlib 豐富數據集選擇的可能性,并獲得看起來專業的數據圖形表示
* 實現 K 均值聚類算法
* 實現最近鄰法,并將結果與??K 均值進行比較
# 從數據中學習 -- 無監督學習
在本章中,我們將回顧兩種無監督學習的情況。
無監督學習基本上包括在先前的數據集中查找模式。 通常,很少或沒有信息提供給該技術,并且該過程應該能夠自動確定信息的組織方式,并識別數據組織中的不同結構。
# 聚類
最初可用于未標記數據集的最簡單的操作之一是嘗試了解數據集成員共同特征的可能組。
為此,可以將數據集劃分為任意數量的段,其中每個段都可以表示為中心質量(質心)點,該點代表屬于已確定組或聚類的點。
為了定義將同一組分配給不同組成員的標準,我們需要定義一個表示數據元素之間距離的概念,因此我們可以簡單地說,所有類成員比任何其他質心更接近自己的質心 。
在下圖中,我們可以看到典型聚類算法的結果以及聚類中心的表示形式:

樣本聚類算法輸出
# K 均值
K 均值是一種非常流行的聚類算法,可以輕松實現。 這非常簡單,將它作為具有良好類分離性的數據集的第一個過程應用,可以對數據有很好的先驗理解。
## K 均值的原理
K 均值嘗試使用成員的平均值作為主要指標,將一組樣本分成 k 個不相交的組或簇。 這一點通常稱為質心,指代具有相同名稱的算術實體,并表示為任意尺寸空間中的向量。
K 均值是一種幼稚的方法,因為它通過查找適當的質心而起作用,但是不知道先驗簇的數量是多少。
為了評估多少簇能夠很好地表示所提供的數據,Elbow 方法是一種比較流行的方法。
### 算法迭代準則
此方法的標準和目標是最小化從群集成員到所有包含群集的樣本的實際質心的平方距離之和。 這也稱為慣性最小化。

K 均值的誤差最小化準則

## K 均值算法細分
K 均值算法的機制可以通過以下流程圖總結:

K 均值過程的簡化流程圖
該算法可以簡化如下:
1. 我們從未分類的樣本開始,以 k 個元素為起始質心。 為了簡潔起見,也可以簡化此算法,使元素列表中的第一個元素成為第一個元素。
2. 然后,我們計算樣本與首先選擇的樣本之間的距離,并獲得第一個計算出的質心(或其他代表值)。 您可以看到圖中的質心向著更常識的質心移動。
3. 形心更改后,它們的位移將引起各個距離發生更改,因此群集成員身份可能會更改。
4. 這是我們重新計算質心并在不滿足停止條件的情況下重復第一步的時候。
停止條件可以有多種類型:
* 在 N 次迭代之后,可能是要么我們選擇了一個非常大的數,然后我們將進行不必要的計算,否則它可能會收斂得很慢,并且如果質心沒有非常穩定的方法,我們將得到非常令人難以置信的結果。 如果我們有一個很長的迭代過程,那么這個停止條件也可以作為最后的手段。
* 參考先前的平均結果,可能的更好的迭代收斂標準是看重心的變化,無論是在總位移還是總簇元切換中。 最后一個通常被使用,因此一旦沒有更多元素從其當前群集更改為另一個群集,我們將停止該過程。

K 均值簡化圖形
### K 均值的優缺點
這種方法的優點是:
* 它可以很好地擴展(大多數計算可以并行運行)
* 它已經被用于很多應用中
但是,簡單性也要付出代價(沒有適用的規則):
* 它需要先驗知識(可能的簇數應事先知道)
* 離群值可以推入質心的值,因為它們的值與任何其他樣本相同
* 由于我們假設該圖是凸且各向同性的,因此對于非圓形定界簇來說效果不佳
# K 最近鄰
K 最近鄰(KNN)是一種簡單的經典聚類方法,它將很好地介紹此類技術,著眼于每個樣本的附近,并假設每個新樣本都應屬于的類別。 已經知道的數據點。

## K 最近鄰的原理
KNN 可以在我們的多種配置中實現,但是在本章中,我們將使用“半監督”方法。 我們將從一定數量的已分配樣本開始,稍后我們將根據訓練集的特征猜測集群成員。

最近鄰算法
在上圖中,我們可以看到該算法的細分。 可以通過以下步驟進行總結:
1. 我們將先前已知的樣本放在數據結構上。
2. 然后,我們讀取要分類的下一個樣本,并計算從新樣本到訓練集的每個樣本的歐幾里得距離。
3. 我們通過根據歐幾里得距離選擇最近的樣本的類別來確定新元素的類別。 KNN 方法需要對 k 個最接近的樣本進行投票。
4. 我們重復該過程,直到沒有剩余的樣本為止。
### KNN 的優缺點
這種方法的優點是:
* 簡單; 無需調整參數
* 沒有正規訓練; 我們只需要更多的訓練實例來改進模型
缺點:
* 計算昂貴(必須計算點與每個新樣本之間的所有距離)
## 有用庫的實用示例
在以下各節中,我們將討論一些有用的庫。
### matplotlib 繪圖庫
數據繪圖是數據科學學科不可或缺的一部分。 因此,我們需要一個非常強大的框架來繪制結果。 對于此任務,我們沒有在 TensorFlow 中實現的通用解決方案,我們將使用 matplotlib 庫。
在 matplotlib 站點(`http://matplotlib.org/`)中,定義為:
> matplotlib 是一個 Python 2D 繪圖庫,它以各種硬拷貝格式和跨平臺的交互式環境生成出版物質量的圖形。
#### 合成樣本的數據繪圖
在此示例中,我們將生成一個包含 100 個隨機數的列表,生成樣本圖,并將結果保存在圖形文件中:
```py
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
with tf.Session() as sess:
fig, ax = plt.subplots()
ax.plot(tf.random_normal([100]).eval(), tf.random_normal([100] ).eval(),'o')
ax.set_title('Sample random plot for TensorFlow')
plt.savefig("result.png")
```
這是結果圖像:

使用 TensorFlow 和 matplotlib 生成的示例圖
### 提示
為了查看 scikit 數據集模塊的更一般的解釋,請參考 [matplotlib.org](http://matplotlib.org/)。
### scikit-learn 數據集模塊
TensorFlow 當前未實現用于輕松生成合成數據集的方法。 因此,我們將使用`sklearn`庫作為幫助程序。
#### 關于 scikit-learn 庫
[從其網站](http://scikit-learn.org/stable/):
> scikit-learn(以前為`scikits.learn`)是針對 Python 編程語言的開源機器學習庫。它具有各種分類,回歸和聚類模型,旨在與 Python 數字和科學庫 NumPy 和 SciPy 互操作。
在此示例中,我們將使用數據集模塊,該模塊處理許多眾所周知的合成和現場提取的數據集的生成和加載。
### 提示
為了查看 scikit 數據集模塊的更一般的解釋,請參考[此鏈接](http://scikit-learn.org/stable/datasets/)。
### 合成數據集類型
我們將使用一些生成的數據集類型:

Blob,圓圈和月亮數據集類型
### Blob 數據集
該數據集是測試簡單聚類算法的理想選擇。 不會出現問題,因為數據是一致地分組的,并且類別的分離很明確。
#### 采用的方法
以下方法用于所采用的方法:
```py
sklearn.datasets.make_blobs(n_samples=100, n_features=2, centers=3, cluster_std=1.0, center_box=(-10.0, 10.0), shuffle=True, random_state=None)
```
在這里,`n_samples`是數據總數,`n_features`是數據的列數或特征數,`centers`是中心列表或許多隨機中心,`cluster_std`是標準偏差,`center_box`是隨機生成中心時每個聚類中心的邊界框,`shuffle`指示是否必須對樣本進行混洗,`random_state`是隨機種子。
### 圓圈數據集
這是在其他圓圈中具有圓圈的數據集。 這是一個非線性的,可分離的問題,因此需要通過非線性模型來解決。 這排除了諸如 K 均值的簡單算法。 在本章中,我們將嘗試使用它來闡明觀點。
#### 采用的方法
以下方法用于所采用的方法:
```py
sklearn.datasets.make_circles(n_samples=100,shuffle=True,noise=None, random_state=None,factor=0.8)
```
在這里,`n_samples`是數據總數,`shuffle`表示是否必須對樣本進行混洗,`noise`是要應用于循環數據的隨機量的數量,`random_state`是隨機種子,并且`factor`是圓之間的比例因子。
### 月亮數據集
這是另一個非線性問題,但是具有另一種類型的類分離,因為沒有諸如圓環之類的閉合。
# 項目 1 -- 合成數據集上的 K 均值聚類
## 數據集說明和加載
在本章中,我們將使用生成的數據集,這些數據集經過特殊設計以具有特殊的屬性。 目標屬性中的兩個是類別線性分離的可能性以及是否存在明顯分離的群集。
### 生成數據集
通過這些行,我們創建了數據結構,其中將包含用于解決方案的所有元素,即:
```py
centers = [(-2, -2), (-2, 1.5), (1.5, -2), (2, 1.5)]
data, features = make_blobs (n_samples=200, centers=centers, n_features = 2, cluster_std=0.8, shuffle=False, random_state=42)
```
通過 matplotlib 繪制數據集圖:
```py
ax.scatter(np.asarray(centers).transpose()[0], np.asarray(centers).transpose()[1], marker = 'o', s = 250)
plt.plot()
```
## 模型架構
`points`變量包含數據集點的 2D 坐標,質心變量將包含組中心點的坐標,`cluster_assignments`變量包含每個數據元素的質心索引。
例如,`cluster_assignments[2] = 1`表示`data[2]`數據點屬于具有中心重心`1`的群集。 重心`1`的位置位于`centroids[1]`中。
```py
points=tf.Variable(data)
cluster_assignments = tf.Variable(tf.zeros([N], dtype=tf.int64))
centroids = tf.Variable(tf.slice(points.initialized_value(), [0,0], [K,2]))
```
然后,我們可以使用 matplotlib 繪制這些質心的位置:
```py
fig, ax = plt.subplots()
ax.scatter(np.asarray(centers).transpose()[0], np.asarray(centers).transpose()[1], marker = 'o', s = 250)
plt.show()
```

初始中心播種
## 損失函數描述和優化器循環
然后,我們將對所有質心進行 N 份復制,對每個點進行 K 份復制,對每個點進行`N x K`份復制,因此我們可以針對每個維度計算出每個點與每個質心之間的距離:
```py
rep_centroids = tf.reshape(tf.tile(centroids, [N, 1]), [N, K, 2])
rep_points = tf.reshape(tf.tile(points, [1, K]), [N, K, 2])
sum_squares = tf.reduce_sum(tf.square(rep_points - rep_centroids),
reduction_indices=2)
```
然后,我們對所有維度執行總和,并獲得最低總和的索引(這將是分配給每個點的質心或聚類的索引):
```py
best_centroids = tf.argmin(sum_squares, 1)
```
質心也將使用完整源代碼中定義的`bucket:mean`函數進行更新。
## 停止條件
這是新質心和分配不變的停止條件:
```py
did_assignments_change = tf.reduce_any(tf.not_equal(best_centroids, cluster_assignments))
```
在這里,我們使用`control_dependencies`來計算是否需要更新質心:
```py
with tf.control_dependencies([did_assignments_change]):
do_updates = tf.group(
centroids.assign(means),
cluster_assignments.assign(best_centroids))
```
## 結果描述
程序執行后,我們得到以下輸出:

這是一輪迭代后質心變化的匯總圖,其中繪制了從算法生成的原始聚類。
在下圖中,我們針對這種明顯分離的情況表示了 K 均值算法在應用中的不同階段:

每次迭代的質心變化
## 完整源代碼
以下是完整的源代碼:
```py
import tensorflow as tf
import numpy as np
import time
import matplotlib
import matplotlib.pyplot as plt
from sklearn.datasets.samples_generator import make_blobs
from sklearn.datasets.samples_generator import make_circles
DATA_TYPE = 'blobs'
# Number of clusters, if we choose circles, only 2 will be enough
if (DATA_TYPE == 'circle'):
K=2
else:
K=4
# Maximum number of iterations, if the conditions are not met
MAX_ITERS = 1000
start = time.time()
centers = [(-2, -2), (-2, 1.5), (1.5, -2), (2, 1.5)]
if (DATA_TYPE == 'circle'):
data, features = make_circles(n_samples=200, shuffle=True, noise= 0.01, factor=0.4)
else:
data, features = make_blobs (n_samples=200, centers=centers, n_features = 2, cluster_std=0.8, shuffle=False, random_state=42)
fig, ax = plt.subplots()
ax.scatter(np.asarray(centers).transpose()[0], np.asarray(centers).transpose()[1], marker = 'o', s = 250)
plt.show()
fig, ax = plt.subplots()
if (DATA_TYPE == 'blobs'):
ax.scatter(np.asarray(centers).transpose()[0], np.asarray(centers).transpose()[1], marker = 'o', s = 250)
ax.scatter(data.transpose()[0], data.transpose()[1], marker = 'o', s = 100, c = features, cmap=plt.cm.coolwarm )
plt.plot()
points=tf.Variable(data)
cluster_assignments = tf.Variable(tf.zeros([N], dtype=tf.int64))
centroids = tf.Variable(tf.slice(points.initialized_value(), [0,0], [K,2]))
sess = tf.Session()
sess.run(tf.initialize_all_variables())
rep_centroids = tf.reshape(tf.tile(centroids, [N, 1]), [N, K, 2])
rep_points = tf.reshape(tf.tile(points, [1, K]), [N, K, 2])
sum_squares = tf.reduce_sum(tf.square(rep_points - rep_centroids),
reduction_indices=2)
best_centroids = tf.argmin(sum_squares, 1)
did_assignments_change = tf.reduce_any(tf.not_equal(best_centroids, cluster_assignments))
def bucket_mean(data, bucket_ids, num_buckets):
total = tf.unsorted_segment_sum(data, bucket_ids, num_buckets)
count = tf.unsorted_segment_sum(tf.ones_like(data), bucket_ids, num_buckets)
return total / count
means = bucket_mean(points, best_centroids, K)
with tf.control_dependencies([did_assignments_change]):
do_updates = tf.group(
centroids.assign(means),
cluster_assignments.assign(best_centroids))
changed = True
iters = 0
fig, ax = plt.subplots()
if (DATA_TYPE == 'blobs'):
colourindexes=[2,1,4,3]
else:
colourindexes=[2,1]
while changed and iters < MAX_ITERS:
fig, ax = plt.subplots()
iters += 1
[changed, _] = sess.run([did_assignments_change, do_updates])
[centers, assignments] = sess.run([centroids, cluster_assignments])
ax.scatter(sess.run(points).transpose()[0], sess.run(points).transpose()[1], marker = 'o', s = 200, c = assignments, cmap=plt.cm.coolwarm )
ax.scatter(centers[:,0],centers[:,1], marker = '^', s = 550, c = colourindexes, cmap=plt.cm.plasma)
ax.set_title('Iteration ' + str(iters))
plt.savefig("kmeans" + str(iters) +".png")
ax.scatter(sess.run(points).transpose()[0], sess.run(points).transpose()[1], marker = 'o', s = 200, c = assignments, cmap=plt.cm.coolwarm )
plt.show()
end = time.time()
print ("Found in %.2f seconds" % (end-start)), iters, "iterations"
print "Centroids:"
print centers
print "Cluster assignments:", assignments
```
這是觀察算法機制的最簡單情況。 當數據來自真實世界時,這些類通常沒有那么清晰地分開,并且標記數據樣本更加困難。
## 圓圈合成數據上的 K 均值
對于圓圖,我們觀察到這種數據表征并不容易用一組簡單的方法表示。 如圖所示,兩個圓要么共享一個質心的位置,要么真的很接近,因此我們無法預測明確的結果:

圓型數據集
對于此數據集,我們僅使用兩個類來確保了解此算法的主要缺點:

K 均值應用于圓形綜合數據集
如我們所見,初始中心向樣本數量最集中的區域漂移,因此將數據線性劃分。 這是我們現階段使用的簡單模型的局限性之一。 為了處理非線性可分離性樣本,我們可以嘗試本章范圍以外的其他統計方法,例如基于密度的帶噪應用空間聚類(DBSCAN)。
# 項目 2 -- 合成數據集上的最近鄰
在這個項目中,我們將加載一個數據集,使用該數據集,以前的算法(K 均值)在分離類時遇到問題。
## 數據集生成
該數據集是第一個示例中具有兩個類的相同循環類數據集,但是這次我們將通過增加一些噪聲(從`0.01`到`0.12`)來增加錯誤概率:
```py
data, features = make_circles(n_samples=N, shuffle=True, noise=0.12,factor=0.4)
```
這是生成的訓練數據圖:

## 模型架構
將保留數據的變量只是原始數據和測試列表,其中將包含計算出的測試數據類:
```py
data, features = make_circles(n_samples=N, shuffle=True, noise= 0.12, factor=0.4)
tr_data, tr_features= data[:cut], features[:cut]
te_data,te_features=data[cut:], features[cut:]
test=[]
```
## 損失函數說明
在聚類中,我們將使用函數來優化為歐式距離,與第 1 章,探索和轉換數據相同。 它是在集群分配循環上計算的,獲取從新點到現有訓練點的距離,要求最小值的索引,然后使用該索引搜索最近的鄰居的類:
```py
distances = tf.reduce_sum(tf.square(tf.sub(i , tr_data)),reduction_indices=1)
neighbor = tf.arg_min(distances,0)
```
## 停止條件
在這個簡單的示例中,一旦訪問了測試分區的所有元素,我們將完成操作。
## 結果描述
這是測試數據類分布的圖形,在這里我們可以看到清晰分開的類。 我們可以觀察到,至少在此有限的數據集范圍內,此方法比非重疊,斑點優化,K 均值方法更好。

## 完整源代碼
以下是完整的源代碼:
```py
import tensorflow as tf
import numpy as np
import time
import matplotlib
import matplotlib.pyplot as plt
from sklearn.datasets.samples_generator import make_circles
N=210
K=2
# Maximum number of iterations, if the conditions are not met
MAX_ITERS = 1000
cut=int(N*0.7)
start = time.time()
data, features = make_circles(n_samples=N, shuffle=True, noise= 0.12, factor=0.4)
tr_data, tr_features= data[:cut], features[:cut]
te_data,te_features=data[cut:], features[cut:]
test=[]
fig, ax = plt.subplots()
ax.scatter(tr_data.transpose()[0], tr_data.transpose()[1], marker = 'o', s = 100, c = tr_features, cmap=plt.cm.coolwarm )
plt.plot()
sess = tf.Session()
sess.run(tf.initialize_all_variables())
for i, j in zip(te_data, te_features):
distances = tf.reduce_sum(tf.square(tf.sub(i , tr_data)),reduction_indices=1)
neighbor = tf.arg_min(distances,0)
test.append(tr_features[sess.run(neighbor)])
print test
fig, ax = plt.subplots()
ax.scatter(te_data.transpose()[0], te_data.transpose()[1], marker = 'o', s = 100, c = test, cmap=plt.cm.coolwarm )
plt.plot()
end = time.time()
print ("Found in %.2f seconds" % (end-start))
print "Cluster assignments:", test
```
# 總結
在本章中,我們簡單地概述了一些我們可以實現的最基本的模型,但是嘗試在解釋中盡可能地詳細。
從現在開始,我們將能夠生成綜合數據集,從而使我們能夠快速測試模型對于不同數據配置的適當性,從而評估它們的優缺點,而不必加載具有大量未知特征的模型。
此外,我們已經實現了第一個迭代方法并測試了收斂性,該任務將以類似的方式在后續章節中繼續進行,但是將使用更精細,更精確的方法。
在下一章中,我們將使用線性函數解決分類問題,并且首次使用訓練集中的先前數據來學習其特征。 這是監督學習技術的目標,通常對于解決許多現實生活中的問題更有用。
- TensorFlow 1.x 深度學習秘籍
- 零、前言
- 一、TensorFlow 簡介
- 二、回歸
- 三、神經網絡:感知器
- 四、卷積神經網絡
- 五、高級卷積神經網絡
- 六、循環神經網絡
- 七、無監督學習
- 八、自編碼器
- 九、強化學習
- 十、移動計算
- 十一、生成模型和 CapsNet
- 十二、分布式 TensorFlow 和云深度學習
- 十三、AutoML 和學習如何學習(元學習)
- 十四、TensorFlow 處理單元
- 使用 TensorFlow 構建機器學習項目中文版
- 一、探索和轉換數據
- 二、聚類
- 三、線性回歸
- 四、邏輯回歸
- 五、簡單的前饋神經網絡
- 六、卷積神經網絡
- 七、循環神經網絡和 LSTM
- 八、深度神經網絡
- 九、大規模運行模型 -- GPU 和服務
- 十、庫安裝和其他提示
- TensorFlow 深度學習中文第二版
- 一、人工神經網絡
- 二、TensorFlow v1.6 的新功能是什么?
- 三、實現前饋神經網絡
- 四、CNN 實戰
- 五、使用 TensorFlow 實現自編碼器
- 六、RNN 和梯度消失或爆炸問題
- 七、TensorFlow GPU 配置
- 八、TFLearn
- 九、使用協同過濾的電影推薦
- 十、OpenAI Gym
- TensorFlow 深度學習實戰指南中文版
- 一、入門
- 二、深度神經網絡
- 三、卷積神經網絡
- 四、循環神經網絡介紹
- 五、總結
- 精通 TensorFlow 1.x
- 一、TensorFlow 101
- 二、TensorFlow 的高級庫
- 三、Keras 101
- 四、TensorFlow 中的經典機器學習
- 五、TensorFlow 和 Keras 中的神經網絡和 MLP
- 六、TensorFlow 和 Keras 中的 RNN
- 七、TensorFlow 和 Keras 中的用于時間序列數據的 RNN
- 八、TensorFlow 和 Keras 中的用于文本數據的 RNN
- 九、TensorFlow 和 Keras 中的 CNN
- 十、TensorFlow 和 Keras 中的自編碼器
- 十一、TF 服務:生產中的 TensorFlow 模型
- 十二、遷移學習和預訓練模型
- 十三、深度強化學習
- 十四、生成對抗網絡
- 十五、TensorFlow 集群的分布式模型
- 十六、移動和嵌入式平臺上的 TensorFlow 模型
- 十七、R 中的 TensorFlow 和 Keras
- 十八、調試 TensorFlow 模型
- 十九、張量處理單元
- TensorFlow 機器學習秘籍中文第二版
- 一、TensorFlow 入門
- 二、TensorFlow 的方式
- 三、線性回歸
- 四、支持向量機
- 五、最近鄰方法
- 六、神經網絡
- 七、自然語言處理
- 八、卷積神經網絡
- 九、循環神經網絡
- 十、將 TensorFlow 投入生產
- 十一、更多 TensorFlow
- 與 TensorFlow 的初次接觸
- 前言
- 1.?TensorFlow 基礎知識
- 2. TensorFlow 中的線性回歸
- 3. TensorFlow 中的聚類
- 4. TensorFlow 中的單層神經網絡
- 5. TensorFlow 中的多層神經網絡
- 6. 并行
- 后記
- TensorFlow 學習指南
- 一、基礎
- 二、線性模型
- 三、學習
- 四、分布式
- TensorFlow Rager 教程
- 一、如何使用 TensorFlow Eager 構建簡單的神經網絡
- 二、在 Eager 模式中使用指標
- 三、如何保存和恢復訓練模型
- 四、文本序列到 TFRecords
- 五、如何將原始圖片數據轉換為 TFRecords
- 六、如何使用 TensorFlow Eager 從 TFRecords 批量讀取數據
- 七、使用 TensorFlow Eager 構建用于情感識別的卷積神經網絡(CNN)
- 八、用于 TensorFlow Eager 序列分類的動態循壞神經網絡
- 九、用于 TensorFlow Eager 時間序列回歸的遞歸神經網絡
- TensorFlow 高效編程
- 圖嵌入綜述:問題,技術與應用
- 一、引言
- 三、圖嵌入的問題設定
- 四、圖嵌入技術
- 基于邊重構的優化問題
- 應用
- 基于深度學習的推薦系統:綜述和新視角
- 引言
- 基于深度學習的推薦:最先進的技術
- 基于卷積神經網絡的推薦
- 關于卷積神經網絡我們理解了什么
- 第1章概論
- 第2章多層網絡
- 2.1.4生成對抗網絡
- 2.2.1最近ConvNets演變中的關鍵架構
- 2.2.2走向ConvNet不變性
- 2.3時空卷積網絡
- 第3章了解ConvNets構建塊
- 3.2整改
- 3.3規范化
- 3.4匯集
- 第四章現狀
- 4.2打開問題
- 參考
- 機器學習超級復習筆記
- Python 遷移學習實用指南
- 零、前言
- 一、機器學習基礎
- 二、深度學習基礎
- 三、了解深度學習架構
- 四、遷移學習基礎
- 五、釋放遷移學習的力量
- 六、圖像識別與分類
- 七、文本文件分類
- 八、音頻事件識別與分類
- 九、DeepDream
- 十、自動圖像字幕生成器
- 十一、圖像著色
- 面向計算機視覺的深度學習
- 零、前言
- 一、入門
- 二、圖像分類
- 三、圖像檢索
- 四、對象檢測
- 五、語義分割
- 六、相似性學習
- 七、圖像字幕
- 八、生成模型
- 九、視頻分類
- 十、部署
- 深度學習快速參考
- 零、前言
- 一、深度學習的基礎
- 二、使用深度學習解決回歸問題
- 三、使用 TensorBoard 監控網絡訓練
- 四、使用深度學習解決二分類問題
- 五、使用 Keras 解決多分類問題
- 六、超參數優化
- 七、從頭開始訓練 CNN
- 八、將預訓練的 CNN 用于遷移學習
- 九、從頭開始訓練 RNN
- 十、使用詞嵌入從頭開始訓練 LSTM
- 十一、訓練 Seq2Seq 模型
- 十二、深度強化學習
- 十三、生成對抗網絡
- TensorFlow 2.0 快速入門指南
- 零、前言
- 第 1 部分:TensorFlow 2.00 Alpha 簡介
- 一、TensorFlow 2 簡介
- 二、Keras:TensorFlow 2 的高級 API
- 三、TensorFlow 2 和 ANN 技術
- 第 2 部分:TensorFlow 2.00 Alpha 中的監督和無監督學習
- 四、TensorFlow 2 和監督機器學習
- 五、TensorFlow 2 和無監督學習
- 第 3 部分:TensorFlow 2.00 Alpha 的神經網絡應用
- 六、使用 TensorFlow 2 識別圖像
- 七、TensorFlow 2 和神經風格遷移
- 八、TensorFlow 2 和循環神經網絡
- 九、TensorFlow 估計器和 TensorFlow HUB
- 十、從 tf1.12 轉換為 tf2
- TensorFlow 入門
- 零、前言
- 一、TensorFlow 基本概念
- 二、TensorFlow 數學運算
- 三、機器學習入門
- 四、神經網絡簡介
- 五、深度學習
- 六、TensorFlow GPU 編程和服務
- TensorFlow 卷積神經網絡實用指南
- 零、前言
- 一、TensorFlow 的設置和介紹
- 二、深度學習和卷積神經網絡
- 三、TensorFlow 中的圖像分類
- 四、目標檢測與分割
- 五、VGG,Inception,ResNet 和 MobileNets
- 六、自編碼器,變分自編碼器和生成對抗網絡
- 七、遷移學習
- 八、機器學習最佳實踐和故障排除
- 九、大規模訓練
- 十、參考文獻