1、Email:谢琼初识TensorFlow第3章深度学习基于Python语言和Tensorflow平台了解本章引入需要神经网络解决的问题学习训练神经网络的基本方法010203target目标学习用神经网络的基本结构、表达方式和编程实现目 录 导 航123三好学生成绩问题的引入搭建对应的神经网络训练神经网络Contents三好学生问题的引入几位家长猜测学校评判三好学生的规则Guess?学校评选三好学生的规则总分总分 =德育分德育分 *60%60%+智育分智育分*30%+体育分体育分 *10%10%得分德育分智育分体育分家长不知道这个规则!家长们对问题的归纳 已知学校一定是以德育分、智育分和体育分三
2、项分数的总分来确定三好学生的计算总分时,三项分数应该有各自的权重系数各自孩子的三项分数都已经知道,总分也已经知道 未知经过家长们的分析,只有三项分数各自乘以的权重系数是未知的问题演变成 求解方程式 w1x+w2y+w3z=A 中的三个w即权重其中,x、y、z、A分别对应几位学生的德育分、智育分、体育分和总分如果已知两位学生的成绩90*w1+80*w2+70*w3=85 98*w1+95*w2+87*w3=96 两个方程式解三个未知数依然无法求解目 录 导 航123三好学生成绩问题的引入搭建对应的神经网络训练神经网络Contents使用神经网络来尝试解决该问题使用图中的神经网络来表达该问题输入层
3、(Input Layer)隐藏层(Hidden Layer)输出层(Output Layer)X1X2X3*W1*W2*W3yn1n2n3输入节点即德智体三项分数输出节点即总分隐藏层的神经元节点神经网络的代码import tensorflow as tf x1=tf.placeholder(dtype=tf.float32)x2=tf.placeholder(dtype=tf.float32)x3=tf.placeholder(dtype=tf.float32)w1=tf.Variable(0.1,dtype=tf.float32)w2=tf.Variable(0.1,dtype=tf.flo
4、at32)w3=tf.Variable(0.1,dtype=tf.float32)n1=x1*w1n2=x2*w2n3=x3*w3 y=n1+n2+n3 sess=tf.Session()init=tf.global_variables_initializer()sess.run(init)result=sess.run(x1,x2,x3,w1,w2,w3,y,feed_dict=x1:90,x2:80,x3:70)print(result)代码逐段讲解import tensorflow as tf 导入TensorFlow的类库(注意是全小写),并给它起一个别名tf,下面的程序中就可以用tf
5、来代替较长的tensorflow代码逐段讲解x1=tf.placeholder(dtype=tf.float32)x2=tf.placeholder(dtype=tf.float32)x3=tf.placeholder(dtype=tf.float32)定义x1,x2,x3三个占位符(placeholder),作为神经网络的输入节点,来准备分别接收德育、智育、体育三门分数作为神经网络的输入数据类型一般都设置为浮点数(小数),即使分数都是整数代码逐段讲解w1=tf.Variable(0.1,dtype=tf.float32)w2=tf.Variable(0.1,dtype=tf.float32)
6、w3=tf.Variable(0.1,dtype=tf.float32)定义w1,w2,w3三个可变参数(variable,为与编程中的变量区分)初始值先随意设置为0.1代码逐段讲解n1=x1*w1n2=x2*w2n3=x3*w3定义三个隐藏层节点 n1、n2n3,实际上是它们的计算算式代码逐段讲解y=n1+n2+n3定义输出层节点 y,也就是总分的计算公式代码逐段讲解sess=tf.Session()init=tf.global_variables_initializer()sess.run(init)定义神经网络的会话对象,并初始化所有的可变参数代码逐段讲解result=sess.run(
7、x1,x2,x3,w1,w2,w3,y,feed_dict=x1:90,x2:80,x3:70)print(result)用三门分数送入神经网络来运行该神经网络并获得该神经网络输出的节点值 y运行程序并观察神经网络的输出结果根据随意设置的可变参数初始值计算出的输出结果显然是不正确的目 录 导 航123三好学生成绩问题的引入搭建对应的神经网络训练神经网络Contents训练神经网络的过程神经网络在投入使用前,都要经过训练(train)的过程才能有准确的输出训练数据&神经网络训练时一定要有训练数据&有监督学习中,训练数据中的每一条是由一组输入值和一个目标值组成的&目标值就是根据这一组输入数值应该得
8、到的“标准答案”&一般来说,训练数据越多、离散性(覆盖面)越强越好代码逐段讲解x1=tf.placeholder(dtype=tf.float32)x2=tf.placeholder(dtype=tf.float32)x3=tf.placeholder(dtype=tf.float32)yTrain=tf.placeholder(dtype=tf.float32)给神经网络增加一个输入项 目标值 yTrain,用来表示正确的总分结果代码逐段讲解y=n1+n2+n3loss=tf.abs(y-yTrain)optimizer=tf.train.RMSPropOptimizer(0.001)tra
9、in=optimizer.minimize(loss)增加误差函数 loss,优化器optimizer 和 训练对象 traintf.abs函数用于取绝对值暂时使用RMSProp优化器,其中参数是学习率误差函数和训练对象 误差函数(又叫损失函数):用于让神经网络来判断当前网络的计算结果与目标值(也就是标准答案)相差多少。训练对象:被神经网络用于控制训练的方式,常见的训练的方式是设法使误差函数的计算值越来越小。代码逐段讲解result=sess.run(train,x1,x2,x3,w1,w2,w3,y,yTrain,loss,feed_dict=x1:90,x2:80,x3:70,yTrain
10、:85)print(result)result=sess.run(train,x1,x2,x3,w1,w2,w3,y,yTrain,loss,feed_dict=x1:98,x2:95,x3:87,yTrain:96)print(result)训练两次并查看输出结果,注意与前面的区别:训练时要在sess.run函数中加上train这个训练对象注意此处是自动折行注意如何“喂”数据训练结果w1、w2、w3和计算结果 y 已经开始有了变化循环进行多次训练for i in range(5000):result=sess.run(train,x1,x2,x3,w1,w2,w3,y,yTrain,loss
11、,feed_dict=x1:90,x2:80,x3:70,yTrain:85)print(result)result=sess.run(train,x1,x2,x3,w1,w2,w3,y,yTrain,loss,feed_dict=x1:98,x2:95,x3:87,yTrain:96)print(result)循环训练5000轮,每轮两次训练结果w1、w2、w3已经非常接近于预期的0.6、0.3、0.1,y 也非常接近于目标值练习p 假设另一个学校有两位学生的三项成绩和总分假设另一个学校有两位学生的三项成绩和总分如下,试用本章中的方法,求得该学校的三好如下,试用本章中的方法,求得该学校的三好
12、学生总分计算规则。学生总分计算规则。学生1:三项分数分别为92、98、90,总分94;学生2:三项分数分别为92、99、98,总分96;p 尝试改变可变参数尝试改变可变参数w1w1、w2w2、w3w3的初始值,观察的初始值,观察执行后的效果。执行后的效果。互助互利 共同进步深度学习 基于Python语言和Tensorflow平台更多样书申请和资源下载需求,请登录人邮教育社区()海量图书方便查询免费申请样书下载配套资源优惠购书成为作者囊括各大品类,您想要的应有尽有教师免费申请样书,我们将安排快递迅速送达教学视频、PPT课件、教学案例、习题答案、模拟试卷等丰富资源免费下载教师可以申请最低折扣学生直接优惠购买图书欢迎写文章投稿,我们强大的编辑团队将为您提供专业和高效的编辑出版服务