久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

TensorFlow深度自動(dòng)編碼器入門實(shí)踐

 我愛計(jì)算機(jī)視覺 2020-12-23

包含從頭開始構(gòu)建Autoencoders模型的完整代碼,。

(關(guān)注“我愛計(jì)算機(jī)視覺”公眾號(hào),,一個(gè)有價(jià)值有深度的公眾號(hào)~)
在本教程中,,我們一起來探索一個(gè)非監(jiān)督學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)——Autoencoders(自動(dòng)編碼器)。
自動(dòng)編碼器是用于在輸出層再現(xiàn)輸入數(shù)據(jù)的深度神經(jīng)網(wǎng)絡(luò),,所以輸出層中的神經(jīng)元的數(shù)量與輸入層中的神經(jīng)元的數(shù)量完全相同,。
如下圖所示:

該圖像展示了典型的深度自動(dòng)編碼器的結(jié)構(gòu)。自動(dòng)編碼器網(wǎng)絡(luò)結(jié)構(gòu)的目標(biāo)是在輸出層創(chuàng)建輸入的表示,,使得兩者盡可能接近(相似),。 但是,自動(dòng)編碼器的實(shí)際使用是用來得到具有最低數(shù)據(jù)丟失量的輸入數(shù)據(jù)的壓縮版本,。 在機(jī)器學(xué)習(xí)項(xiàng)目中的作用類似于主成分分析( Principle Component Analysis,,PCA),PCA的作用是在有大量屬性的數(shù)據(jù)集上訓(xùn)練模型時(shí)找到最佳和最相關(guān)屬性,。

自動(dòng)編碼器以類似的方式工作,。 其編碼器部分將輸入數(shù)據(jù)壓縮,確保重要數(shù)據(jù)不會(huì)丟失,,但數(shù)據(jù)的整體大小會(huì)顯著減小,。 這個(gè)概念稱為降維( Dimensionality Reduction)。
降維的缺點(diǎn)是,,壓縮數(shù)據(jù)是一個(gè)黑盒子,,即我們無法確定其壓縮后數(shù)據(jù)中的數(shù)據(jù)結(jié)構(gòu)的具體含義。 比如,,假設(shè)我們有一個(gè)包含5個(gè)參數(shù)的數(shù)據(jù)集,,我們在這些數(shù)據(jù)上訓(xùn)練一個(gè)自動(dòng)編碼器。 編碼器不會(huì)為了獲得更好的表示而省略某些參數(shù),,它會(huì)將參數(shù)融合在一起(壓縮后的變量時(shí)綜合變量)以創(chuàng)建壓縮版本,,使得參數(shù)更少(比如從5個(gè)壓縮到3個(gè))。
自動(dòng)編碼器有兩個(gè)部分,,即編碼器和解碼器,。

編碼器壓縮輸入數(shù)據(jù),而解碼器則基于壓縮表示的數(shù)據(jù)反過來恢復(fù)數(shù)據(jù)的未壓縮版本,,以盡可能準(zhǔn)確地創(chuàng)建輸入的重建,。

我們將使用Tensorflow的layers API創(chuàng)建自動(dòng)編碼器神經(jīng)網(wǎng)絡(luò),并在mnist數(shù)據(jù)集上對其進(jìn)行測試,。

首先,,我們導(dǎo)入相關(guān)的Python庫,并讀入mnist數(shù)據(jù)集。 如果數(shù)據(jù)集存在于本地計(jì)算機(jī)上,,那么它將自動(dòng)讀取,,否則將通過運(yùn)行以下命令自動(dòng)下載。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data
from tensorflow.contrib.layers import fully_connected mnist=input_data.read_data_sets("/MNIST_data/",one_hot=True)

接下來,,我們?yōu)榉奖闫鹨妱?chuàng)建一些常量,,并事先聲明我們的激活函數(shù),。 mnist數(shù)據(jù)集中的圖像大小為28×28像素,即784像素,,我們將其壓縮為196像素,。 當(dāng)然你也可以更進(jìn)一步縮小像素大小。 但是,,壓縮太多可能會(huì)導(dǎo)致自動(dòng)編碼器丟失信息,。

num_inputs=784    #28x28 pixels
num_hid1=392
num_hid2=196
num_hid3=num_hid1 num_output=num_inputs lr=0.01
actf=tf.nn.relu

現(xiàn)在,我們?yōu)槊恳粚拥膚eights 和 biases創(chuàng)建變量,。 然后,,我們使用先前聲明的激活函數(shù)創(chuàng)建layer,。

X=tf.placeholder(tf.float32,shape=[None,num_inputs]) initializer=tf.variance_scaling_initializer() w1=tf.Variable(initializer([num_inputs,num_hid1]),dtype=tf.float32) w2=tf.Variable(initializer([num_hid1,num_hid2]),dtype=tf.float32) w3=tf.Variable(initializer([num_hid2,num_hid3]),dtype=tf.float32) w4=tf.Variable(initializer([num_hid3,num_output]),dtype=tf.float32) b1=tf.Variable(tf.zeros(num_hid1)) b2=tf.Variable(tf.zeros(num_hid2)) b3=tf.Variable(tf.zeros(num_hid3)) b4=tf.Variable(tf.zeros(num_output)) hid_layer1=actf(tf.matmul(X,w1)+b1) hid_layer2=actf(tf.matmul(hid_layer1,w2)+b2) hid_layer3=actf(tf.matmul(hid_layer2,w3)+b3) output_layer=actf(tf.matmul(hid_layer3,w4)+b4)

在一般情況下,,TensorFlow的工程通常不使用tf.variance_scaling_initializer()。 但是,,我們在這里使用它是因?yàn)槲覀冋谔幚聿粩嘧兓笮〉妮斎搿?因此,,placeholder張量形狀(placeholder用于輸入批處理)根據(jù)輸入大小的形狀調(diào)整自身,從而防止我們遇到任何維度錯(cuò)誤,。 通過簡單地將先前帶有相關(guān)weights 和 biases 的隱藏層作為輸入輸送到激活函數(shù)(ReLu)中來創(chuàng)建后面的隱藏層,。

我們將使用RMSE損失函數(shù)用于此神經(jīng)網(wǎng)絡(luò)并將其傳遞給Adam優(yōu)化器。你也可以替換這些來獲得更多結(jié)果,。

loss=tf.reduce_mean(tf.square(output_layer-X)) optimizer=tf.train.AdamOptimizer(lr) train=optimizer.minimize(loss) init=tf.global_variables_initializer()

現(xiàn)在,,我們定義epochs和batch size并運(yùn)行session。 我們使用mnist類的mnist.train.next_batch()來獲取每個(gè)新的batch,。 此外,,我們將在每個(gè)epoch之后輸出訓(xùn)練loss以監(jiān)控其訓(xùn)練。

num_epoch=5
batch_size=150
num_test_images=10
with tf.Session() as sess:    sess.run(init)    
   for epoch in range(num_epoch):        num_batches=mnist.train.num_examples//batch_size        for iteration in range(num_batches):            X_batch,y_batch=mnist.train.next_batch(batch_size)            sess.run(train,feed_dict={X:X_batch})                    train_loss=loss.eval(feed_dict={X:X_batch})        print("epoch {} loss {}".format(epoch,train_loss))

最后,,我們將編寫一個(gè)小的繪圖函數(shù)來繪制原始圖像和重建圖,,以查看我們訓(xùn)練得到的模型的工作情況。

results=output_layer.eval(feed_dict={X:mnist.test.images[:num_test_images]})        #Comparing original images with reconstructions    f,a=plt.subplots(2,10,figsize=(20,4))    
   for i in range(num_test_images):        a[0][i].imshow(np.reshape(mnist.test.images[i],(28,28)))        a[1][i].imshow(np.reshape(results[i],(28,28)))

在這里,,我們可以看到重建并不完美,,但非常接近原始圖像。 注意上圖中,,2的重建看起來像是3,,這是由于壓縮時(shí)信息丟失造成的。

我們可以通過超參數(shù)調(diào)整來改進(jìn)自動(dòng)編碼器模型,,并且還可以通過在GPU上運(yùn)行訓(xùn)練來提高速度,。

獲取完整代碼,請?jiān)L問:
https://github.com/Tathagatd96/Deep-Autoencoder-using-Tensorflow

原文鏈接:
https:///deep-autoencoders-using-tensorflow-c68f075fd1a3

    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多