1. 程式人生 > >『TensorFlow』單隱藏層自編碼器設計

『TensorFlow』單隱藏層自編碼器設計

ase numpy loss 分享 examples sum write 對象 plt

計算圖設計

很簡單的實踐,

  • 多了個隱藏層
  • 沒有上節的高斯噪聲
  • 網絡寫法由上節的面向對象改為了函數式編程,

其他沒有特別需要註意的,實現如下:

import numpy as np
import matplotlib.pyplot as plt
import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data
import os

os.environ[‘TF_CPP_MIN_LOG_LEVEL‘] = ‘2‘

learning_rate = 0.01                          # 學習率
training_epochs = 20                          # 訓練輪數,1輪等於n_samples/batch_size
batch_size = 128                              # batch容量
display_step = 1                              # 展示間隔
example_to_show = 10                          # 展示圖像數目

n_hidden_units = 256
n_input_units = 784
n_output_units = n_input_units

def WeightsVariable(n_in, n_out, name_str):
    return tf.Variable(tf.random_normal([n_in, n_out]), dtype=tf.float32, name=name_str)

def biasesVariable(n_out, name_str):
    return tf.Variable(tf.random_normal([n_out]), dtype=tf.float32, name=name_str)

def encoder(x_origin, activate_func=tf.nn.sigmoid):
    with tf.name_scope(‘Layer‘):
        Weights = WeightsVariable(n_input_units, n_hidden_units, ‘Weights‘)
        biases = biasesVariable(n_hidden_units, ‘biases‘)
        x_code = activate_func(tf.add(tf.matmul(x_origin, Weights), biases))
    return x_code

def decode(x_code, activate_func=tf.nn.sigmoid):
    with tf.name_scope(‘Layer‘):
        Weights = WeightsVariable(n_hidden_units, n_output_units, ‘Weights‘)
        biases = biasesVariable(n_output_units, ‘biases‘)
        x_decode = activate_func(tf.add(tf.matmul(x_code, Weights), biases))
    return x_decode

with tf.Graph().as_default():
    with tf.name_scope(‘Input‘):
        X_input = tf.placeholder(tf.float32, [None, n_input_units])
    with tf.name_scope(‘Encode‘):
        X_code = encoder(X_input)
    with tf.name_scope(‘decode‘):
        X_decode = decode(X_code)
    with tf.name_scope(‘loss‘):
        loss = tf.reduce_mean(tf.pow(X_input - X_decode, 2))
    with tf.name_scope(‘train‘):
        Optimizer = tf.train.RMSPropOptimizer(learning_rate)
        train = Optimizer.minimize(loss)

    init = tf.global_variables_initializer()

    # 因為使用了tf.Graph.as_default()上下文環境
    # 所以下面的記錄必須放在上下文裏面,否則記錄下來的圖是空的(get不到上面的default)
    writer = tf.summary.FileWriter(logdir=‘logs‘, graph=tf.get_default_graph())
    writer.flush()

計算圖:

技術分享

『TensorFlow』單隱藏層自編碼器設計