当前位置:   article > 正文

tensorflow—例子_tensorflow 例子

tensorflow 例子

1、第一个例子:预测一个线性直线y=0.1*x+0.3

  还没来得及去学习tensorflow的基础,便直接上手例子了。有点小吃力,但参照着B站莫烦的python教学视频(https://www.bilibili.com/video/av16001891/?p=10 例子5反复看了至少3回,原谅奔三的我,日益消退的理解和消化能力。。),感谢天地,看懂了并亲手实现了第一个人工神经网络训练的例子。虽然实验室的老旧电脑机器跑了大概有两三分钟,而视频中苹果的电脑是瞬间出的结果,但还是有那么一丝的小成就感和喜悦之情不由自主地溢于言表。。起码为之后的AI学习和漫长的科研道路带来了信心和希望,愿世界和平,愿疾病离你我远远的。。。

先把试验成功的代码和结果贴上来,上面简单做了注释。

二、例子2:构建简单的神经网络结构之添加隐藏层。目的:拟合一个二次函数。例子中构建了一个隐藏层含有具有十个神经元的三层神经网络。激励函数用的relu。https://en.wikipedia.org/wiki/Activation_function维基百科上有很多激励函数可供选择。

关于代码的注释在截图中会有。需要注意的是:

@1、如果定义了变量Variable 就必须进行激活。init;否则就不需要init。

@2、关于区别Variable和placeholder可以这么理解:前者是已经规划好的初始值,而后者是可以在代码运行时才传入的初始值。

@3、隐藏层的节点数(即神经元个数)可以自由定义。

@4、[None,1]可以被理解为行不确定,列为1的列向量。

三、将例子二的拟合过程进行可视化。期间主要有两个问题。

@1、在anconda下,需要在tensorflow的环境里安装上matplotlib.才可以使用spyder(tensorflow)调用matplotlib画图进行结果的可视化操作。

@2、在spyder中run,默认的是在控制台窗口显示画图结果,如果想让它在新建fig窗口独立显示图像,需要在Tools-Preference-Ipython console-Graphic-Backend选择Qt5,之后重启spyder才可有效。

  现将代码段粘贴如下,并附有注释:

  1. # -*- coding: utf-8 -*-
  2. """
  3. Created on Thu Sep 13 19:36:15 2018
  4. 莫烦B站的教学视频P16的例子。拟合一个二次函数。构建了一个隐藏层含有具有十个神经元的三层神经网络。激励函数用的relu
  5. 本次主要是演示将结果可视化。
  6. @author: Administrator
  7. """
  8. import tensorflow as tf
  9. import numpy as np
  10. import matplotlib.pyplot as plt#首先加载可视化模块
  11. def add_layer(inputs,in_size,out_size,activation_function=None):#None的话,默认就是线性函数
  12. Weights=tf.Variable(tf.random_normal([in_size,out_size]))#生成In_size行和out_size列的矩阵。代表权重矩阵。
  13. biases=tf.Variable(tf.zeros([1,out_size])+0.1)
  14. Wx_plus_b=tf.matmul(inputs,Weights)+biases#预测出来的还没有被激活的值存储在这个变量中。
  15. if activation_function is None:
  16. outputs=Wx_plus_b
  17. else:
  18. outputs=activation_function(Wx_plus_b)
  19. return outputs#outputs是add_layer的输出值。
  20. x_data=np.linspace(-1,1,300)[:,np.newaxis]#linspace是创建一个从-11300个数的等差数列
  21. noise=np.random.normal(0,0.05,x_data.shape)
  22. y_data=np.square(x_data)-0.5+noise
  23. xs=tf.placeholder(tf.float32,[None,1])#1是x_data的属性为1.None指无论给多少个例子都ok。
  24. ys=tf.placeholder(tf.float32,[None,1])
  25. #开始建造第一层layer。典型的三层神经网络:输入层(有多少个输入的x_data就有多少个神经元,本例中,只有一个属性,所以只有一个神经元输入),假设10个神经元的隐藏层,输出层。
  26. #由于在使用relu,该代码就是用十条线段拟合一个抛物线。
  27. l1=add_layer(xs,1,10,activation_function=tf.nn.relu)#L1仅是单隐藏层,全连接网络。
  28. #再定义一个输出层,即:prediction
  29. #add_layer的输出值是l1,把l1放在prediction的inputinputsize就是隐藏层的size10.outputsize就是y_datasize就是1.
  30. prediction=add_layer(l1,10,1,activation_function=None)
  31. loss=tf.reduce_mean(tf.reduce_sum(tf.square(ys-prediction),
  32. reduction_indices=[1]))#reduction_indices=[1]:按行求和。reduction_indices=[0]按列求和。sum是将所有例子求和,再求平均(mean)。
  33. #通过训练学习。提升误差。
  34. train_step=tf.train.GradientDescentOptimizer(0.1).minimize(loss)#以0.1的学习效率来训练学习,来减小loss。
  35. init=tf.global_variables_initializer()
  36. sess=tf.Session()
  37. sess.run(init)
  38. fig=plt.figure()#申请一个图片框
  39. ax=fig.add_subplot(1,1,1)#要实现连续性的画图,所以用ax
  40. ax.scatter(x_data,y_data) #先把real_data以点的形式给画出来
  41. plt.ion()
  42. plt.ioff()
  43. plt.show()
  44. for i in range(1000):
  45. sess.run(train_step,feed_dict={xs:x_data,ys:y_data})
  46. if i%50==0:
  47. #to seee the improvement
  48. #print(sess.run(loss,feed_dict={xs:x_data,ys:y_data}))
  49. #使用try是因为第一次抹除第一条线的话可能会报错,因为采用的是先擦除再plot的方法,第一条还不存在。
  50. try:
  51. ax.lines.remove(lines[0])#去除line的第一条线,再plot下一条。。
  52. except Exception:
  53. pass
  54. prediction_value=sess.run(prediction,feed_dict={xs:x_data})#prediction与输入的xs有关,所以,要feed_dict
  55. #然后把prediciotn的值用一条曲线的形式plot上去
  56. lines=ax.plot(x_data,prediction_value,'r-',lw=5)#lw=5是指线的宽度为5.
  57. #plot出一条线之后就要擦掉再plot另一条线。
  58. plt.pause(0.1)

另外,将运行结果整理如下:

四:classification。之前的是那个例子说的是线性回归的事情,接下来看分类的问题基于从MNIST下载数据,辨别数字

跟学比较顺利,现记录下几个知识点点:

@1、MNIST database=modified national institute of standards and technology databases

@2、one-hot编码 独热码,不同的位置表示不同的分类。

@3、在基于分类的神经网络中,计算loss要用到cross_entropy即交叉熵,它是一个相对比较复杂的算法。后续再做研究。用softmax和cross_entropy就可以自动生成分类算法?

例子代码如下(附有注释):

  1. # -*- coding: utf-8 -*-
  2. """
  3. Created on Tue Sep 18 10:08:29 2018
  4. 分类的问题.识别数字.基于MNIST数据集。
  5. @author: Administrator
  6. """
  7. import tensorflow as tf
  8. from tensorflow.examples.tutorials.mnist import input_data
  9. #number 1to 10 data
  10. mnist=input_data.read_data_sets('MNIST_data',one_hot=True)#如果电脑中没有MNIST包就会自动下载下来,第二次运行的时候就直接用了。
  11. def add_layer(inputs,in_size,out_size,activation_function=None):#None的话,默认就是线性函数
  12. Weights=tf.Variable(tf.random_normal([in_size,out_size]))#生成In_size行和out_size列的矩阵。代表权重矩阵。
  13. biases=tf.Variable(tf.zeros([1,out_size])+0.1)
  14. Wx_plus_b=tf.matmul(inputs,Weights)+biases#预测出来的还没有被激活的值存储在这个变量中。
  15. if activation_function is None:
  16. outputs=Wx_plus_b
  17. else:
  18. outputs=activation_function(Wx_plus_b)
  19. return outputs#outputs是add_layer的输出值。
  20. def compute_accuracy(v_xs,v_ys):
  21. global prediction#先把prediciton定义成全局变量
  22. y_pre=sess.run(prediction,feed_dict={xs:v_xs})#把x_data send到prediciton里生成预测值(一行10列,处于1和0之间的值,表示的是概率大小.取值最大的一个位置即是本次预测值)
  23. correct_prediction=tf.equal(tf.argmax(y_pre,1),tf.argmax(v_ys,1))#再将此数值与真实数值对比.取预测输出的1个数里面最大的索引和真实答案的索引比较奥,一样的话就是对的.
  24. accuracy=tf.reduce_mean(tf.cast(correct_prediction,tf.float32))#计算这一组数据当中,对的个数,与错的个数
  25. result=sess.run(accuracy,feed_dict={xs:v_xs,ys:v_ys})#run一下accuracy就可以得到结果(百分比)
  26. return result
  27. #define placeholder for inputs to network
  28. xs=tf.placeholder(tf.float32,[None,784])#28*28
  29. ys=tf.placeholder(tf.float32,[None,10])
  30. #add output layer
  31. prediction=add_layer(xs,784,10,activation_function=tf.nn.softmax)
  32. #the error between prediciton and real data
  33. cross_entropy=tf.reduce_mean(-tf.reduce_sum(ys*tf.log(prediction),
  34. reduction_indices=[1])) #loss交叉熵
  35. train_step=tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy)
  36. sess=tf.Session()
  37. #important step
  38. sess.run(tf.global_variables_initializer())
  39. for i in range(1000):
  40. batch_xs,batch_ys=mnist.train.next_batch(100)#提取出一部分的xs和ys的sample.如果每一次都学习全套的数据,计算能力会很低,很慢.
  41. sess.run(train_step,feed_dict={xs:batch_xs,ys:batch_ys})
  42. if
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/123931?site
推荐阅读
相关标签
  

闽ICP备14008679号