亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

用tensorflow搭建全連接神經網絡實現mnist數據集的識別

發布時間:2020-06-21 18:34:42 來源:網絡 閱讀:935 作者:nineteens 欄目:編程語言

  I 前向傳播網絡搭建

  在mnist_forward.py中搭建兩層全連接網絡,這里面就是定義層數,節點數,激活函數這些。

  輸入節點數目就是mnist數據集的圖片28*28大小,用784行的向量作為輸入。

  第一層y1=relu(x*w1+b1 )其中y1為500行的向量。那么w1里面就有784*500個變量啦~~b1是500個變量。然后經過一個relu激活函數。

  第二層就是從500節點變換到10個節點的輸出,輸出為標簽,表示0-9手寫數字出現的概率。y=y1*w2+b2。w2就是500*10的矩陣。b2是10行的向量。沒有激活函數。

  這里面w1 b1 w2 b2就是要訓練的參數

  采用了正則化

  正則化就是在損失函數中給每個參數w加上權重,引入模型復雜度指標,從而抑制模型噪聲,減少過擬合。這里使用的是L2正則化,即w的L2范數也是loss的一部分,也就是說在求解最優w的過程中,要使得w的值盡量在0附近。

  

用tensorflow搭建全連接神經網絡實現mnist數據集的識別


  import tensorflow as tf

  INPUT_NODE = 784

  OUTPUT_NODE = 10

  LAYER1_NODE = 500

  def get_weight(shape,regularizer):

  w = tf.Variable(tf.truncated_normal(shape,stddev=0.1))

  # 截斷正態分布

  if regularizer != None: tf.add_to_collection('losses',tf.contrib.layers.l2_regularizer(regularizer)(w))

  # 使用正則化 L2范數 將每個參數的正則化損失加到總損失中

  return w

  def get_bias(shape):

  b = tf.Variable(tf.zeros(shape))

  return b

  def forward(x,regularizer):

  w1 = get_weight([INPUT_NODE,LAYER1_NODE],regularizer)

  b1 = get_bias([LAYER1_NODE])

  y1 = tf.nn.relu(tf.matmul(x,w1) + b1)

  w2 = get_weight([LAYER1_NODE,OUTPUT_NODE],regularizer)

  b2 = get_bias([OUTPUT_NODE])

  y = tf.matmul(y1,w2) + b2

  return y

  II誤差反向傳播

  在mnist_backward.py中讀入mnist數據集,計算誤差,進行誤差反向傳播,實現模型的訓練,得到網絡參數并保存在模型中

  2.1 loss

  loss的計算先用softmax把輸出的10行向量變成概率分布,再與真實的輸出標簽進行對比,求交叉熵。cross entropy 可以看作是兩個概率分布函數之間的距離。距離越小,說明預測越準確,loss越小。

  2.2 學習率

  學習率是每次沿著梯度下降方向進行參數更新的步長,步長過大會導致在最優點震蕩,步長過小會導致學習速度太慢。這里采用了指數衰減的步長。在訓練初始階段,步長較大,較快收斂,在最優點附近,步長較小,能夠得到較精確的最優解。

  2.3 滑動平均

  記錄一段時間內模型中所有參數w和b的各自的平均值。用于增強模型的泛化能力。

  import tensorflow as tf

  import mnist_forward

  import os無錫婦科醫院 http://www.bhnnk120.com/

  os.environ["KMP_DUPLICATE_LIB_OK"]="TRUE"

  from tensorflow.examples.tutorials.mnist import input_data

  BATCH_SIZE = 200 #每次輸入的圖片數

  LEARNING_RATE_BASE = 0.1 #初始學習率

  LEARNING_RATE_DECAY = 0.99 #學習率衰減率

  REGULARIZER = 0.0001 #正則化系數

  STEPS = 10000 #訓練輪數

  MOVING_AVERAGE_DECAY = 0.99

  MODEL_SAVE_PATH="./model/"

  MODEL_NAME = "mnist_model"

  def backward(mnist):

  x = tf.placeholder(tf.float32,[None,mnist_forward.INPUT_NODE])

  y_ = tf.placeholder(tf.float32,[None,mnist_forward.OUTPUT_NODE])

  y = mnist_forward.forward(x,REGULARIZER)

  global_step = tf.Variable(0,trainable = False)

  # step計數 不可訓練的參數

  ce = tf.nn.sparse_softmax_cross_entropy_with_logits(logits = y, labels = tf.argmax(y_,1))

  cem = tf.reduce_mean(ce)

  loss = cem + tf.add_n(tf.get_collection('losses'))

  learning_rate = tf.train.exponential_decay(LEARNING_RATE_BASE,global_step,mnist.train.num_examples/BATCH_SIZE,LEARNING_RATE_DECAY,staircase=True)

  train_step = tf.train.GradientDescentOptimizer(learning_rate).minimize(loss,global_step = global_step)

  ema = tf.train.ExponentialMovingAverage(MOVING_AVERAGE_DECAY,global_step)

  ema_op = ema.apply(tf.trainable_variables())

  # ema.apply()對括號內參數求滑動平均

  # tf.trainable_variables() 將所有可以被訓練的參數匯總為list 也就是[w1 b1 w2 b2]

  with tf.control_dependencies([train_step, ema_op]):

  train_op = tf.no_op(name='train')

  # 該函數實現將滑動平均和訓練過程同步運行。

  saver = tf.train.Saver()

  with tf.Session() as sess:

  init_op = tf.global_variables_initializer()

  sess.run(init_op)

  for i in range(STEPS):

  xs,ys = mnist.train.next_batch(BATCH_SIZE)

  _, loss_value, step = sess.run([train_op,loss,global_step],feed_dict={x:xs,y_:ys})

  if i%1000 == 0:

  print("After %d training steps, loss on training batch is %g." %(step,loss_value))

  saver.save(sess,os.path.join(MODEL_SAVE_PATH,MODEL_NAME),global_step=global_step)

  if __name__ == '__main__':

  mnist = input_data.read_data_sets('./data/',one_hot=True)

  backward(mnist)

  III 運行代碼

  在Terminal里面激活tensorflow,運行python mnist_backward.py

  就可以輸出訓練過程的loss,每1000步打印一次loss。從下圖可以看出,loss逐漸減小。


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

敦煌市| 怀宁县| 墨竹工卡县| 涞水县| 赤城县| 朔州市| 宜良县| 锦州市| 积石山| 惠东县| 昔阳县| 古丈县| 泾川县| 泰安市| 合川市| 横山县| 马公市| 青田县| 全南县| 五华县| 望江县| 肥东县| 辛集市| 高尔夫| 安西县| 吉首市| 象山县| 科技| 织金县| 冷水江市| 长海县| 布尔津县| 电白县| 临汾市| 新津县| 松原市| 丽江市| 阿拉善左旗| 通州区| 通河县| 建宁县|