色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何使用TensorFlow構建和訓練變分自動編碼器

科技觀察員 ? 來源:allaboutcircuits ? 作者:亨利·安薩·福特久 ? 2022-05-05 16:57 ? 次閱讀

多年來,我們已經看到許多領域和行業利用人工智能AI) 的力量來推動研究的邊界。數據壓縮和重建也不例外,人工智能的應用可以用來構建更強大的系統。

在本文中,我們將研究一個非常流行的 AI 用例,用于壓縮數據并使用自動編碼器重建壓縮數據。

自動編碼器應用

自動編碼器在機器學習領域引起了許多人的關注,這一事實通過自動編碼器的改進和幾種變體的發明變得顯而易見。他們在神經機器翻譯、藥物發現、圖像去噪等幾個領域取得了一些有希望的(如果不是最先進的)結果。

自動編碼器的組成部分

與大多數神經網絡一樣,自編碼器通過反向傳播梯度來優化一組權重——但自編碼器架構與大多數神經網絡架構之間最顯著的區別是瓶頸。這個瓶頸是將我們的數據壓縮成較低維度的表示的一種手段。自編碼器的另外兩個重要部分是編碼器和解碼器。

將這三個組件融合在一起形成了一個“香草”自動編碼器,盡管更復雜的自動編碼器可能有一些額外的組件。

讓我們分別看一下這些組件。

編碼器

這是數據壓縮和重建的第一階段,它實際上負責數據壓縮階段。編碼器是一個前饋神經網絡,它接收數據特征(例如圖像壓縮中的像素)并輸出一個大小小于數據特征大小的潛在向量。

pYYBAGJzkXeABRf5AAG0JpivaWg198.png

為了使數據的重建具有魯棒性,編碼器在訓練期間優化其權重,以將輸入數據表示的最重要特征壓縮到小型潛在向量中。這確保了解碼器有足夠的關于輸入數據的信息來以最小的損失重建數據。

潛在向量(瓶頸)

自編碼器的瓶頸或潛在向量分量是最關鍵的部分——當我們需要選擇它的大小時,它變得更加關鍵。

編碼器的輸出為我們提供了潛在向量,并且應該包含我們輸入數據的最重要的特征表示。它還用作解碼器部分的輸入,并將有用的表示傳播到解碼器進行重建。

為潛在向量選擇更小的尺寸意味著我們可以用更少的輸入數據信息來表示輸入數據特征。選擇更大的潛在向量大小會淡化使用自動編碼器進行壓縮的整個想法,并且還會增加計算成本。

解碼器

這個階段結束了我們的數據壓縮和重建過程。就像編碼器一樣,這個組件也是一個前饋神經網絡,但它在結構上看起來與編碼器有點不同。這種差異來自這樣一個事實,即解碼器將一個比解碼器輸出更小的潛在向量作為輸入。

解碼器的功能是從與輸入非常接近的潛在向量生成輸出。

poYBAGJzkXiAIBTBAADc_yeQMFI477.png

訓練自動編碼器

通常,在訓練自動編碼器時,我們將這些組件一起構建,而不是獨立構建。我們使用梯度下降或 ADAM 優化器等優化算法對它們進行端到端訓練。

損失函數

值得討論的自動編碼器訓練過程的一部分是損失函數。數據重建是一項生成任務,與其他機器學習任務不同,我們的目標是最大化預測正確類別的概率,我們驅動我們的網絡產生接近輸入的輸出。

我們可以通過幾個損失函數來實現這個目標,例如 l1、l2、均方誤差等。這些損失函數的共同點是它們測量輸入和輸出之間的差異(即多遠或相同),使它們中的任何一個成為合適的選擇。

自動編碼器網絡

一直以來,我們一直在使用多層感知器來設計我們的編碼器和解碼器——但事實證明,我們可以使用更專業的框架,例如卷積神經網絡 (CNN) 來捕獲更多關于輸入數據的空間信息圖像數據壓縮的情況。

令人驚訝的是,研究表明,用作文本數據自動編碼器的循環網絡工作得非常好,但我們不打算在本文的范圍內進行討論。多層感知器中使用的編碼器-潛在向量-解碼器的概念仍然適用于卷積自動編碼器。唯一的區別是我們設計了帶有卷積層的解碼器和編碼器。

所有這些自動編碼器網絡都可以很好地完成壓縮任務,但存在一個問題。

我們討論過的網絡創造力為零。我所說的零創造力的意思是他們只能產生他們已經看到或接受過培訓的輸出。

我們可以通過稍微調整我們的架構設計來激發一定程度的創造力。結果被稱為變分自動編碼器。

pYYBAGJzkXqAFBwqAACkczHl8WU685.png

變分自編碼器

變分自動編碼器引入了兩個主要的設計變化:

我們沒有將輸入轉換為潛在編碼,而是輸出兩個參數向量:均值和方差。

一個稱為 KL 散度損失的附加損失項被添加到初始損失函數中。

變分自動編碼器背后的想法是,我們希望我們的解碼器使用從由編碼器生成的均值向量和方差向量參數化的分布中采樣的潛在向量來重建我們的數據。

從分布中采樣特征給解碼器一個受控的空間來生成。在訓練變分自動編碼器后,每當我們對輸入數據執行前向傳遞時,編碼器都會生成一個均值和方差向量,負責確定從哪個分布中對潛在向量進行采樣。

平均向量決定了輸入數據的編碼應該集中在哪里,方差決定了我們想要從中選擇編碼以生成真實輸出的徑向空間或圓。這意味著,對于相同輸入數據的每次前向傳遞,我們的變分自動編碼器可以生成以均值向量為中心和方差空間內的不同輸出變體。

相比之下,在查看標準自動編碼器時,當我們嘗試生成網絡尚未訓練的輸出時,由于編碼器產生的潛在向量空間的不連續性,它會生成不切實際的輸出。

poYBAGJzkXuAT7IuAADf6jhOFU4891.png

現在我們對變分自動編碼器有了一個直觀的了解,讓我們看看如何在 TensorFlow 中構建一個。

用于變分自動編碼器的 TensorFlow 代碼

我們將從準備好數據集開始我們的示例。為簡單起見,我們將使用 MNIST 數據集。

(train_images, _), (test_images, _) = tf.keras.datasets.mnist.load_data()

train_images = train_images.reshape(train_images.shape[0], 28, 28, 1).astype(‘float32’)

test_images = test_images.reshape(test_images.shape[0], 28, 28, 1).astype(‘float32’)

# Normalizing the images to the range of [0., 1.]

train_images /= 255.

test_images /= 255.

# Binarization

train_images[train_images 》= .5] = 1.

train_images[train_images 《 .5] = 0.

test_images[test_images 》= .5] = 1.

test_images[test_images 《 .5] = 0.

TRAIN_BUF = 60000

BATCH_SIZE = 100

TEST_BUF = 10000

train_dataset = tf.data.Dataset.from_tensor_slices(train_images).shuffle(TRAIN_BUF).batch(BATCH_SIZE)

test_dataset = tf.data.Dataset.from_tensor_slices(test_images).shuffle(TEST_BUF).batch(BATCH_SIZE)

Obtain dataset and prepare it for the task.

class CVAE(tf.keras.Model):

def __init__(self, latent_dim):

super(CVAE, self).__init__()

self.latent_dim = latent_dim

self.inference_net = tf.keras.Sequential(

tf.keras.layers.InputLayer(input_shape=(28, 28, 1)),

tf.keras.layers.Conv2D(

filters=32, kernel_size=3, strides=(2, 2), activation=‘relu’),

tf.keras.layers.Conv2D(

filters=64, kernel_size=3, strides=(2, 2), activation=‘relu’),

tf.keras.layers.Flatten(),

# No activation

tf.keras.layers.Dense(latent_dim + latent_dim),

self.generative_net = tf.keras.Sequential(

tf.keras.layers.InputLayer(input_shape=(latent_dim,)),

tf.keras.layers.Dense(units=7*7*32, activation=tf.nn.relu),

tf.keras.layers.Reshape(target_shape=(7, 7, 32)),

tf.keras.layers.Conv2DTranspose(

filters=64,

kernel_size=3,

strides=(2, 2),

padding=“SAME”,

activation=‘relu’),

tf.keras.layers.Conv2DTranspose(

filters=32,

kernel_size=3,

strides=(2, 2),

padding=“SAME”,

activation=‘relu’),

# No activation

tf.keras.layers.Conv2DTranspose(

filters=1, kernel_size=3, strides=(1, 1), padding=“SAME”),

@tf.function

def sample(self, eps=None):

if eps is None:

eps = tf.random.normal(shape=(100, self.latent_dim))

return self.decode(eps, apply_sigmoid=True)

def encode(self, x):

mean, logvar = tf.split(self.inference_net(x), num_or_size_splits=2, axis=1)

return mean, logvar

def reparameterize(self, mean, logvar):

eps = tf.random.normal(shape=mean.shape)

return eps * tf.exp(logvar * .5) + mean

def decode(self, z, apply_sigmoid=False):

logits = self.generative_net(z)

if apply_sigmoid:

probs = tf.sigmoid(logits)

return probs

return logits

這兩個代碼片段準備了我們的數據集并構建了我們的變分自動編碼器模型。在模型代碼片段中,有幾個輔助函數來執行編碼、采樣和解碼。

計算梯度的重新參數化

有一個我們尚未討論的重新參數化函數,但它解決了我們的變分自動編碼器網絡中的一個非常關鍵的問題。回想一下,在解碼階段,我們從由編碼器生成的均值和方差向量控制的分布中對潛在向量編碼進行采樣。這在通過我們的網絡前向傳播數據時不會產生問題,但在從解碼器到編碼器的反向傳播梯度時會導致一個大問題,因為采樣操作是不可微的。

簡單來說,我們無法從采樣操作中計算梯度。

這個問題的一個很好的解決方法是應用重新參數化技巧。其工作原理是首先生成均值為 0 和方差為 1 的標準高斯分布,然后使用編碼器生成的均值和方差對該分布執行可微加法和乘法運算。

請注意,我們在代碼中將方差轉換為對數空間。這是為了確保數值穩定性。引入了額外的損失項Kullback-Leibler 散度損失,以確保我們生成的分布盡可能接近均值為 0 方差為 1 的標準高斯分布。

將分布的均值驅動為零可確保我們生成的分布彼此非常接近,以防止分布之間的不連續性。接近 1 的方差意味著我們有一個更適中的(即,不是很大也不是很小)的空間來生成編碼。

pYYBAGJzkXyAIO3EAABkdTBYcsI191.png

執行重新參數化技巧后,通過將方差向量與標準高斯分布相乘并將結果與??均值向量相加得到的分布與均值和方差向量立即控制的分布非常相似。

構建變分自編碼器的簡單步驟

讓我們通過總結構建變分自動編碼器的步驟來結束本教程

構建編碼器和解碼器網絡。

在編碼器和解碼器之間應用重新參數化技巧以允許反向傳播。

端到端訓練兩個網絡。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 編碼器
    +關注

    關注

    45

    文章

    3638

    瀏覽量

    134428
  • tensorflow
    +關注

    關注

    13

    文章

    329

    瀏覽量

    60528
收藏 人收藏

    評論

    相關推薦

    [8.2]--8.2自動編碼器

    深度學習
    jf_60701476
    發布于 :2022年12月01日 02:37:18

    新手 Protel 99SE 自動編碼和電氣規則問題

    跟著視頻畫的,到自動編碼時出現這個問題,哪位大神幫忙
    發表于 03-12 22:36

    基于編碼器的異常小區檢測

    Decoder將z重構成原始輸入。    圖2 編碼器處理過程示意圖  VAE 的參數通過兩個損失函數來進行訓練:一個是重構損失(reconstruction loss),它迫使
    發表于 12-03 15:06

    稀疏邊緣降噪自動編碼器的方法

    為了提高自動編碼器算法的學習精度,更進一步降低分類任務的分類錯誤率,提出一種組合稀疏自動編碼器(SAE)和邊緣降噪自動編碼器(mDAE)從而形成稀疏邊緣降噪自動編碼器(SmDAE)的方
    發表于 12-21 14:41 ?3次下載
    稀疏邊緣降噪<b class='flag-5'>自動編碼器</b>的方法

    基于動態dropout的改進堆疊自動編碼機方法

    自動編碼機算法中;同時,根據傳統dropout算法容易使部分節點長期處于熄火狀態的缺陷,提出了一種動態dropout改進算法,使用動態函數將傳統靜態熄火率修改為隨著迭代次數逐漸減小的動態熄火率;最后,利用動態dropout算法改進堆疊自動編碼機的預
    發表于 12-26 14:37 ?0次下載
    基于動態dropout的改進堆疊<b class='flag-5'>自動編碼</b>機方法

    自動編碼器的社區發現算法

    準確.提出一種基于深度稀疏自動編碼器的社區發現算法CoDDA(a community detection algorithm based on deep sparse autoencoder),嘗試提高使用這些經典方法處理高維鄰接矩陣進行社區發現的準確性.首先,提出基于跳數的處理方法,對稀疏的鄰接矩
    發表于 01-02 18:32 ?0次下載
    <b class='flag-5'>自動編碼器</b>的社區發現算法

    自動編碼器與PCA的比較

    編碼器雖然不像 PCA 那般在教科書上隨處可見,但是在早期被拿來做深度網絡的逐層預訓練,其地位可見一斑。盡管在 ReLU、Dropout 等神器出現之后,人們不再使用 AutoEncoders 來
    發表于 06-11 15:37 ?5911次閱讀

    稀疏自編碼器TensorFlow實現詳解

     稀疏自編碼器(又稱稀疏自動編碼機)中,重構誤差中添加了一個稀疏懲罰,用來限定任何時刻的隱藏層中并不是所有單元都被激活。如果 m 是輸入模式的總數,那么可以定義一個參數 ρ_hat,用來表示每個隱藏層單元的行為(平均激活多少次)。
    發表于 06-11 16:45 ?3851次閱讀
    稀疏自<b class='flag-5'>編碼器</b>及<b class='flag-5'>TensorFlow</b>實現詳解

    如何使用深度神經網絡技術實現機器學習的全噪聲自動編碼器

    ,基于自動編碼器的深度神經網絡可以有效的用于數據特征提取。自動編碼是一種無監督學習算法,稀疏自動編碼器、降噪自動編碼器、收縮自動編碼器是在原
    發表于 12-11 15:44 ?7次下載
    如何使用深度神經網絡技術實現機器學習的全噪聲<b class='flag-5'>自動編碼器</b>

    一種改進的基于半自動編碼器的協同過濾推薦算法

    為高效利用推薦系統中用戶和物品的交互歷史和輔助信息,提出一種改進的協同過濾推薦算法。利用半自動編碼器對用戶和物品的輔助信息進行特征提取,將提取岀的特征映射到矩陣分解模型中,通過反向傳播算法實現半自動編碼器
    發表于 03-23 16:35 ?4次下載
    一種改進的基于半<b class='flag-5'>自動編碼器</b>的協同過濾推薦算法

    一種混合自動編碼器高斯混合模型MAGMM

    高維數據的無監督異常檢測是機器學習的重要挑戰之一。雖然先前基于單一深度自動編碼器和密度估計的方法已經取得了顯著的進展,但是其僅通過一個深度自編碼器來生成低維表示,這表明沒有足夠的信息來執行后續
    發表于 04-13 15:33 ?7次下載
    一種混合<b class='flag-5'>自動編碼器</b>高斯混合模型MAGMM

    一種基于編碼器的人臉圖像修復方法

    基于卷積神經網絡的人臉圖像修復技術在刑事偵破、文物保護及影視特效等領域有著重要的應用。但現有方法存在著圖像修復結果不夠清晰以及結果多樣化不足等缺點,為此,提出了一種基于編碼器的人臉圖像修復
    發表于 04-21 10:51 ?10次下載
    一種基于<b class='flag-5'>變</b><b class='flag-5'>分</b>自<b class='flag-5'>編碼器</b>的人臉圖像修復方法

    堆疊降噪自動編碼器(SDAE)

    自動編碼器(Auto-Encoder,AE) 自編碼器(autoencoder)是神經網絡的一種,經過訓練后能嘗試將輸入復制到輸出。自編碼器內部有一個隱藏層 h,可以產生
    的頭像 發表于 01-11 17:04 ?6536次閱讀
    堆疊降噪<b class='flag-5'>自動編碼器</b>(SDAE)

    編碼器好壞怎么判斷,編碼器原理

    編碼器(Encoder)是將輸入數據轉化為特定編碼表示的一種技術。對于不同類型的編碼器,評判其好壞可以從多個方面進行考量,包括編碼質量、速度、模型結構等。
    的頭像 發表于 01-23 10:58 ?1884次閱讀

    tensorflow簡單的模型訓練

    TensorFlow開始,然后介紹如何構建和訓練一個簡單的神經網絡模型。 1. 安裝TensorFlow 首先,我們需要安裝TensorFlow
    的頭像 發表于 07-05 09:38 ?633次閱讀
    主站蜘蛛池模板: 好吊射视频988gaocom| 一区视频免费观看| 国产中文视频| 亚洲精品无码AAAAAA片| 精品视频免费在线观看| 伊人久久精品线影院| 久久这里只精品国产99re66| 777米奇影院第七色色| 青草伊人久久| 国产精品嫩草影院| 亚洲精品有码在线观看| 久久免费精品国产72精品剧情| 亚洲区视频在线观看| 伦理片飘花手机在线| 扒开她的黑森林让我添动态图 | 亚洲免费在线播放| 久久成人免费大片| 99这里只有是精品2| 少妇被阴内射XXXB少妇BB| 国内精品视频在线播放一区 | 护士一级片| 2021国产精品视频一区| 日本一区精品久久久久影院| 国产又粗又猛又爽黄老大爷| 在线观看亚洲 日韩 国产| 欧美日韩无套内射另类| 国产精品乱码色情一区二区视频| 亚洲无码小格式| 青草久久精品亚洲综合专区| 国产性色AV内射白浆肛交后入| 中文字幕蜜臀AV熟女人妻| 青青青久久| 好妞操| 印度老妇女bbbxxx| 日本特黄的免费大片视频| 好男人午夜www视频在线观看 | 香蕉鱼视频观看在线视频下载| 久久这里只精品国产99re66| 高H黄暴NP辣H一女多男| 一级做a爰片久久毛片潮喷动漫| 强开乳罩摸双乳吃奶视频|