1. 程式人生 > >自編碼網路實現Mnist

自編碼網路實現Mnist

#!/usr/bin/python3
# -*-coding:utf-8 -*-
# @Time   :2018/3/16 
# @Author :machuanbin
import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data
import  numpy as np
import matplotlib.pyplot as plt
#超參
lr=0.001
training_epoch=20 #訓練多少輪
batch_size=128  #每次訓練資料多少
display_step=1 #每隔多少輪顯示一次訓練結果
#神經網路的引數 n_input=784 #從測試集中選擇10張照片去驗證自動編碼器結果 examples_to_show=10 current_dir = os.path.abspath('.\MNIST_data') mnist=input_data.read_data_sets(current_dir,one_hot=True) #無監督學習,只需要輸入圖片 X=tf.placeholder(tf.float32,[None,n_input]) #兩個隱含層 #第一個隱含層256#第二層128n_hidden_1=256 n_hidden_2=128 #設定每一層的權重和偏差
weights={ 'encoder_h1':tf.Variable(tf.random_normal([n_input,n_hidden_1])), 'encoder_h2':tf.Variable(tf.random_normal([n_hidden_1,n_hidden_2])), 'decoder_h1':tf.Variable(tf.random_normal([n_hidden_2,n_hidden_1])), 'decoder_h2':tf.Variable(tf.random_normal([n_hidden_1,n_input])) } biases={ 'encoder_b1'
:tf.Variable(tf.random_normal([n_hidden_1])), 'encoder_b2':tf.Variable(tf.random_normal([n_hidden_2])), 'decoder_b1':tf.Variable(tf.random_normal([n_hidden_1])), 'decoder_b2':tf.Variable(tf.random_normal([n_input])) } #定義壓縮函式 def encoder(x): layer_1=tf.nn.sigmoid(tf.add(tf.matmul(x,weights['encoder_h1']),biases['encoder_b1'])) layer_2=tf.nn.sigmoid(tf.add(tf.matmul(layer_1,weights['encoder_h2']),biases['encoder_b2'])) return layer_2 def decoder(x): layer_1=tf.nn.sigmoid(tf.add(tf.matmul(x,weights['decoder_h1']),biases['decoder_b1'])) layer_2=tf.nn.sigmoid(tf.add(tf.matmul(layer_1,weights['decoder_h2']),biases['decoder_b2'])) return layer_2 #構建模型 encoder_op=encoder(X) decoder_op=decoder(encoder_op) #得出預測值 y_pred=decoder_op #得出真實值 y_true=X #定義損失函式和優化器 cost=tf.reduce_mean(y_true-y_pred,2) optimizer=tf.train.RMSPropOptimizer(lr).minimize(cost) #訓練資料及模型評估 with tf.Session as sess: sess.run(tf.global_variables_initializer()) total_batch=int(mnist.train.num_examples/batch_size) #開始訓練 for epoch in range(training_epoch): for i in range(total_batch): batch_x,batch_y=mnist.train.next_batch(batch_size) _,c=sess.run([optimizer,cost],feed_dict={X:batch_x}) if epoch%display_step==0: print('Epoch:','%0.4d'%(epoch+1),'cost=','0.9f'.format(c)) print("Optimization Finished") #對測試集應用訓練好的自動編碼網路 encoder_decoder=sess.run(y_pred,feed_dict={X:mnist.test.images[:examples_to_show]}) #比較測試集原始資料和自動編碼網路的重建結果 f,a=plt.subplot(2,10,figsize=(10,2)) for i in range(examples_to_show): a[0][i].imshow(np.reshape(mnist.test.images[i],(28,28))) a[1][i].imshow(np.reshape(encoder_decoder[i],(28,28))) f.show() plt.draw() plt.waitforbuttonpress()

相關推薦

編碼網路實現Mnist

#!/usr/bin/python3 # -*-coding:utf-8 -*- # @Time :2018/3/16 # @Author :machuanbin import tensorflow as tf from tensorflow.examples.tuto

TensorFlow的編碼網路實現MNIST無監督學習)

自編碼網路 1、自編碼網路的作用 自編碼網路的作用就是將輸入樣本壓縮到隱藏層,然後解壓,在輸出端重建樣本,最終輸出層神經元數量等於輸入層神經元的數量。 2、這裡主要有兩個過程,壓縮和解壓。 3、壓縮原理 壓縮依靠的是輸入資料(影象、文字、聲音)本身存在

tensorflow實現編碼網路

一、自編碼網路 自編碼,又稱自編碼器(autoencoder),也是神經網路的一種,經過訓練後能嘗試將輸入複製到輸出。自編碼器內部有隱藏層,通過編碼和解碼來還原輸入資料。該網路可以看作由兩部分組成:一個函式h=f(x)表示編碼器和一個解碼器r=g(h)。 自編碼器是一個3層或大於3層的神

變分編碼網路實現

1、VAE跟Gan有點類似,都是可以通過一些輸入,生成一些樣本資料。不同點是VAE是假設在資料的分佈是服從正態分佈的,而GAN是沒有這個假設的,完全是由資料驅動,進行訓練得出規律的。 下面是變分自編碼網路的程式碼: import numpy as np import te

神經網路實現Mnist資料集簡單分類

本文針對mnist手寫數字集,搭建了四層簡單的神經網路進行圖片的分類,詳細心得記錄下來分享 我是採用的TensorFlow框架進行的訓練 import tensorflow as tf from tensorflow.examples.tutorials.mnist import in

神經網路實現Mnist手寫數字識別筆記

目錄 1.Mnist手寫數字識別介紹         Mnist手寫數字識別是Kaggle上一個很經典的機器學習資料集,裡邊包括55000張訓練資料和10000張圖片的測試資料,每張圖片大小為28*28畫素的單通圖片。該任務為通過機器學習來識別圖片中的

深度學習:tensorflow入門:卷積神經網路實現MNIST手寫字型識別

程式碼中./data/mnist/input_data/為真實MNIST資料集的路徑 import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data # 定義

[Keras深度學習淺嘗]實戰五·使用DNN編碼實現聚類操作資料降維

[Keras深度學習淺嘗]實戰五·使用DNN自編碼器實現聚類操作資料降維 程式碼部分 # TensorFlow and tf.keras import tensorflow as tf from tensorflow import keras # Helper libraries

python神經網路案例——CNN卷積神經網路實現mnist手寫體識別

全棧工程師開發手冊 (作者:欒鵬) 載入樣本資料集 首先我們要有手寫體的資料集檔案 我們實現一個MNIST.py檔案,專門用來讀取手寫體檔案中的資料。 # -*- coding: UTF-8 -*- # 獲取手寫資料。

CNTK API文件翻譯(9)——使用編碼器壓縮MNIST資料

在本期教程之前需要先完成第四期教程。 介紹 本教程介紹自編碼器的基礎。自編碼器是一種用於高效編碼的無監督學習人工神經網路,換句話說,自編碼器用於通過機器學習學來的演算法而不是人寫的演算法進行有損資料壓縮。由此而來,使用自編碼器編碼的目的是訓練出一套資料表

Tensorflow卷積神經網路實現MNIST手寫資料集識別

模型建的不好,最終只有85%左右的準確率,後面繼續改進吧   #卷積神經網路API     卷積層:tf.nn.conv2d(input,    #輸入張量,具有[batch, height, width, chann

卷積神經網路(二):應用簡單卷積網路實現MNIST數字識別

卷積神經網路簡單實現MNIST數字識別 本篇的主要內容: 一個兩層卷積層的簡單卷積網路的TensorFlow的實現 網路的結構 在這張圖裡,我把每一層的輸入以及輸出的結構都標註了,結合閱讀程式碼食用效果更佳。 具體程式碼 具體的內容,都寫在相應位置的註釋中

Tensorflow 實戰Google深度學習框架——學習筆記(六)LeNet-5網路實現MNIST手寫數字集識別

使用LeNet-5模型實現MNIST手寫數字識別,其神經網路架構如下: 一、詳細介紹LeNet-5模型每一層的結構 第一層,卷積層 這一層輸入原始的影象畫素,接受的輸入層大小為32*32*1,第一個卷積層過濾器尺寸為5*5,共6個,不使用全0填

PyTorch基礎入門六:PyTorch搭建卷積神經網路實現MNIST手寫數字識別

1)卷積神經網路(CNN)簡介 關於什麼是卷積神經網路(CNN),請自行查閱資料進行學習。如果是初學者,這裡推薦一下臺灣的李巨集毅的深度學習課程。連結就不給了,這些資料網站上隨處可見。 值得一提的是,CNN雖然在影象處理的領域具有不可阻擋的勢頭,但是它絕對不僅僅只能用來影

深度學習系列(七):編碼網路與PCA特徵學習的分類對比實驗

上節我們看到自編碼網路額隱含層可以用於原始資料的降維(其實也可以升維,不過把隱含層的單元設定的比輸入維度還要多),換而言之就是特徵學習,那麼學習到的這些特徵就可以用於分類了,本節主要試驗下這些特徵用於分類的效果。 先以最簡單的三層自編碼網路為例,先訓練自編碼網

TensorFlow入門(二)簡單前饋網路實現 mnist 分類

歡迎轉載,但請務必註明原文出處及作者資訊。 兩層FC層做分類:MNIST 在本教程中,我們來實現一個非常簡單的兩層全連線網路來完成MNIST資料的分類問題。 輸入[-1,28*28],

深度學習系列(六):編碼網路的特徵學習

在第三節我們已經介紹了 知道了自編碼學習其實就是學習到了輸入資料的隱含特徵,通過新的特徵來表徵原始資料,本節將介紹如何使用這些隱含特徵進行模式分類; 還是以前面的三層自編碼網路: 抽象一下如下: 其中學習到的權值係數W1與W1’是不一樣的,我

基於PyTorch的LSTM長短時記憶網路實現MNIST手寫數字

本篇部落格主要介紹在PyTorch框架下,基於LSTM實現手寫數字的識別。在介紹LSTM長短時記憶網路之前,我先介紹一下RNN(recurrent neural network)迴圈神經網路.RNN是一種用來處理序列資料的神經網路,序列資料包括我們說話的語音、一段文字等等。它

全連線神經網路實現MNIST手寫資料集識別

有目錄,內容大部分從官方教程copy,黑體加粗為對官方教程的補充 TensorFlow,pytorch,cuda,cudnn,anaconda安裝 版本對應關係 Version Python version Compiler Build tools cu

tensorflow-GPU 一步步搭建網路實現MNIST手寫識別

1. MNIST資料集的匯入 這裡介紹一下MNIST,MNIST是在機器學習領域中的一個經典問題。該問題解決的是把28x28畫素的灰度手寫數字圖片識別為相應的數字,其中數字的範圍從0到9. 首先我們要匯入MNIST資料集,這裡需要用到一個input_data.py檔案,在