Tensorflow訓(xùn)練MNIST手寫數(shù)字識別模型-創(chuàng)新互聯(lián)

本文實例為大家分享了Tensorflow訓(xùn)練MNIST手寫數(shù)字識別模型的具體代碼,供大家參考,具體內(nèi)容如下

成都創(chuàng)新互聯(lián)公司堅持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:網(wǎng)站制作、網(wǎng)站設(shè)計、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時代的城區(qū)網(wǎng)站設(shè)計、移動媒體設(shè)計的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!
import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data
 
INPUT_NODE = 784  # 輸入層節(jié)點=圖片像素=28x28=784
OUTPUT_NODE = 10  # 輸出層節(jié)點數(shù)=圖片類別數(shù)目
 
LAYER1_NODE = 500  # 隱藏層節(jié)點數(shù),只有一個隱藏層
BATCH_SIZE = 100  # 一個訓(xùn)練包中的數(shù)據(jù)個數(shù),數(shù)字越小
          # 越接近隨機梯度下降,越大越接近梯度下降
 
LEARNING_RATE_BASE = 0.8   # 基礎(chǔ)學(xué)習(xí)率
LEARNING_RATE_DECAY = 0.99  # 學(xué)習(xí)率衰減率
 
REGULARIZATION_RATE = 0.0001  # 正則化項系數(shù)
TRAINING_STEPS = 30000     # 訓(xùn)練輪數(shù)
MOVING_AVG_DECAY = 0.99    # 滑動平均衰減率
 
# 定義一個輔助函數(shù),給定神經(jīng)網(wǎng)絡(luò)的輸入和所有參數(shù),計算神經(jīng)網(wǎng)絡(luò)的前向傳播結(jié)果
def inference(input_tensor, avg_class, weights1, biases1,
       weights2, biases2):
 
 # 當(dāng)沒有提供滑動平均類時,直接使用參數(shù)當(dāng)前取值
 if avg_class == None:
  # 計算隱藏層前向傳播結(jié)果
  layer1 = tf.nn.relu(tf.matmul(input_tensor, weights1) + biases1)
  # 計算輸出層前向傳播結(jié)果
  return tf.matmul(layer1, weights2) + biases2
 else:
  # 首先計算變量的滑動平均值,然后計算前向傳播結(jié)果
  layer1 = tf.nn.relu(
    tf.matmul(input_tensor, avg_class.average(weights1)) +
    avg_class.average(biases1))
  
  return tf.matmul(
    layer1, avg_class.average(weights2)) + avg_class.average(biases2)
 
# 訓(xùn)練模型的過程
def train(mnist):
 x = tf.placeholder(tf.float32, [None, INPUT_NODE], name='x-input')
 y_ = tf.placeholder(tf.float32, [None, OUTPUT_NODE], name='y-input')
 
 # 生成隱藏層參數(shù)
 weights1 = tf.Variable(
   tf.truncated_normal([INPUT_NODE, LAYER1_NODE], stddev=0.1))
 biases1 = tf.Variable(tf.constant(0.1, shape=[LAYER1_NODE]))
 
 # 生成輸出層參數(shù)
 weights2 = tf.Variable(
   tf.truncated_normal([LAYER1_NODE, OUTPUT_NODE], stddev=0.1))
 biases2 = tf.Variable(tf.constant(0.1, shape=[OUTPUT_NODE]))
 
 # 計算前向傳播結(jié)果,不使用參數(shù)滑動平均值 avg_class=None
 y = inference(x, None, weights1, biases1, weights2, biases2)
 
 # 定義訓(xùn)練輪數(shù)變量,指定為不可訓(xùn)練
 global_step = tf.Variable(0, trainable=False)
 
 # 給定滑動平均衰減率和訓(xùn)練輪數(shù)的變量,初始化滑動平均類
 variable_avgs = tf.train.ExponentialMovingAverage(
   MOVING_AVG_DECAY, global_step)
 
 # 在所有代表神經(jīng)網(wǎng)絡(luò)參數(shù)的可訓(xùn)練變量上使用滑動平均
 variables_avgs_op = variable_avgs.apply(tf.trainable_variables())
 
 # 計算使用滑動平均值后的前向傳播結(jié)果
 avg_y = inference(x, variable_avgs, weights1, biases1, weights2, biases2)
 
 # 計算交叉熵作為損失函數(shù)
 cross_entropy = tf.nn.sparse_softmax_cross_entropy_with_logits(
   logits=y, labels=tf.argmax(y_, 1))
 cross_entropy_mean = tf.reduce_mean(cross_entropy)
 
 # 計算L2正則化損失函數(shù)
 regularizer = tf.contrib.layers.l2_regularizer(REGULARIZATION_RATE)
 regularization = regularizer(weights1) + regularizer(weights2)
 
 loss = cross_entropy_mean + regularization
 
 # 設(shè)置指數(shù)衰減的學(xué)習(xí)率
 learning_rate = tf.train.exponential_decay(
   LEARNING_RATE_BASE,
   global_step,              # 當(dāng)前迭代輪數(shù)
   mnist.train.num_examples / BATCH_SIZE, # 過完所有訓(xùn)練數(shù)據(jù)的迭代次數(shù)
   LEARNING_RATE_DECAY)
 
 
 # 優(yōu)化損失函數(shù)
 train_step = tf.train.GradientDescentOptimizer(learning_rate).minimize(
   loss, global_step=global_step)
 
 # 反向傳播同時更新神經(jīng)網(wǎng)絡(luò)參數(shù)及其滑動平均值
 with tf.control_dependencies([train_step, variables_avgs_op]):
  train_op = tf.no_op(name='train')
 
 # 檢驗使用了滑動平均模型的神經(jīng)網(wǎng)絡(luò)前向傳播結(jié)果是否正確
 correct_prediction = tf.equal(tf.argmax(avg_y, 1), tf.argmax(y_, 1))
 accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
 
 
 # 初始化會話并開始訓(xùn)練
 with tf.Session() as sess:
  tf.global_variables_initializer().run()
  
  # 準(zhǔn)備驗證數(shù)據(jù),用于判斷停止條件和訓(xùn)練效果
  validate_feed = {x: mnist.validation.images,
          y_: mnist.validation.labels}
  
  # 準(zhǔn)備測試數(shù)據(jù),用于模型優(yōu)劣的最后評價標(biāo)準(zhǔn)
  test_feed = {x: mnist.test.images, y_: mnist.test.labels}
  
  # 迭代訓(xùn)練神經(jīng)網(wǎng)絡(luò)
  for i in range(TRAINING_STEPS):
   if i%1000 == 0:
    validate_acc = sess.run(accuracy, feed_dict=validate_feed)
    print("After %d training step(s), validation accuracy using average " 
       "model is %g " % (i, validate_acc))
    
   xs, ys = mnist.train.next_batch(BATCH_SIZE)
   sess.run(train_op, feed_dict={x: xs, y_: ys})
  
  # 訓(xùn)練結(jié)束后在測試集上檢測模型的最終正確率
  test_acc = sess.run(accuracy, feed_dict=test_feed)
  print("After %d training steps, test accuracy using average model "
     "is %g " % (TRAINING_STEPS, test_acc))
  
  
# 主程序入口
def main(argv=None):
 mnist = input_data.read_data_sets("/tmp/data", one_hot=True)
 train(mnist)
 
# Tensorflow主程序入口
if __name__ == '__main__':
 tf.app.run()

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

分享文章:Tensorflow訓(xùn)練MNIST手寫數(shù)字識別模型-創(chuàng)新互聯(lián)
網(wǎng)站網(wǎng)址:http://bm7419.com/article32/ddhcsc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供響應(yīng)式網(wǎng)站、網(wǎng)站設(shè)計公司、網(wǎng)頁設(shè)計公司App設(shè)計、微信公眾號、靜態(tài)網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)