日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Tensorflow基于minist数据集实现自编码器

發布時間:2025/3/21 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Tensorflow基于minist数据集实现自编码器 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Tensorflow實現自編碼器

  • 自編碼器
    • Denoising AutoEncoder(去噪自編碼器)

自編碼器

特征的稀疏表達:使用少量的基本特征組合拼裝得到更高層抽象的特征。
如:圖像碎片可由少量的基本結構稀疏表達。

自編碼器定義:

  • 使用自身的高階特征編碼自己,目標是使用稀疏的一些高階特征重新組合來重構自己。

自編碼器特點:

  • 輸入節點和輸出節點的數量一致
  • 使用自身的高階特征編碼自己,不只是復制像素點

自編碼器作用:

  • 給監督訓練做無監督的預訓練,提取特征
  • 可直接進行特征提取和分析

自編碼器使用少量稀疏的高階特征來重構輸入,所以加入幾種限制:

  • 如果限制隱含層的數量,中間隱含層節點數量小于輸入輸出節點數量,相當于降維的過程,只能學習輸入數據最重要的特征,將不太相關的內容去除。
  • 如果給數據加噪聲(通常是加性高斯噪聲Additive Gaussian Noise,AGN),那么就是Denoising AutoEncoder(去噪自編碼器),將從噪聲中學習出數據的特征,學習數據頻繁出現的模式和結構,將無規律的噪聲去除。

Denoising AutoEncoder(去噪自編碼器)

"""作者:Heart Sea功能:tessorflow實現去噪自編碼器Additive Gaussian Noise,AGNModel:1個輸入層, 加噪聲全連接1個隱含層, 激活全連接1個輸出層版本:1.0日期:10/10/2019 """import numpy as np # 導入常用庫numpy import sklearn.preprocessing as prep # 導入sklearn中的preprocessing模塊,負責預處理數據標準化 import tensorflow as tf # 導入tensorflow from tensorflow.examples.tutorials.mnist import input_data # 導入mnist數據集# 實現標準均勻分布的Xaiver初始化器(根據某一層網絡的輸入、輸出節點數量自動調整最合適的權重分布) # Xaiver就是讓權值滿足:均值=0,方差=2/(n_in+n_out) # 分布可以用均勻分布或者高斯分布,這里采用均勻分布,方差=2/(n_in+n_out)=(max-min)^2/12 def xavier_init_(fan_in, fan_out, constant=1): # xavier_init_(self.n_input, self.n_hidden)""":param fan_in: 輸入節點的數量, 行數:param fan_out: 輸出節點的數量, 列數:param constant: 1:return: 返回一個比較適合softplus等激活函數的權重初始分布w1"""low = -constant*np.sqrt(6.0/(fan_in + fan_out))high = constant*np.sqrt(6.0/(fan_in + fan_out))return tf.random_uniform((fan_in, fan_out),minval=low, maxval=high,dtype=tf.float32)# 定義一個去噪自編碼的class,此類包括一個構建函數_init_(),還有一些成員函數 class AdditiveGaussianNoiseAutoencoder(object):def __init__(self, n_input, n_hidden, transfer_function=tf.nn.softplus,optimizer=tf.train.AdadeltaOptimizer(), scale=0.1):""":param n_input: 輸入變量數:param n_hidden: 隱含層節點數:param transfer_function: 隱含層激活函數,默認為softplus:param optimizer: 默認為Adam:param scale: 高斯噪聲系數,默認0.1"""self.n_input = n_inputself.n_hidden = n_hiddenself.transfer = transfer_functionself.scale = tf.placeholder(tf.float32)self.training_scale = scalenetwork_weights = self._initialize_weights() # 使用_initialize_weights()函數初始化參數,后面會定義self.weights = network_weights# 定義網格結構:輸入層,隱含層,輸出層# x每行是一個樣本,列是特征self.x = tf.placeholder(tf.float32, [None, self.n_input])# 建立能提取特征的隱含層,給輸入添加維度為(n_input,)的正態分布的噪聲# tf.random_normal((n_input,))里的小括號可換成中括號,一行n_input列個正態隨機個數,沒有設置隨機種子# self.x + scale * tf.random_normal((n_input,))相當于每個樣本的n_input個特征都加了噪聲self.hidden = self.transfer(tf.add(tf.matmul(self.x + scale * tf.random_normal((n_input,)),self.weights['w1']),self.weights['b1']))# 建立輸出層self.reconstruction = tf.add(tf.matmul(self.hidden,self.weights['w2']),self.weights['b2'])# 定義自編碼器的損失函數,用平方誤差作為cost,輸出與輸入之差再平方,求和,0.5self.cost = 0.5 * tf.reduce_sum(tf.pow(tf.subtract(self.reconstruction, self.x), 2.0)) # 使用平方誤差作為costself.optimizer = optimizer.minimize(self.cost) # 優化器為損失進行優化init = tf.global_variables_initializer() # 初始化全部模型參數self.sess = tf.Session() # 建立Sessionself.sess.run(init)# 定義參數初始化函數_initialize_weights# 輸出層權重和偏置不含激活函數,直接初始化為0def _initialize_weights(self):all_weights = dict() # 創建字典dictall_weights['w1'] = tf.Variable(xavier_init_(self.n_input, self.n_hidden)) # 返回一個比較適合softplus等激活函數的權重初始分布all_weights['b1'] = tf.Variable(tf.zeros([self.n_hidden], dtype=tf.float32))all_weights['w2'] = tf.Variable(tf.zeros([self.n_hidden, self.n_input], dtype=tf.float32))all_weights['b2'] = tf.Variable(tf.zeros([self.n_input], dtype=tf.float32))return all_weightsdef partial_fit(self, X):"""aim: 定義計算損失cost及執行一步訓練的函數partial_fit:param X: 一個batch數據:return: 當前損失"""cost, opt = self.sess.run((self.cost, self.optimizer),feed_dict={self.x: X, self.scale: self.training_scale})return costdef calc_total_cost(self, X):"""aim: 定義一個只計算cost的函數,主要是在訓練完畢后,在測試集上對模型性能進行測評,不會觸發訓練操作:param X: 測試集數據:return: 平方誤差cost"""return self.sess.run(self.cost, feed_dict={self.x: X,self.scale: self.training_scale})def transform(self, X):"""aim: 定義transform函數(自編碼器的前半部分),目的是提供一個接口來獲取高階特征:param X::return: 返回自編碼器隱含層的輸出結果 hidden"""return self.sess.run(self.hidden, feed_dict={self.x: X,self.scale: self.training_scale})def generate(self, hidden=None):"""定義generate函數(自編碼器的后半部分),將transform提取的高階特征經過重建層復原為原始數據:param hidden: 隱含層的輸出結果:return: 高階特征經過重建層復原為原始數據"""if hidden is None:hidden = np.random.normal(size=self.weights["b1"])return self.sess.run(self.reconstruction, feed_dict={self.hidden: hidden})def reconstruct(self, X):"""整體運行transform和generate兩個過程:param X: 原始數據:return: 復原的原始數據"""return self.sess.run(self.reconstruction, feed_dict={self.x: X,self.scale: self.training_scale})# 定義getWeights函數,獲取隱含層的權重W1def getWeights(self):return self.sess.run(self.weights['w1'])# 定義getBiases函數,獲取隱含層偏置系數b1def getBiases(self):return self.sess.run(self.weights['b1'])# 去噪自編碼器的類已經定義完,包括神經網絡的設計、權重的初始化mnist = input_data.read_data_sets('MNIST_data', one_hot=True) # 載入minist數據集# 定義standard_scale函數,對訓練、測試數據標準化, # 標準化即讓數據變成0均值,且標準差為1的分布。方法是先減去均值,再除以標準差 # 為保證訓練、測試數據使用完全相同的Scaler,需要先在訓練數據上fit出一個共用的Scaler,再將這個Scaler用到訓練數據和測試數據上 def standard_scale(X_train, X_test):preprocessor = prep.StandardScaler().fit(X_train)X_train = preprocessor.transform(X_train)X_test = preprocessor.transform(X_test)return X_train, X_test# 定義一個隨機取block數據的函數 # random.randint(a, b),用于生成一個指定范圍a <= n <= b的整數 # 將這個隨機數作為block的起始位置,順序取到一個batch size的數據。這屬于放回原樣,可以提高數據利用率 def get_random_block_from_data(data, batch_size):start_index = np.random.randint(0, len(data) - batch_size)return data[start_index:(start_index + batch_size)]# 使用standard_index函數標準化訓練集,測試集 X_train, X_test = standard_scale(mnist.train.images, mnist.test.images)# 定義常用參數 n_samples = int(mnist.train.num_examples) # 總訓練樣本數 training_epochs = 20 # 最大訓練輪數 batch_size = 128 # 批數據,即多少個樣本作為一個batch display_step = 1 # 每隔一輪epoch顯示一次損失cost# 創建一個AGN自編碼器的實例,并設置輸入層節點數、隱含層節點數、隱含層激活函數、優化器、噪聲系數 autoencoder = AdditiveGaussianNoiseAutoencoder(n_input=784,n_hidden=200,transfer_function=tf.nn.softplus,optimizer=tf.train.AdamOptimizer(learning_rate=0.001),scale=0.01)# 開始訓練 for epoch in range(training_epochs): # 迭代訓練輪數# print(epoch)avg_cost = 0. # 每一輪開始時,平均損失=0total_batch = int(n_samples / batch_size) # 樣本總數/batch大小=需要的batch數for i in range(total_batch): # 迭代一輪中所有的批數據# print(i)batch_xs = get_random_block_from_data(X_train, batch_size) # 隨機抽取block數據cost = autoencoder.partial_fit(batch_xs) # 使用partial_fit訓練這個當前的batch數據的平方誤差avg_cost += cost / n_samples * batch_size # 將當前的cost整合到avg_cost,計算平均cost# 每一輪迭代后,顯示當前的迭代數和這一輪迭代的acg_costif epoch % display_step == 0:print("Epoch:", '%04d' % (epoch + 1),"cost =", "{:.9f}".format(avg_cost))# 對測試集進行測試,評價指標仍然是平方誤差 print("Total cost: " + str(autoencoder.calc_total_cost(X_test)))

Epoch: 0001 cost= 19708.600550000
Epoch: 0002 cost= 13143.029138636


從實現的角度而言,自編碼器其實和一個單隱含層的神經網絡差不多,只是自編碼器在數據輸入時做了標準化處理,且加上了一個高斯噪聲,同時我們的輸出結果不是數字分類結果,而是復原的數據,因此不需要用標注過的數據進行監督訓練。自編碼器作為一種無監督學習方法,它與其他無監督學習的區別主要在于:它不是對數據進行聚類,而是把數據中最有用、最頻繁的高階特征提取出來,然后根據這些高階特征進行重構數據。在深度學習發展早期非常流行的DBN,也是依靠這種思想,先對數據進行無監督學習,提取到一些有用的特征,將神經網絡權重初始化到一個較好的分布,然后再使用有標注的數據進行監督訓練,即對權重進行fine-tune。

現實生活中,大部分數據是沒有標準信息的,但人腦比較擅長處理這些數據,會提取出其中的高階抽象特征,并使用在別的地方。自編碼器作為深度學習在無監督領域的應用的確非常成功,同時無監督學習也將成為深度學習一個重要發展方向。

總結

以上是生活随笔為你收集整理的Tensorflow基于minist数据集实现自编码器的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 婷婷亚洲综合五月天小说 | 国产视频精品视频 | 日本a∨视频 | 日本一区二区三区在线视频 | 成人黄色动漫在线观看 | 日韩人妻精品一区二区三区 | 欧美激情精品久久久久久 | 乌克兰极品av女神 | 无套内谢大学处破女www小说 | 午夜av片 | 嫩草视频在线 | 九九精品视频免费 | 免费观看日批视频 | 日韩两性视频 | 日韩高清影视在线观看 | 亚洲欧美精品午睡沙发 | 五月婷婷俺也去 | 成年人视频网址 | www夜夜 | 91精品国产一区二区 | 国产大屁股喷水视频在线观看 | 超碰久草 | 国产在线精品二区 | 有码在线 | 东京热毛片 | 国外成人在线视频 | 一炮成瘾1v1高h | 欧美深性狂猛ⅹxxx深喉 | 澳门黄色录像 | 国产精品xxxxx| 久久综合色婷婷 | 亚洲欧美天堂网 | 99re在线视频播放 | 中文在线a在线 | 免费20分钟超爽视频 | 伊人22综合 | 开心春色激情网 | 深爱综合网 | 日本一区欧美 | 免费拍拍拍网站 | 国产99久久久欧美黑人 | 欧美一级性视频 | 超碰日日干 | 婷婷色婷婷开心五月四房播播 | 在线播放一区 | 婷婷色综合 | 婷婷六月在线 | 欧美另类精品xxxx孕妇 | 日本少妇18p | aa亚洲 | 6699嫩草久久久精品影院 | 97在线免费公开视频 | 播金莲一级淫片aaaaaaa | 久草免费福利视频 | 蜜桃av网| 波多野结衣导航 | 三级色网 | 精品无码一区二区三区在线 | xxxwww18| 99ri国产| 福利在线看 | 天天操操操操 | 天天草比 | 自拍 偷拍 欧美 | 久久久国产精品成人免费 | 伊人啪啪 | 狠狠躁夜夜躁人人爽天天高潮 | 超碰人人网 | 欧美日韩亚洲一区二区 | 日本v视频 | 欧美激情性做爰免费视频 | 999xxxxx| 999在线视频 | 久久大奶 | 91n在线观看 | 韩国黄色视屏 | 黄黄的视频在线观看 | 一二三区免费视频 | 国产精品久久久久精 | 亚洲一区二区三区视频在线 | 91精品久久久久久久久久 | 久久人人爽人人人人片 | 免费看欧美黑人毛片 | 91手机在线| 国产精品一区二区电影 | 日韩经典一区二区 | 欧美 亚洲 一区 | 99热这里只有精品7 青青草社区 | 日日日日日日bbbbbb | 91精品人妻互换一区二区 | 男女操操操 | 欧美精品激情视频 | 天天射夜夜操 | 久久精品激情 | 黄色aa大片 | 一区在线看| 国产网友自拍视频 | 前任攻略在线观看免费完整版 | 久久国产精品首页 |