91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

如何使用tensorflow實現VGG網絡,訓練mnist數據集

發布時間:2020-07-22 09:43:52 來源:億速云 閱讀:471 作者:小豬 欄目:開發技術

小編這次要給大家分享的是如何使用tensorflow實現VGG網絡,訓練mnist數據集,文章內容豐富,感興趣的小伙伴可以來了解一下,希望大家閱讀完這篇文章之后能夠有所收獲。

VGG作為流行的幾個模型之一,訓練圖形數據效果不錯,在mnist數據集是常用的入門集數據,VGG層數非常多,如果嚴格按照規范來實現,并用來訓練mnist數據集,會出現各種問題,如,經過16層卷積后,28*28*1的圖片幾乎無法進行。

先介紹下VGG

ILSVRC 2014的第二名是Karen Simonyan和 Andrew Zisserman實現的卷積神經網絡,現在稱其為VGGNet。它主要的貢獻是展示出網絡的深度是算法優良性能的關鍵部分。

他們最好的網絡包含了16個卷積/全連接層。網絡的結構非常一致,從頭到尾全部使用的是3x3的卷積和2x2的匯聚。他們的預訓練模型是可以在網絡上獲得并在Caffe中使用的。

VGGNet不好的一點是它耗費更多計算資源,并且使用了更多的參數,導致更多的內存占用(140M)。其中絕大多數的參數都是來自于第一個全連接層。

模型結構:

如何使用tensorflow實現VGG網絡,訓練mnist數據集

本文在實現時候,盡量保存VGG原來模型結構,核心代碼如下:

weights ={
  'wc1':tf.Variable(tf.random_normal([3,3,1,64])),
  'wc2':tf.Variable(tf.random_normal([3,3,64,64])),
  'wc3':tf.Variable(tf.random_normal([3,3,64,128])),
  'wc4':tf.Variable(tf.random_normal([3,3,128,128])),
  
  'wc5':tf.Variable(tf.random_normal([3,3,128,256])),
  'wc6':tf.Variable(tf.random_normal([3,3,256,256])),
  'wc7':tf.Variable(tf.random_normal([3,3,256,256])),
  'wc8':tf.Variable(tf.random_normal([3,3,256,256])),
  
  'wc9':tf.Variable(tf.random_normal([3,3,256,512])),
  'wc10':tf.Variable(tf.random_normal([3,3,512,512])),
  'wc11':tf.Variable(tf.random_normal([3,3,512,512])),
  'wc12':tf.Variable(tf.random_normal([3,3,512,512])),
  'wc13':tf.Variable(tf.random_normal([3,3,512,512])),
  'wc14':tf.Variable(tf.random_normal([3,3,512,512])),
  'wc15':tf.Variable(tf.random_normal([3,3,512,512])),
  'wc16':tf.Variable(tf.random_normal([3,3,512,256])),
  
  'wd1':tf.Variable(tf.random_normal([4096,4096])),
  'wd2':tf.Variable(tf.random_normal([4096,4096])),
  'out':tf.Variable(tf.random_normal([4096,nn_classes])),
}
 
biases ={
  'bc1':tf.Variable(tf.zeros([64])),
  'bc2':tf.Variable(tf.zeros([64])),
  'bc3':tf.Variable(tf.zeros([128])),
  'bc4':tf.Variable(tf.zeros([128])),
  'bc5':tf.Variable(tf.zeros([256])),
  'bc6':tf.Variable(tf.zeros([256])),
  'bc7':tf.Variable(tf.zeros([256])),
  'bc8':tf.Variable(tf.zeros([256])),
  'bc9':tf.Variable(tf.zeros([512])),
  'bc10':tf.Variable(tf.zeros([512])),
  'bc11':tf.Variable(tf.zeros([512])),
  'bc12':tf.Variable(tf.zeros([512])),
  'bc13':tf.Variable(tf.zeros([512])),
  'bc14':tf.Variable(tf.zeros([512])),
  'bc15':tf.Variable(tf.zeros([512])),
  'bc16':tf.Variable(tf.zeros([256])),
  
  
  'bd1':tf.Variable(tf.zeros([4096])),
  'bd2':tf.Variable(tf.zeros([4096])),
  'out':tf.Variable(tf.zeros([nn_classes])),
}

卷積實現:

def convLevel(i,input,type):
  num = i
  out = conv2D('conv'+str(num),input,weights['wc'+str(num)],biases['bc'+str(num)])
  if type=='p':
    out = maxPool2D('pool'+str(num),out, k=2) 
    out = norm('norm'+str(num),out, lsize=4)
  return out 
 
def VGG(x,weights,biases,dropout):
  x = tf.reshape(x,shape=[-1,28,28,1])
 
  input = x
 
  for i in range(16):
    i += 1
    if(i==2) or (i==4) or (i==12) : # 根據模型定義還需要更多的POOL化,但mnist圖片大小不允許。
      input = convLevel(i,input,'p')
    else:
      input = convLevel(i,input,'c')

訓練:

pred = VGG(x, weights, biases, keep_prob)
cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=pred,labels=y))
optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate).minimize(cost)
 
correct_pred = tf.equal(tf.argmax(pred,1), tf.argmax(y,1))
accuracy_ = tf.reduce_mean(tf.cast(correct_pred,tf.float32))
 
init = tf.global_variables_initializer()
with tf.Session() as sess:
  sess.run(init)
  step = 1
  while step*batch_size < train_iters:
    batch_x,batch_y = mnist.train.next_batch(batch_size)
    sess.run(optimizer,feed_dict={x:batch_x,y:batch_y,keep_prob:dropout})
    print(step*batch_size)
    if step % display_step == 0 :
      #loss,acc = sess.run([cost,accuracy],feed_dict={x:batch_x,y:batch_y,keep_prob=1.0})
      acc = sess.run(accuracy_, feed_dict={x: batch_x, y: batch_y, keep_prob: 1.})
      # 計算損失值
      
      loss = sess.run(cost, feed_dict={x: batch_x, y: batch_y, keep_prob: 1.})
      print("iter: "+str(step*batch_size)+"mini batch Loss="+"{:.6f}".format(loss)+",acc="+"{:6f}".format(acc))
 
    step += 1 
   
  print("training end!") 

最終效果:

訓練10000次后:結果如下:

iter: 12288 mini batch Loss=5088409.500000,acc=0.578125

iter: 12800 mini batch Loss=4514274.000000,acc=0.601562

iter: 13312 mini batch Loss=4483454.500000,acc=0.648438

這種深度的模型可以考慮循環10萬次以上。目前效果還不錯,本人沒有GPU,心痛筆記本的CPU,100%的CPU利用率,聽到風扇響就不忍心再訓練,本文也借鑒了alex網絡實現,當然我也實現了這個網絡模型。在MNIST數據上,ALEX由于層數較少,收斂更快,當然MNIST,用CNN足夠了。

看完這篇關于如何使用tensorflow實現VGG網絡,訓練mnist數據集的文章,如果覺得文章內容寫得不錯的話,可以把它分享出去給更多人看到。

向AI問一下細節

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

AI

离岛区| 洞口县| 雅安市| 拜泉县| 嘉禾县| 无为县| 教育| 那曲县| 德令哈市| 大余县| 紫云| 望谟县| 灵璧县| 米脂县| 秦皇岛市| 肥乡县| 绍兴县| 满洲里市| 淮阳县| 疏附县| 新巴尔虎左旗| 桂阳县| 海南省| 丰县| 廉江市| 万山特区| 清镇市| 拉萨市| 盐边县| 乐清市| 潜山县| 壶关县| 寻甸| 壤塘县| 临邑县| 化德县| 杂多县| 大田县| 承德县| 濮阳市| 师宗县|