2020.3.02 主题:基本的前馈神经网络的搭建 和 简单的神经网络的训练
""" 基本的前馈神经网络的搭建: 三好学生成绩问题的引入 实际答案:总分 = 德育分*0.6 + 智育分*0.3 + 体育分*0.1 题目:已知有两个学生各项数据,求德育分,智育分,体育分的权值 两组学生数据如下: 90*德育分(w1) + 80*智育分(w2) + 70*体育分(w3) = 85 98*德育分(w1) + 95*智育分(w2) + 87*体育分(w3) = 96 求:w1, w2, w3 """ """ 代码:搭建一个基本的前馈神经网络模型 """ import tensorflow as tf #引入tensorflow #输入层 x1 = tf.placeholder(dtype=tf.float32) #占位符变量 它的数据类型为32位浮点型 x2 = tf.placeholder(dtype=tf.float32) x3 = tf.placeholder(dtype=tf.float32) #权重 w1 = tf.Variable(0.1, dtype=tf.float32) #权重值 初始值为0.1 在后续人工智能过程中逐渐调整 w2 = tf.Variable(0.1, dtype=tf.float32) w3 = tf.Variable(0.1, dtype=tf.float32) #隐藏层节点 n1 = x1 * w1 n2 = x2 * w2 n3 = x3 * w3 #输出节点 y = n1+n2+n3 #上述 : 输入层 隐藏层节点 输出层节点都建立完成之后, 现在需要建立一个会话对象 然后吧程序跑起来 #建立一个会话对象 sess = tf.Session() #定义一个sess对象,它包含一个Tensorflow的会话对象Session。有了这个会话对象,我们的神经网络就可以正式运转了。 #可变参数的初始化 init = tf.global_variables_initializer() #利用这个函数来初始化可变参数的对象,并返回init对象 #运行初始化函数 sess.run(init) #最后执行一次神经网络运算,并打印出结果 #解读下这段代码: """ 我们调用sess对象的run函数,真正的进行一次计算。 也就是带入一组数据,并获得神经网络的计算结果。 sess.run函数的第一个参数为:一个数组,代表我们要查看的哪些结果项 第二个参数为:字典,表示我们要喂的数据 """ result = sess.run([x1,x2,x3,w1,w2,w3,y], feed_dict={x1:90,x2:80,x3:70}) print(result)
搭建基本的神经网络模型,运行结果如下:
从中可以看到搭建的最基本的神经网络模型的:每个输入层节点对应得权值以及最后的输出节点y的值
""" 简单的神经网络的训练 训练神经网络 """ """ 代码:神经网络的训练 一个基本的神经网络模型搭建完成之后,还不能真正使用,因为它的最终计算结果是存在误差的 神经网络投入使用前,都要经过训练的过程。 增加了目标值,误差率,优化器,以及多次神经网络训练学习 """ import tensorflow as tf #引入tensorflow #输入层 x1 = tf.placeholder(dtype=tf.float32) #占位符变量 它的数据类型为32位浮点型 x2 = tf.placeholder(dtype=tf.float32) x3 = tf.placeholder(dtype=tf.float32) #新加入的值:目标值 yTrain = tf.placeholder(dtype=tf.float32) #yTrain为目标值 , 也就是两位学生各自的总分 #权重 w1 = tf.Variable(0.1, dtype=tf.float32) #权重值 初始值为0.1 在后续人工智能过程中逐渐调整 w2 = tf.Variable(0.1, dtype=tf.float32) w3 = tf.Variable(0.1, dtype=tf.float32) #隐藏层节点 n1 = x1 * w1 n2 = x2 * w2 n3 = x3 * w3 #输出节点 y = n1+n2+n3 #新加入的值:误差 loss = tf.abs(y - yTrain) #这里是计算目标值与输出节点值y的差距,并取绝对值 #使用优化器optimizer调整参数幅度的变化 optimizer = tf.train.RMSPropOptimizer(0.001) #optimizer为优化器变量, 0.0001为参数的幅度 #train以最小原则调整可变参数 train = optimizer.minimize(loss) #以最小原则调整误差率 #上述 : 输入层 隐藏层节点 输出层节点都建立完成之后, 现在需要建立一个会话对象 然后吧程序跑起来 #建立一个会话对象 sess = tf.Session() #定义一个sess对象,它包含一个Tensorflow的会话对象Session。有了这个会话对象,我们的神经网络就可以正式运转了。 #可变参数的初始化 init = tf.global_variables_initializer() #利用这个函数来初始化可变参数的对象,并返回init对象 #运行初始化函数 sess.run(init) #最后执行一次神经网络运算,并打印出结果 #解读下这段代码: """ 我们调用sess对象的run函数,真正的进行一次计算。 也就是带入一组数据,并获得神经网络的计算结果。 sess.run函数的第一个参数为:一个数组,代表我们要查看的哪些结果项 第二个参数为:字典,表示我们要喂的数据 """ for i in range(40000): result = sess.run([train, x1,x2,x3,w1,w2,w3,y, yTrain, loss], 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)
简单的神经网络的训练结果如下:
可以看到经过4万次训练,我们要得出的权重值已经接近我们的标准答案:0.6,0.3,0.1;并且误差率loss,为:0.0332489,已经比较低了
以上是我们今天的内容:简单的神经网络模型的搭建以及神经网络训练,明天继续更新。谢谢
为什么打算研究学习人工智能?这要从2020年的一场 yi 情谈 起....