1. 程式人生 > >Tensorflow入門二 mnist識別(一)

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中,如下: