欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

TensorFlow学习笔记——(1)神经网络设计过程

程序员文章站 2024-03-14 11:45:40
...

最近在学习TensorFlow搭建神经网络,记录下笔记呀~
视频课程-B站-北京大学人工智能实践-TensorFlow2.0

通过一个例子来认识神经网络的设计过程

鸢尾花分类

有三种鸢尾花:0狗尾草鸢尾,1杂色鸢尾,2弗吉尼亚鸢尾,当给一个新的图片是,怎么判断是哪类鸢尾呢?
专家系统:把专家的经验告知计算机,计算机执行逻辑判别(理性计算),给出分类。比如这里可以用if语句case语句(花萼长>花萼宽且花瓣长/花瓣宽>2 则为1杂色鸢尾)
神经网络:采集大量(花萼长、花萼宽、花瓣长、花瓣宽(输入特征),对应类别(标签,需人工标定))数据对构成数据集,将数据集喂入搭建好的神经网络结果,网络优化参数得到模型,模型读入新输入特征,输出识别结果。

神经元计算模型——MP模型

TensorFlow学习笔记——(1)神经网络设计过程TensorFlow学习笔记——(1)神经网络设计过程

前向传播过程

TensorFlow学习笔记——(1)神经网络设计过程

损失函数

表征网络前向传播推理和标准答案之间的差距
TensorFlow学习笔记——(1)神经网络设计过程

梯度下降法

寻找损失函数的最小值,下面给出了梯度下降中参数更新的公式
TensorFlow学习笔记——(1)神经网络设计过程
优化参数w就是找到一个参数w,使得损失函数的值最小
TensorFlow学习笔记——(1)神经网络设计过程

import tensorflow as tf

# 设置参数w的随机初始值为5,设定为可训练
w = tf.Variable(tf.constant(5,dtype=tf.float32))
# 学习率
lr = 0.999
# 循环迭代40次
epoch = 40

# for epoch 定义顶层循环,表示对数据集循环epoch次,此例数据集
for epoch in range(epoch):
    with tf.GradientTape() as tape:  # with结构到grads框起了梯度的计算过程
        loss = tf.square(w + 1)
    grads = tape.gradient(loss,w)  # .gradient函数告知谁对谁求导

    w.assign_sub(lr * grads)  # .assign_sub对变量做自减,即w -= lr*grads
    print("after %s epoch,w is %f,loss is %f" %(epoch,w.numpy(),loss))

# lr初始值0.2  请自改学习率0.001 0.999 看收敛效果
# 最终目的:找到loss最小,即w=-1的最优参数w