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的值

2020.3.02 主题:基本的前馈神经网络的搭建 和 简单的神经网络的训练

"""
简单的神经网络的训练
训练神经网络
"""

"""
代码:神经网络的训练
一个基本的神经网络模型搭建完成之后,还不能真正使用,因为它的最终计算结果是存在误差的
神经网络投入使用前,都要经过训练的过程。
增加了目标值,误差率,优化器,以及多次神经网络训练学习
"""

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.3.02 主题:基本的前馈神经网络的搭建 和 简单的神经网络的训练

 

以上是我们今天的内容:简单的神经网络模型的搭建以及神经网络训练,明天继续更新。谢谢

为什么打算研究学习人工智能?这要从2020年的一场 yi 情谈 起....