亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

利用 TensorFlow 實(shí)現(xiàn)卷積自編碼器

Steven / 3217人閱讀

摘要:自編碼器的一個(gè)非常受歡迎的使用場(chǎng)景是圖像處理。這個(gè)自編碼器就稱之為卷積自編碼器,使用卷積自編碼器卷積自編碼器可以用于圖像的重構(gòu)工作。網(wǎng)絡(luò)架構(gòu)卷積自編碼器的編碼部分將是一個(gè)典型的卷積過(guò)程。

作者:chen_h
微信號(hào) & QQ:862251340
微信公眾號(hào):coderpai
簡(jiǎn)書地址:https://www.jianshu.com/p/250...


介紹和概念

自動(dòng)編碼器(Auto-encoders)是神經(jīng)網(wǎng)絡(luò)的一種形式,它的輸入數(shù)據(jù)與輸出數(shù)據(jù)是相同的。他們通過(guò)將輸入數(shù)據(jù)壓縮到一個(gè)潛在表示空間里面,然后再根據(jù)這個(gè)表示空間將數(shù)據(jù)進(jìn)行重構(gòu)得到最后的輸出數(shù)據(jù)。

自編碼器的一個(gè)非常受歡迎的使用場(chǎng)景是圖像處理。其中使用到的小技巧是用卷積層來(lái)替換全連接層。這個(gè)轉(zhuǎn)變方法是將一個(gè)非常寬的,非常瘦的(比如 100*100 的像素點(diǎn),3 通道,RGB)圖像轉(zhuǎn)換成一個(gè)非常窄的,非常厚的圖像。這種方法非常有助于幫助我們從圖像中提取出視覺特征,從而得到更準(zhǔn)確的潛在表示空間。最后我們的圖像重構(gòu)過(guò)程采用上采樣和卷積。

這個(gè)自編碼器就稱之為卷積自編碼器(Convolutional Autoencoder,CAE)

使用卷積自編碼器

卷積自編碼器可以用于圖像的重構(gòu)工作。例如,他們可以學(xué)習(xí)從圖片中去除噪聲,或者重構(gòu)圖片缺失的部分。

為了實(shí)現(xiàn)上述提到的效果,我們一般不使用相同的輸入數(shù)據(jù)和輸出數(shù)據(jù),取而代之的是,使用含有噪聲的圖片作為輸入數(shù)據(jù),然后輸出數(shù)據(jù)是一個(gè)干凈的圖片。卷積自編碼器就會(huì)通過(guò)學(xué)習(xí),去去除圖片中的噪聲,或者去填補(bǔ)圖片中的空缺部分。

接下來(lái),讓我們來(lái)看一下 CAE 是如何來(lái)填充圖中眼睛上的十字架。我們假設(shè)圖片的眼睛上面存在一個(gè)十字架黑影,我們需要?jiǎng)h除這個(gè)十字架噪聲。首先,我們需要來(lái)手動(dòng)創(chuàng)建這個(gè)數(shù)據(jù)庫(kù),當(dāng)然,這個(gè)動(dòng)作非常方便。

現(xiàn)在我們的卷積自編碼器就可以開始訓(xùn)練了,我們可以用它去除我們從未見過(guò)的眼睛照片上面的十字線!

利用 TensorFlow 來(lái)實(shí)現(xiàn)這個(gè)卷積自編碼器

看我們利用 MNIST 數(shù)據(jù)集來(lái)看看這個(gè)網(wǎng)絡(luò)是如何實(shí)現(xiàn)的,完整的代碼可以在 Github 上面下載。

網(wǎng)絡(luò)架構(gòu)

卷積自編碼器的編碼部分將是一個(gè)典型的卷積過(guò)程。每一個(gè)卷積層之后都會(huì)加上一個(gè)池化層,主要是為了減少數(shù)據(jù)的維度。解碼器需要從一個(gè)非常窄的數(shù)據(jù)空間中重構(gòu)出一個(gè)寬的圖像。

一般情況下,你會(huì)看到我們后面是采用反卷積層來(lái)增加我們圖像的寬度和高度。它們的工作原理和卷積層的工作原理幾乎完全一樣,但是作用方向相反。比如,你有一個(gè) 33 的卷積核,那么在編碼器中我們是將該區(qū)域的圖像編碼成一個(gè)元素點(diǎn),但是在解碼器中,也就是反卷積中,我們是把一個(gè)元素點(diǎn)解碼成 33 個(gè)元素點(diǎn)。TensorFlow API 為我們提供了這個(gè)功能,參考 tf.nn.conv2d_transpose

自動(dòng)編碼器只需要在噪聲的圖像上進(jìn)行訓(xùn)練,就可以非常成功的進(jìn)行圖片去燥。比如,我們可以在訓(xùn)練圖片中添加入高斯噪聲來(lái)創(chuàng)建包含噪聲的圖像,然后將這些像素值裁剪在 0 到 1 之間。我們將噪聲圖像作為輸入數(shù)據(jù),最原始的感覺圖像作為輸出數(shù)據(jù),也就是我們的目標(biāo)值。

模型定義
learning_rate = 0.001
inputs_ = tf.placeholder(tf.float32, (None, 28, 28, 1), name="inputs")
targets_ = tf.placeholder(tf.float32, (None, 28, 28, 1), name="targets")
### Encoder
conv1 = tf.layers.conv2d(inputs=inputs_, filters=32, kernel_size=(3,3), padding="same", activation=tf.nn.relu)
# Now 28x28x32
maxpool1 = tf.layers.max_pooling2d(conv1, pool_size=(2,2), strides=(2,2), padding="same")
# Now 14x14x32
conv2 = tf.layers.conv2d(inputs=maxpool1, filters=32, kernel_size=(3,3), padding="same", activation=tf.nn.relu)
# Now 14x14x32
maxpool2 = tf.layers.max_pooling2d(conv2, pool_size=(2,2), strides=(2,2), padding="same")
# Now 7x7x32
conv3 = tf.layers.conv2d(inputs=maxpool2, filters=16, kernel_size=(3,3), padding="same", activation=tf.nn.relu)
# Now 7x7x16
encoded = tf.layers.max_pooling2d(conv3, pool_size=(2,2), strides=(2,2), padding="same")
# Now 4x4x16
### Decoder
upsample1 = tf.image.resize_images(encoded, size=(7,7), method=tf.image.ResizeMethod.NEAREST_NEIGHBOR)
# Now 7x7x16
conv4 = tf.layers.conv2d(inputs=upsample1, filters=16, kernel_size=(3,3), padding="same", activation=tf.nn.relu)
# Now 7x7x16
upsample2 = tf.image.resize_images(conv4, size=(14,14), method=tf.image.ResizeMethod.NEAREST_NEIGHBOR)
# Now 14x14x16
conv5 = tf.layers.conv2d(inputs=upsample2, filters=32, kernel_size=(3,3), padding="same", activation=tf.nn.relu)
# Now 14x14x32
upsample3 = tf.image.resize_images(conv5, size=(28,28), method=tf.image.ResizeMethod.NEAREST_NEIGHBOR)
# Now 28x28x32
conv6 = tf.layers.conv2d(inputs=upsample3, filters=32, kernel_size=(3,3), padding="same", activation=tf.nn.relu)
# Now 28x28x32
logits = tf.layers.conv2d(inputs=conv6, filters=1, kernel_size=(3,3), padding="same", activation=None)
#Now 28x28x1
# Pass logits through sigmoid to get reconstructed image
decoded = tf.nn.sigmoid(logits)
# Pass logits through sigmoid and calculate the cross-entropy loss
loss = tf.nn.sigmoid_cross_entropy_with_logits(labels=targets_, logits=logits)
# Get cost and define the optimizer
cost = tf.reduce_mean(loss)
opt = tf.train.AdamOptimizer(learning_rate).minimize(cost)

訓(xùn)練過(guò)程:

sess = tf.Session()
epochs = 100
batch_size = 200
# Set"s how much noise we"re adding to the MNIST images
noise_factor = 0.5
sess.run(tf.global_variables_initializer())
for e in range(epochs):
    for ii in range(mnist.train.num_examples//batch_size):
        batch = mnist.train.next_batch(batch_size)
        # Get images from the batch
        imgs = batch[0].reshape((-1, 28, 28, 1))
        
        # Add random noise to the input images
        noisy_imgs = imgs + noise_factor * np.random.randn(*imgs.shape)
        # Clip the images to be between 0 and 1
        noisy_imgs = np.clip(noisy_imgs, 0., 1.)
        
        # Noisy images as inputs, original images as targets
        batch_cost, _ = sess.run([cost, opt], feed_dict={inputs_: noisy_imgs,
                                                         targets_: imgs})
print("Epoch: {}/{}...".format(e+1, epochs),
              "Training loss: {:.4f}".format(batch_cost))

作者:chen_h
微信號(hào) & QQ:862251340
簡(jiǎn)書地址:https://www.jianshu.com/p/250...

CoderPai 是一個(gè)專注于算法實(shí)戰(zhàn)的平臺(tái),從基礎(chǔ)的算法到人工智能算法都有設(shè)計(jì)。如果你對(duì)算法實(shí)戰(zhàn)感興趣,請(qǐng)快快關(guān)注我們吧。加入AI實(shí)戰(zhàn)微信群,AI實(shí)戰(zhàn)QQ群,ACM算法微信群,ACM算法QQ群。長(zhǎng)按或者掃描如下二維碼,關(guān)注 “CoderPai” 微信號(hào)(coderpai)

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/41200.html

相關(guān)文章

  • tensorflow學(xué)習(xí)筆記3——MNIST應(yīng)用篇

    摘要:的卷積神經(jīng)網(wǎng)絡(luò)應(yīng)用卷積神經(jīng)網(wǎng)絡(luò)的概念卷積神經(jīng)網(wǎng)絡(luò)是一種前饋神經(jīng)網(wǎng)絡(luò),它的人工神經(jīng)元可以響應(yīng)一部分覆蓋范圍內(nèi)的周圍單元,對(duì)于大型圖像處理有出色表現(xiàn)。 MNIST的卷積神經(jīng)網(wǎng)絡(luò)應(yīng)用 卷積神經(jīng)網(wǎng)絡(luò)的概念 卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network,CNN)是一種前饋神經(jīng)網(wǎng)絡(luò),它的人工神經(jīng)元可以響應(yīng)一部分覆蓋范圍內(nèi)的周圍單元,對(duì)于大型圖像處理有出色表現(xiàn)。[2] 它...

    baishancloud 評(píng)論0 收藏0
  • 卷積編碼

    摘要:卷積滿足交換操作,因此在一般的維空間輸入,自編碼可以被用來(lái)訓(xùn)練解碼編碼。事實(shí)上,解碼卷積的超參數(shù)是由編碼框架確定的由于卷積跨越每個(gè)特征圖,并且產(chǎn)生具有的維度,因此經(jīng)過(guò)濾波器之后產(chǎn)生相同的空間范圍。 作者:chen_h微信號(hào) & QQ:862251340微信公眾號(hào):coderpai簡(jiǎn)書地址:https://www.jianshu.com/p/ec4... 這篇教程是翻譯Paolo Ga...

    shiyang6017 評(píng)論0 收藏0
  • 初學(xué)者怎么選擇神經(jīng)網(wǎng)絡(luò)環(huán)境?對(duì)比MATLAB、Torch和TensorFlow

    摘要:本報(bào)告面向的讀者是想要進(jìn)入機(jī)器學(xué)習(xí)領(lǐng)域的學(xué)生和正在尋找新框架的專家。其輸入需要重塑為包含個(gè)元素的一維向量以滿足神經(jīng)網(wǎng)絡(luò)。卷積神經(jīng)網(wǎng)絡(luò)目前代表著用于圖像分類任務(wù)的較先進(jìn)算法,并構(gòu)成了深度學(xué)習(xí)中的主要架構(gòu)。 初學(xué)者在學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)的時(shí)候往往會(huì)有不知道從何處入手的困難,甚至可能不知道選擇什么工具入手才合適。近日,來(lái)自意大利的四位研究者發(fā)布了一篇題為《神經(jīng)網(wǎng)絡(luò)初學(xué)者:在 MATLAB、Torch 和 ...

    yunhao 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<