Tensorflow入門二 mnist識別(一)
話不多說,直接上程式碼
看註釋就 OK 啦
import numpy as np import sklearn.preprocessing as prep import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data #fan_in是輸入節點的數量 def xavier_init(fan_in,fan_out,constant=1):#初始化引數方法 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) #n_input為輸入變數 transfer_function隱含層啟用函式,預設為softplus optimizer優化器 class AdditivieGaussianNoiseAutoencoder(object): #只有一個隱含層 def __init__(self,n_input,n_hidden,transfer_function=tf.nn.relu,optimizer=tf.train.AdamOptimizer(),scale=0.1): self.n_input=n_input self.n_hidden=n_hidden self.transfer=transfer_function self.scale=tf.placeholder(tf.float32) self.training_scale=scale network_weights=self._initialize_weights() self.weights=network_weights self.x=tf.placeholder(tf.float32,[None,self.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']) self.cost=0.5*tf.reduce_sum(tf.pow(tf.subtract(self.reconstruction,self.x),2.0)) self.optimizer=optimizer.minimize(self.cost) init=tf.global_variables_initializer() self.sess=tf.Session() self.sess.run(init) #整體執行一遍復原過程 def reconstruct(self,X): return self.sess.run(self.reconstruction,feed_dict={self.x:X,self.scale:self.training_scale}) #獲取隱含層權重w1 def getWeights(self): return self.sess.run(self.weight['w1']) #獲取隱含層偏執係數 def getBiases(self): return self.sess.run(self.weights['b1']) # 返回自編碼器隱含層的輸出結果 def transform(self, X): return self.sess.run(self.hidden, feed_dict={self.x: X, self.scale: self.training_scale}) # 只求cost的函式,在訓練完之後呼叫用於測試 def calc_total_cost(self, X): return self.sess.run(self.cost, feed_dict={self.x: X, self.scale: self.training_scale}) def _initialize_weights(self): all_weights = dict() all_weights['w1'] = tf.Variable(xavier_init(self.n_input, self.n_hidden)) 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_weights # 計算cost以及進一步訓練計算 def partial_fit(self, X): cost, opt = self.sess.run((self.cost, self.optimizer), feed_dict={self.x: X, self.scale: self.training_scale}) return cost # 將隱含層的輸出結果作為輸入,再通過重建層將提取到的高階特徵復原 def generate(self, hidden=None): if hidden is None: hidden = np.random.normal(size=self.weights['b1']) return self.sess.run(self.reconstruction, feed_dict={self.hidden: hidden}) #匯入資料 mnist=input_data.read_data_sets('MNIST_data',one_hot=True) #對資料進行測試與標準化,讓資料變成0均值,標準差為1 #使用StandardScaler().fit可以完成 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資料,0到len(data)-batch size之間的隨機整數,以此為起始位置順序取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)] 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 display_step=1#每隔一輪顯示一次損失cost #建立一個AGN自編碼例項,定義模型輸入節點數n_input為784 #隱含層節點數n_hidden為200,隱含層啟用函式transfer_function為softplus #優化器optimizer為Adam,學習速率為0.001,噪聲係數為0.01 autoencoder=AdditivieGaussianNoiseAutoencoder(n_input=784,n_hidden=200,transfer_function=tf.nn.relu,optimizer=tf.train.AdamOptimizer(learning_rate=0.001),scale=0.01) for epoch in range(training_epochs): avg_cost=0 total_batch=int(n_samples/batch_size) for i in range(total_batch): batch_xs=get_random_block_from_data(X_train,batch_size) cost=autoencoder.partial_fit(batch_xs) avg_cost+=cost/n_samples*batch_size if epoch % display_step==0: print('Epoch:','%04d'%(epoch+1),'cost=','{:.9f}'.format(avg_cost)) print("Total cost:"+str(autoencoder.calc_total_cost(X_test)))
相關推薦
Tensorflow入門二 mnist識別(一)
話不多說,直接上程式碼 看註釋就 OK 啦 import numpy as np import sklearn.preprocessing as prep import tensorflow as tf from tensorflow.examples.tutorials.
C# ZXing.Net生成二維碼、識別二維碼、生成帶Logo的二維碼(一)
tree bit 字符串 單位 images j2se lba 支付 .net 一.ZXing.Net 源代碼地址:http://zxingnet.codeplex.com/ 也可以使用Nuget包管理,添加如圖: 說明:ZXing是一個開源Java類庫用於解析多種格式的
TensorFlow詳解貓狗識別(一)--讀取自己的資料集
資料集下載 連結: https://pan.baidu.com/s/1SlNAPf3NbgPyf93XluM7Fg 密碼: hpn4 資料集分別有12500張cat,12500張dog 讀取資料集 資料集的讀取,查閱了那麼多文件,大致瞭解到,資料集的讀取方法大概會分為兩種
CATIA VBA二次開發(一)快速入門之巨集指令碼
CATIA巨集(Macro)是CATIA向用戶提供的一種記錄 、重放使用者操作的工具(CATIAVBAProject也屬於巨集,本書中把VBAProject放在CATIA VBA一節中講,本節重點講巨集指令碼)。當用戶啟用錄製巨集操作時,系統
MNIST 手寫數字識別(一)
MNIST 手寫數字識別模型建立與優化 本篇的主要內容有: TensorFlow 處理MNIST資料集的基本操作 建立一個基礎的識別模型 介紹 SoftmaxSoftmaxSoftmax迴歸以及交叉熵等 MNIST是一個很有名的手寫數字識別資料集(基本可以算
python大法之二-一些基礎(一)
計算機編程 python 獨立博客 hello 解釋器 個人獨立博客出處:http://www.xbman.cn/出處:http://www.xbman.cn/article/3Python是一種解釋性計算機編程語言。采用縮進式語法,寫起來的感覺有點像排了版的shell,這裏要註意寫pyt
android入門 — 多線程(一)
xtend 分享 調用 管理 ava 導致 ui線程 rec thread android中的一些耗時操作,例如網絡請求,如果不能及時響應,就會導致主線程被阻塞,出現ANR,非常影響用戶體驗,所以一些耗時的操作,我們會想辦法放在子線程中去完成。 android的U
數據結構之二叉樹(一)
reorder system style 序列 urn creat 編寫程序 space ont 設計和編寫程序,按照輸入的遍歷要求(即先序、中序和後序)完成對二叉樹的遍歷,並輸出相應遍歷條件下的樹結點序列。 1 //遞歸實現 2 #include
新手必會:商業智能BI入門專業詞匯(一)
操作數 讀者 模式 分析工具 重新 實現 資源 框架 計算機程序 進入任何一個行業,都必須經歷的就是了解該行業的相關專業詞匯,尤其是IT行業。如果專業詞匯都不懂幾個,勢必會影響後續的深入學習。在我們每周三的公開課裏已經有或多或少提及到關於商業智能BI入門的一些專業詞匯,
NLPCC2013中文微博細粒度情感識別(一)
lin raw lse des child 解決 txt ima 隨機 既然是找到了不錯的工作,自然不敢怠慢,作為入職前的準備自己找了個任務幹,再熟悉一下語義識別&文本分類的整個過程。 數據使用的是NLPCC2013的第二個任務,中文微博細粒度情感識別,現在在官網已
軟體工程部落格作業二 -- 結對程式設計(一)
作業要求:https://edu.cnblogs.com/campus/ustc/InnovatingLeadersClass/homework/2231 專案原始碼:https://github.com/jackroos/golden_number 黃金點遊戲簡介 N個同學(N通常大於10),每人寫一
Python3 影象識別(一)
Infi-chu: http://www.cnblogs.com/Infi-chu/ 一、環境準備: 1.Python3.x(我是用的是Python3.6.5),這個問題不大,只要3.4以上就OK。 2.Numpy(直接pip安裝即可) pip install numpy 3.Open
SpringCloud從入門到進階(一)——懂生活就懂微服務
避免 發現 官方文檔 隨著 並發 規範 只需要 組合 組件 內容 本文通過生活中的實際場景解釋單體應用和微服務應用的關系,以及SpringCloud中各組件的功能和含義。 適合人群 Java開發人員 說明 轉載請說明出處:SpringCloud從入門到進階(一)
【tensorflow】】模型優化(一)指數衰減學習率
指數衰減學習率是先使用較大的學習率來快速得到一個較優的解,然後隨著迭代的繼續,逐步減小學習率,使得模型在訓練後期更加穩定。在訓練神經網路時,需要設定學習率(learning rate)控制引數的更新速度,學習速率設定過小,會極大降低收斂速度,增加訓練時間;學習率太大,可能導致引數在最優解兩側來回振盪
大華門禁SDK二次開發(一)
專案中需要能夠查詢門禁訊號和控制門禁裝置,因此需要基於大華門禁SDK進行二次開發,開發語言C#。門禁開發中遇到了一些問題,經過與大華技術的郵件溝通也一一解決。做這個開發的時候,發現網上的資料比較少,想著把自己遇到的問題整理下來,讓有需要的人儘量少走一些彎路。 1. 門禁狀態查詢/控制API 門禁控制
《Tensorflow實戰》學習筆記(一)
深度學習基本四步驟: (1)定義演算法公式,也就是神經網路forward時的計算 (2)定義loss,選定優化器,並指定優化器優化loss (3)迭代對資料進行訓練 (4)在測試集合對準確率進行評測 有用的類 tf.placeholder() tf.Variable(
Web 前端開發入門級學習筆記(一)
Web前端入門級學習筆記 1.基本概念 css-cascading style sheet 2.網頁設計中HTML,CSS,JavaScript地位 HTML:內容 CSS:呈現(樣式) JavaScript:互動(頁面的動態效果)
scrapy簡單入門及例項講解(一)
初識Scrapy Scrapy是一個用於Web網站抓取的應用框架,輸出的結構化資料可以廣泛用於各類程式,比如:資料探勘、資料處理、資料存檔等 儘管Scrapy是為Web抓取設計的,但也可以用於從API中提取資料 通過一個例項認識spider 為了快速認識S
計算機視覺和模式識別(一)
計算機視覺和模式識別 計算機視覺和影象處理是一個令很多人充滿興趣的計算機領域,它不僅涉及到很多精妙和令人稱讚的數學推導和漂亮的程式碼,更是應用到我們生活的方方面面,簡單如Photoshop、美圖秀秀,複雜於相機校準、人臉識別、處理視訊等。 時隔很久沒有寫部落格了,以前寫部落格的時候
tensorflow+faster rcnn程式碼理解(一):構建vgg前端和RPN網路
0.前言 該程式碼執行首先就是呼叫vgg類建立一個網路物件self.net if cfg.FLAGS.network == 'vgg16': self.net = vgg16(batch_size=cfg.FLAGS.ims_per_batch) 該類位於vgg.py中,如下: