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)

猜你喜欢

转载自blog.csdn.net/qq_36501027/article/details/81428189