chore(i18n): sync translations with latest source changes (chunk 7/8, 8 changes)
This commit is contained in:
parent
8e336f5ef4
commit
59764fe4f7
File diff suppressed because one or more lines are too long
|
|
@ -0,0 +1,30 @@
|
|||
# 使用遷移學習對牛津寵物進行分類
|
||||
|
||||
來自 [AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners) 的實驗作業。
|
||||
|
||||
## 任務
|
||||
|
||||
想像一下,您需要為一家寵物托管中心開發一個應用程式,用於記錄所有的寵物。這樣的應用程式的一個重要功能就是能夠通過照片自動識別寵物的品種。在這次作業中,我們將使用遷移學習來對 [Oxford-IIIT](https://www.robots.ox.ac.uk/~vgg/data/pets/) 寵物數據集中的真實寵物圖片進行分類。
|
||||
|
||||
## 數據集
|
||||
|
||||
我們將使用原始的 [Oxford-IIIT](https://www.robots.ox.ac.uk/~vgg/data/pets/) 寵物數據集,該數據集包含 35 種不同品種的狗和貓。
|
||||
|
||||
要下載數據集,請使用以下程式碼片段:
|
||||
|
||||
```python
|
||||
!wget https://www.robots.ox.ac.uk/~vgg/data/pets/data/images.tar.gz
|
||||
!tar xfz images.tar.gz
|
||||
!rm images.tar.gz
|
||||
```
|
||||
|
||||
## 啟動 Notebook
|
||||
|
||||
通過打開 [OxfordPets.ipynb](../../../../../../lessons/4-ComputerVision/08-TransferLearning/lab/OxfordPets.ipynb) 開始實驗。
|
||||
|
||||
## 收穫
|
||||
|
||||
遷移學習和預訓練網絡使我們能夠相對輕鬆地解決現實世界中的圖像分類問題。然而,預訓練網絡在處理類似類型的圖像時效果較好,如果我們開始分類非常不同的圖像(例如醫學圖像),結果可能會大大降低準確性。
|
||||
|
||||
**免責聲明**:
|
||||
本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。儘管我們努力確保翻譯的準確性,但請注意,自動翻譯可能包含錯誤或不準確之處。原始文件的母語版本應被視為權威來源。對於關鍵資訊,建議使用專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋不承擔責任。
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -0,0 +1,100 @@
|
|||
# 自動編碼器
|
||||
|
||||
在訓練 CNN 時,其中一個問題是需要大量的標記數據。在圖像分類的情況下,我們需要將圖像分成不同的類別,這是一項手動工作。
|
||||
|
||||
## [課前測驗](https://ff-quizzes.netlify.app/en/ai/quiz/17)
|
||||
|
||||
然而,我們可能希望使用原始(未標記)的數據來訓練 CNN 特徵提取器,這被稱為**自監督學習**。在這種情況下,我們使用訓練圖像作為網絡的輸入和輸出。**自動編碼器**的主要思想是,我們會有一個**編碼器網絡**,將輸入圖像轉換為某種**潛在空間**(通常是一個較小尺寸的向量),然後通過**解碼器網絡**來重建原始圖像。
|
||||
|
||||
> ✅ [自動編碼器](https://wikipedia.org/wiki/Autoencoder) 是“一種用於學習未標記數據的高效編碼的人工神經網絡。”
|
||||
|
||||
由於我們訓練自動編碼器以捕捉原始圖像中的盡可能多的信息以進行準確重建,網絡會嘗試找到最佳的**嵌入**來捕捉輸入圖像的含義。
|
||||
|
||||

|
||||
|
||||
> 圖片來源:[Keras 博客](https://blog.keras.io/building-autoencoders-in-keras.html)
|
||||
|
||||
## 使用自動編碼器的場景
|
||||
|
||||
雖然重建原始圖像本身似乎沒有太大的用途,但在以下幾個場景中,自動編碼器特別有用:
|
||||
|
||||
* **降低圖像的維度以進行可視化**或**訓練圖像嵌入**。通常,自動編碼器比 PCA 效果更好,因為它考慮了圖像的空間特性和層次特徵。
|
||||
* **去噪**,即去除圖像中的噪點。由於噪點包含大量無用信息,自動編碼器無法將所有噪點壓縮到相對較小的潛在空間,因此它只捕捉圖像的重要部分。在訓練去噪器時,我們以原始圖像為目標,並使用人工添加噪點的圖像作為自動編碼器的輸入。
|
||||
* **超分辨率**,即提高圖像的分辨率。我們以高分辨率圖像為目標,並使用低分辨率圖像作為自動編碼器的輸入。
|
||||
* **生成模型**。一旦我們訓練了自動編碼器,解碼器部分可以用來從隨機潛在向量生成新物體。
|
||||
|
||||
## 變分自動編碼器 (VAE)
|
||||
|
||||
傳統的自動編碼器以某種方式降低輸入數據的維度,找出輸入圖像的重要特徵。然而,潛在向量通常沒有太多意義。換句話說,以 MNIST 數據集為例,找出哪些數字對應於不同的潛在向量並不容易,因為相近的潛在向量不一定對應於相同的數字。
|
||||
|
||||
另一方面,為了訓練*生成*模型,理解潛在空間會更有幫助。這一想法引導我們進入**變分自動編碼器** (VAE)。
|
||||
|
||||
VAE 是一種自動編碼器,它學習預測潛在參數的*統計分佈*,即所謂的**潛在分佈**。例如,我們可能希望潛在向量呈正態分佈,具有某些均值 z<sub>mean</sub> 和標準差 z<sub>sigma</sub>(均值和標準差都是某個維度 d 的向量)。VAE 的編碼器學習預測這些參數,然後解碼器從該分佈中取隨機向量以重建物體。
|
||||
|
||||
總結如下:
|
||||
|
||||
* 從輸入向量中,我們預測 `z_mean` 和 `z_log_sigma`(不是直接預測標準差,而是預測其對數)
|
||||
* 從分佈 N(z<sub>mean</sub>,exp(z<sub>log\_sigma</sub>)) 中抽樣一個向量 `sample`
|
||||
* 解碼器嘗試使用 `sample` 作為輸入向量來解碼原始圖像
|
||||
|
||||
<img src="../../../../../translated_images/zh-TW/vae.464c465a5b6a9e25.webp" width="50%">
|
||||
|
||||
> 圖片來源:[這篇博客文章](https://ijdykeman.github.io/ml/2016/12/21/cvae.html) 作者 Isaak Dykeman
|
||||
|
||||
變分自動編碼器使用一個由兩部分組成的複雜損失函數:
|
||||
|
||||
* **重建損失**是顯示重建圖像與目標圖像有多接近的損失函數(可以是均方誤差,MSE)。這與普通自動編碼器的損失函數相同。
|
||||
* **KL 損失**,確保潛在變量分佈接近正態分佈。它基於 [Kullback-Leibler 散度](https://www.countbayesie.com/blog/2017/5/9/kullback-leibler-divergence-explained) 的概念——一種估算兩個統計分佈相似程度的度量。
|
||||
|
||||
VAE 的一個重要優勢是它使生成新圖像變得相對容易,因為我們知道從哪個分佈中抽樣潛在向量。例如,如果我們在 MNIST 上使用 2D 潛在向量訓練 VAE,我們可以調整潛在向量的組件來生成不同的數字:
|
||||
|
||||
<img alt="vaemnist" src="../../../../../translated_images/zh-TW/vaemnist.cab9e602dc08dc50.webp" width="50%"/>
|
||||
|
||||
> 圖片來源:[Dmitry Soshnikov](http://soshnikov.com)
|
||||
|
||||
觀察圖像如何相互融合,當我們開始從潛在參數空間的不同部分獲取潛在向量時。我們還可以在 2D 中可視化這個空間:
|
||||
|
||||
<img alt="vaemnist cluster" src="../../../../../translated_images/zh-TW/vaemnist-diag.694315f775d5d666.webp" width="50%"/>
|
||||
|
||||
> 圖片來源:[Dmitry Soshnikov](http://soshnikov.com)
|
||||
|
||||
## ✍️ 練習:自動編碼器
|
||||
|
||||
在以下筆記本中了解更多關於自動編碼器的內容:
|
||||
|
||||
* [TensorFlow 中的自動編碼器](AutoencodersTF.ipynb)
|
||||
* [PyTorch 中的自動編碼器](AutoEncodersPyTorch.ipynb)
|
||||
|
||||
## 自動編碼器的特性
|
||||
|
||||
* **數據特定** - 它們僅適用於訓練時使用的圖像類型。例如,如果我們在花卉上訓練超分辨率網絡,它在肖像上效果不佳。這是因為網絡可以通過從訓練數據集中學到的特徵中提取細節來生成高分辨率圖像。
|
||||
* **有損** - 重建的圖像與原始圖像並不完全相同。損失的性質由訓練期間使用的*損失函數*定義。
|
||||
* 適用於**未標記數據**
|
||||
|
||||
## [課後測驗](https://ff-quizzes.netlify.app/en/ai/quiz/18)
|
||||
|
||||
## 結論
|
||||
|
||||
在本課中,您學習了 AI 科學家可用的各種類型的自動編碼器。您學習了如何構建它們,以及如何使用它們來重建圖像。您還學習了 VAE 以及如何使用它生成新圖像。
|
||||
|
||||
## 🚀 挑戰
|
||||
|
||||
在本課中,您學習了如何使用自動編碼器處理圖像。但它們也可以用於音樂!查看 Magenta 項目的 [MusicVAE](https://magenta.tensorflow.org/music-vae) 項目,該項目使用自動編碼器來學習重建音樂。使用此庫進行一些[實驗](https://colab.research.google.com/github/magenta/magenta-demos/blob/master/colab-notebooks/Multitrack_MusicVAE.ipynb),看看您能創造出什麼。
|
||||
|
||||
## [課後測驗](https://ff-quizzes.netlify.app/en/ai/quiz/16)
|
||||
|
||||
## 回顧與自學
|
||||
|
||||
作為參考,您可以在以下資源中閱讀更多關於自動編碼器的內容:
|
||||
|
||||
* [在 Keras 中構建自動編碼器](https://blog.keras.io/building-autoencoders-in-keras.html)
|
||||
* [NeuroHive 博客文章](https://neurohive.io/ru/osnovy-data-science/variacionnyj-avtojenkoder-vae/)
|
||||
* [變分自動編碼器解析](https://kvfrans.com/variational-autoencoders-explained/)
|
||||
* [條件變分自動編碼器](https://ijdykeman.github.io/ml/2016/12/21/cvae.html)
|
||||
|
||||
## 作業
|
||||
|
||||
在 [使用 TensorFlow 的筆記本](AutoencodersTF.ipynb) 的末尾,您會找到一個“任務”——將其作為您的作業。
|
||||
|
||||
---
|
||||
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -0,0 +1,101 @@
|
|||
# 生成對抗網路
|
||||
|
||||
在上一節中,我們學習了**生成模型**:這些模型可以生成與訓練數據集中的圖像相似的新圖像。VAE 是生成模型的一個很好的例子。
|
||||
|
||||
## [課前測驗](https://ff-quizzes.netlify.app/en/ai/quiz/19)
|
||||
|
||||
然而,如果我們嘗試生成一些真正有意義的東西,比如一幅具有合理解析度的畫作,使用 VAE 進行訓練時可能無法很好地收斂。針對這種需求,我們需要學習另一種專門用於生成模型的架構——**生成對抗網路**,簡稱 GAN。
|
||||
|
||||
GAN 的主要思想是使用兩個神經網路,並讓它們相互對抗進行訓練:
|
||||
|
||||
<img src="../../../../../translated_images/zh-TW/gan_architecture.8f3a5ab62b8d5d69.webp" width="70%"/>
|
||||
|
||||
> 圖片來源:[Dmitry Soshnikov](http://soshnikov.com)
|
||||
|
||||
> ✅ 一些術語:
|
||||
> * **生成器(Generator)** 是一個網路,它接收一個隨機向量,並生成一張圖像作為輸出。
|
||||
> * **判別器(Discriminator)** 是一個網路,它接收一張圖像,並判斷該圖像是真實圖像(來自訓練數據集)還是由生成器生成的圖像。本質上,它是一個圖像分類器。
|
||||
|
||||
### 判別器
|
||||
|
||||
判別器的架構與普通的圖像分類網路沒有太大區別。在最簡單的情況下,它可以是一個全連接分類器,但更常見的是一個[卷積網路](../07-ConvNets/README.md)。
|
||||
|
||||
> ✅ 基於卷積網路的 GAN 被稱為 [DCGAN](https://arxiv.org/pdf/1511.06434.pdf)
|
||||
|
||||
一個 CNN 判別器由以下層組成:多個卷積+池化層(空間尺寸逐漸減小),以及一個或多個全連接層以獲得“特徵向量”,最後是一個二元分類器。
|
||||
|
||||
> ✅ 在這裡,“池化”是一種減小圖像尺寸的技術。“池化層通過將一層中神經元集群的輸出合併為下一層中的單個神經元來減少數據的維度。” - [來源](https://wikipedia.org/wiki/Convolutional_neural_network#Pooling_layers)
|
||||
|
||||
### 生成器
|
||||
|
||||
生成器稍微複雜一些。你可以將其視為一個反向的判別器。從一個潛在向量(類似於特徵向量)開始,它通過一個全連接層轉換為所需的尺寸/形狀,然後是反卷積+上採樣。這與[自編碼器](../09-Autoencoders/README.md)的*解碼器*部分類似。
|
||||
|
||||
> ✅ 由於卷積層是通過線性濾波器遍歷圖像來實現的,反卷積本質上與卷積類似,可以使用相同的層邏輯來實現。
|
||||
|
||||
<img src="../../../../../translated_images/zh-TW/gan_arch_detail.46b95fd366f8e543.webp" width="70%"/>
|
||||
|
||||
> 圖片來源:[Dmitry Soshnikov](http://soshnikov.com)
|
||||
|
||||
### 訓練 GAN
|
||||
|
||||
GAN 被稱為**對抗性**網路,因為生成器和判別器之間存在持續的競爭。在這種競爭中,生成器和判別器都會不斷改進,從而使網路學會生成越來越好的圖像。
|
||||
|
||||
訓練過程分為兩個階段:
|
||||
|
||||
* **訓練判別器**。這個任務相對簡單:我們生成一批由生成器生成的圖像,標記為 0(代表假圖像),並從輸入數據集中取一批圖像(標記為 1,真實圖像)。我們計算出一些*判別器損失*,然後進行反向傳播。
|
||||
* **訓練生成器**。這稍微複雜一些,因為我們無法直接知道生成器的期望輸出。我們將整個 GAN 網路(由生成器和判別器組成)輸入一些隨機向量,並期望結果為 1(對應於真實圖像)。接著,我們凍結判別器的參數(不希望在這一步對其進行訓練),然後進行反向傳播。
|
||||
|
||||
在這個過程中,生成器和判別器的損失不會顯著下降。在理想情況下,它們應該呈現振盪,這表明兩個網路的性能都在提高。
|
||||
|
||||
## ✍️ 練習:GANs
|
||||
|
||||
* [TensorFlow/Keras 的 GAN 筆記本](GANTF.ipynb)
|
||||
* [PyTorch 的 GAN 筆記本](GANPyTorch.ipynb)
|
||||
|
||||
### GAN 訓練的問題
|
||||
|
||||
GAN 的訓練特別困難,以下是一些常見問題:
|
||||
|
||||
* **模式崩潰(Mode Collapse)**。這指的是生成器學會生成一個成功欺騙判別器的圖像,而不是生成多樣化的圖像。
|
||||
* **對超參數的敏感性**。經常會看到 GAN 完全無法收斂,然後突然因學習率的調整而收斂。
|
||||
* **生成器與判別器之間的平衡**。在許多情況下,判別器的損失可能會迅速降為零,導致生成器無法進一步訓練。為了解決這個問題,我們可以嘗試為生成器和判別器設置不同的學習率,或者在判別器損失已經很低時跳過其訓練。
|
||||
* **高解析度訓練**。與自編碼器的問題類似,這個問題是由於重建過多層的卷積網路導致的偽影。通常通過所謂的**漸進式增長**來解決這個問題,先用低解析度圖像訓練幾層,然後逐步“解鎖”或添加層。另一種解決方案是增加層之間的額外連接,並同時訓練多個解析度——詳情請參考這篇[多尺度梯度 GAN 論文](https://arxiv.org/abs/1903.06048)。
|
||||
|
||||
## 風格遷移
|
||||
|
||||
GAN 是生成藝術圖像的一種絕佳方式。另一種有趣的技術是所謂的**風格遷移**,它將一張**內容圖像**重新繪製成另一種風格,應用來自**風格圖像**的濾鏡。
|
||||
|
||||
其工作原理如下:
|
||||
* 我們從一張隨機噪聲圖像開始(或者從內容圖像開始,但為了便於理解,從隨機噪聲開始更簡單)。
|
||||
* 我們的目標是創建一張圖像,使其同時接近內容圖像和風格圖像。這由兩個損失函數決定:
|
||||
- **內容損失**:基於 CNN 在某些層提取的當前圖像與內容圖像的特徵計算。
|
||||
- **風格損失**:通過當前圖像與風格圖像之間的 Gram 矩陣以巧妙的方式計算(更多細節請參考[示例筆記本](StyleTransfer.ipynb))。
|
||||
* 為了使圖像更平滑並去除噪聲,我們還引入了**變異損失**,該損失計算相鄰像素之間的平均距離。
|
||||
* 主優化循環使用梯度下降(或其他優化算法)調整當前圖像,以最小化總損失,該損失是所有三個損失的加權和。
|
||||
|
||||
## ✍️ 示例:[風格遷移](StyleTransfer.ipynb)
|
||||
|
||||
## [課後測驗](https://ff-quizzes.netlify.app/en/ai/quiz/20)
|
||||
|
||||
## 總結
|
||||
|
||||
在本課中,你學習了 GAN 的基本概念以及如何訓練它們。你還了解了這種類型的神經網路可能面臨的特殊挑戰,以及一些解決這些挑戰的策略。
|
||||
|
||||
## 🚀 挑戰
|
||||
|
||||
使用你自己的圖像運行[風格遷移筆記本](StyleTransfer.ipynb)。
|
||||
|
||||
## 複習與自學
|
||||
|
||||
參考以下資源,進一步了解 GAN:
|
||||
|
||||
* Marco Pasini, [我在訓練 GAN 一年中學到的 10 個教訓](https://towardsdatascience.com/10-lessons-i-learned-training-generative-adversarial-networks-gans-for-a-year-c9071159628)
|
||||
* [StyleGAN](https://en.wikipedia.org/wiki/StyleGAN),一個值得考慮的*事實標準* GAN 架構
|
||||
* [在 Azure ML 上使用 GAN 創建生成藝術](https://soshnikov.com/scienceart/creating-generative-art-using-gan-on-azureml/)
|
||||
|
||||
## 作業
|
||||
|
||||
重新訪問與本課相關的兩個筆記本之一,並使用你自己的圖像重新訓練 GAN。你能創造出什麼?
|
||||
|
||||
---
|
||||
|
||||
Loading…
Reference in New Issue