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