tensorflow入門(簡單神經網絡實現)

tensorflow 詳細的介紹可以看極客學院的tensorflow的官網:

http://wiki.jikexueyuan.com/project/tensorflow-zh/get_started/introduction.html

官網上講解的比較清楚。。。

這裏採用一個簡單的神經網絡的實現,來對tensorflow基本語法進行介紹,同時也想讓大家對用tensorflow實現神經網絡有個基本的瞭解。

神經網絡模式:

輸入層:2個節點,輸入兩個數據

隱藏層:一層,3個節點

輸出層:1個節點

注意:這裏的節點均包括了0節點。

python代碼實現:(代碼中有詳細註釋,語法的使用從實例中觀察)

  1. # coding:utf-8
  2. import tensorflow as tf
  3. from numpy.random import RandomState
  4. #BATCH_SIZE這是定義的一個數量,即一次訓練模型,投入的樣例數,按理說應該是一次投入所有訓練數據的
  5. #但是實際操作中一次投入太多數據,會導致電腦死機,因此只好對投入樣例數,進行限制
  6. BATCH_SIZE=8
  7. #生成模擬數據
  8. #randomState 函數中數字1,相當於一個seed種子,每次產生的隨機數都是相同的
  9. rdm=RandomState(1)
  10. #產生一個128行×2列的隨機矩陣
  11. X=rdm.rand(128,2)
  12. #產生一個布爾型結果矩陣128×1
  13. Y=[[int(x0+x1)<1] for(x0,x1)in X]
  14. #定義神經網絡的常量,參數,輸入節點,輸出節點,以及前向傳播過程
  15. #Variable定義一個變量,需要調用初始化,才能產生值
  16. #random_normal 產生一個正太隨機矩陣,shape=[2,3],stddev是正太分佈的標準差,seed隨機數種子,設置後每次產生的數字都相同
  17. w1=tf.Variable(tf.random_normal([2,3],stddev=1,seed=1))
  18. w2=tf.Variable(tf.random_normal([3,1],stddev=1,seed=1))
  19. #placeholder佔位符,執行時,在通過feed_dict將值傳入,dtype:數據類型,shape:數據形狀,name:名稱
  20. #如果在定義佔位符時,不能確定值的形狀時,用None表示
  21. x=tf.placeholder(tf.float32,shape=(None,2),name="x-input")
  22. y_=tf.placeholder(tf.float32,shape=(None,1),name="y-input")
  23. #前向傳播的過程
  24. #matmul就是矩陣相乘
  25. a=tf.matmul(x,w1)
  26. y=tf.matmul(a,w2)
  27. #定義損失函數及反向傳播算法
  28. #cross_entropy是交叉熵
  29. #tf.clip_by_value(A, min, max):輸入一個張量A,把A中的每一個元素的值都壓縮在min和max之間。小於min的讓它等於min,大於max的元素的值等於max
  30. cross_entropy=-tf.reduce_mean(y_*tf.log(tf.clip_by_value(y,1e-10,1.0)))
  31. #train_step 就是每次可訓練出一組w就是一次反向傳播
  32. #下面給出裏三種反向傳播的算法傳入的是學習率
  33. train_step=tf.train.AdamOptimizer(0.001).minimize(cross_entropy)
  34. #train_step=tf.train.GradientDescentOptimizer(0.001).minimize(cross_entropy)
  35. #train_step=tf.train.MomentumOptimizer(0.001,0.9).minimize(cross_entropy)
  36. #創建一個會話來運行Tensorflow程序,反覆運行反向傳播
  37. #tf中運行必須放在session對象中,且運行過後,要關閉session
  38. with tf.Session()as sess:
  39. #初始化變量,也就是上面的Variable變量
  40. init_op=tf.initialize_all_variables()
  41. sess.run(init_op)
  42. # 輸出目前(未經訓練)的參數取值
  43. #這裏爲何還要使用sess.run(w1)來進行操作?
  44. #因爲此時w1還是個變量,是個對象,直接打印出來是對象的地址
  45. print "w1:\n",sess.run(w1)
  46. print "w2:\n",sess.run(w2)
  47. print "\n"
  48. #訓練模型
  49. #訓練步數
  50. STEPS=5000
  51. for i in range(STEPS):
  52. start=(i*BATCH_SIZE)%128
  53. end=(i*BATCH_SIZE)%128+BATCH_SIZE
  54. sess.run(train_step,feed_dict={x: X[start:end], y_: Y[start:end]})
  55. if i%1000==0:
  56. total_cross_entropy=sess.run(cross_entropy,feed_dict={x:X,y_:Y})
  57. print ("After %d training steps,cross entropy on all data is %g" % (i,total_cross_entropy))
  58. #輸出訓練後的參數模型
  59. print "\n"
  60. print "w1:\n",sess.run(w1)
  61. print "w2:\n",sess.run(w2)


輸出的結果:

  1. w1:
  2. [[-0.81131822 1.48459876 0.06532937]
  3. [-2.44270396 0.0992484 0.59122431]]
  4. w2:
  5. [[-0.81131822]
  6. [ 1.48459876]
  7. [ 0.06532937]]
  8. After 0 training steps,cross entropy on all data is 0.0674925
  9. After 1000 training steps,cross entropy on all data is 0.0163385
  10. After 2000 training steps,cross entropy on all data is 0.00907547
  11. After 3000 training steps,cross entropy on all data is 0.00714436
  12. After 4000 training steps,cross entropy on all data is 0.00578471
  13. w1:
  14. [[-1.9618274 2.58235407 1.68203783]
  15. [-3.4681716 1.06982327 2.11788988]]
  16. w2:
  17. [[-1.8247149 ]
  18. [ 2.68546653]
  19. [ 1.41819501]]



     [原文鏈接](https://blog.csdn.net/NFMSR/article/details/78236508)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章