深度学习框架TensorFlow笔记:01神经网络计算(上)

写在前面:感谢北京大学软件与微电子学院的曹教授所授知识。

1.1人工智能三学派:

i.  行为主义(感知-动作控制系统,控制论)

ii.  符号主义(基于算术逻辑表达式,问题->表达式->求解表达式)

iii.  连接主义(仿生学,模拟神经元连接关系,实现感性思维)

1.2神经网络设计过程

1.2.1 神经网络的一般过程:

①  准备数据:采集大量(输入特征和标签)数据对构成数据集

②  搭建网络:搭建神经网络结构

③  优化参数:往网络喂入数据,训练,获取最佳参数(反传)

④  应用网络:将网络保存为模型,输入新数据,输出分类或预测结果(前传)

1.2.2 神经网络的具体设计


神经网络的设计过程

1.2.3 损失函数(以莺尾花的分类为例)

搭建网络时,会随机初始化所有参数(如wi权值,和b偏置)。


各项参数会随机初始化

输入特征xi为莺尾花的各项数据(叶长叶宽等),输出yi分别对应莺尾花的三种分类。


简单的输入神经元和输出神经元

输出值得分最高的就越有可能是该种类型。可此次(第一次)分类结果却不对。(输入特征对应的标签为0,可是最高得分却是1类莺尾花)


第一次分类结果不对

利用损失函数(loss function)【预测值(y)与标准答案(y_)的差距】,损失函数可以定量判断W、b的优劣,当损失函数输出最小时,参数W、b会出现最优值。

常用的损失函数:均方误差,表征了网络前向传播推理(结果)和标准答案之间的差距。


均方误差

损失函数的梯度,表示损失函数对各参数求偏导后的向量。损失函调梯度下降的方向就是函数减小的方向。

question:【为什么要令均方误差对分量系数的偏导数等于0 ?】

answer:【为了选择最佳系数,这个最佳,可以理解为均方误差最小。而均方误差是系数的一个函数(不同系数的选择对应不同误差),要使该函数达到最小,按多元函数的理论,应该是极值,而极值的必要条件就是对该变量的偏导数等于0。】

梯度下降法沿损失函数梯度下降的方向,寻找损失函数的最小值,得到最优参数的方法。

梯度下降法更新参数的计算


梯度下降法更新参数的计算

学习率(lr)学习率设置过小,收敛会很慢;学习率设置过大,梯度会在最小值附近来回震荡,跳过了最小值,可能无法收敛。


学习率(lr)

反向传播:从后向前,逐层求损失函数对每层神经元参数的偏导数,迭代更新所有参数。如下图,当w= -1时,损失函数loss()的值最小。


反向传播

代码实现:


Import tensorflow as tf


w = tf.Variable(tf.constant(5, dtype =tf.float32))

lr = 0.2

epoch = 40


for epoch in range(epoch): #顶层循环,表示对数据集循环epoch次

withtf.GradientTape() as tape:

loss= tf.square(w + 1)

grads= tape.gradient(loss , w)


w.assign_sub(lr* grads)

print(“After%s epoch, w is %f, loss is %f” %(epoch, w.numpy(), loss))

全部评论

相关推荐

07-15 00:33
江苏大学 Java
代码飞升:哈哈哈哈评论区三个打广告的
简历中的项目经历要怎么写
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务