自編碼網路實現Mnist

2021-08-17 02:46:50 字數 2648 閱讀 8469

#!/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個

#第二層

128個

n_hidden_1=256

n_hidden_2=128

#設定每一層的權重和偏差

weights=

biases=

#定義壓縮函式

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=)

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=)

#比較測試集原始資料和自動編碼網路的重建結果

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資料集進行自編碼

自動編碼的核心就是各種全連線的組合,它是一種無監督的形式,因為他的標籤是自己。import torch import torch.nn as nn from torch.autograd import variable import torch.utils.data as data import t...

TensorFlow實現MNIST的自編碼網路

本篇部落格將介紹基於無監督學習的乙個簡單應用 自編碼器 autoencoder 並學習tensorflow搭建乙個自編碼網路,並用它在mnist資料集上訓練。自編碼網路的作用是將輸入樣本壓縮到隱藏層,然後解壓,在輸出端重建樣本。最終輸出層神經元數量等於輸入層神經元的數量。這裡面主要有兩個過程 壓縮和...

Mnist手寫數字自編碼 分類實驗

import torch import torch.nn as nn import torch.nn.functional as f import random import numpy as np import matplotlib.pyplot as plt import torchvision...