人工智能实践:Tensorflow笔记——神经网络计算

1.人工智能三学派

人工智能:让机器具备人的思维和意识

神经元示意图:

image-20240324190318548

当前人工智能的主流方向:连接主义

  • 前向传播

  • 损失函数

  • 梯度下降

  • 学习率

  • 反向传播更新参数

  • Tensorflow 2 常用函数

人工智能的三学派

行为主义:基于控制论,构建感知-动作控制系统。 (控制论,如平衡、行走、避障等自适应控制系统)

符号主义:基于算数逻辑表达式,求解问题时先把问题描述为表达式,再求解表达式。(可用公式描述、实现理性思维,如专家系统)

连接主义:仿生学,模拟神经元的连接关系。(仿脑神经元连接,实现感性思维,如神经网络)

人类从出生到成年,神经网络的变化

用计算机仿出神经网络连接关系,让计算机具备感性思维

  • 准备数据:采集大量 ”特征标签” 数据
  • 搭建网络:搭建神经网络结构
  • 优化参数:训练网络获取最佳参数(反传)
  • 应用网络:将网络保存为模型,输入新数据,输出分类或预测结果(前传)

2.神经网络设计过程

给鸢尾花分类(lris)

  • 0 狗尾草鸢尾
  • 1 杂色鸢尾
  • 2 弗吉尼亚鸢尾

人们通过经验总结了规律:通过测量花的花萼长、花萼宽、花瓣长、花瓣宽,可以得出鸢尾花的类别。

神经网络:采集大量 (花萼长、花萼宽、花瓣长、花瓣宽,对应的类别(标签,需人工标定))数据对构成数据集。

​ 把数据集喂入搭建好的神经网络结构,网络优化参数得到模型,模型读入新输入特征,输出识别结果

2.1用神经网络实现鸢尾花分类:搭建网络

这里引入了MP模型

x是输入特征,即花萼长、花萼宽、花瓣长、花瓣宽。

w为权重

b为偏执

2.2用神经网络实现鸢尾花分类:前向传播

前向传播得到计算结果

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import tensorflow as tf

x1 = tf.constant([[5.8, 4.0, 1.2, 0.2]]) # 5.8,4.0,1.2,0.2(0)
w1 = tf.constant([[-0.8, -0.34, -1.4],
[0.6, 1.3, 0.25],
[0.5, 1.45, 0.9],
[0.65, 0.7, -1.2]])
b1 = tf.constant([2.52, -3.1, 5.62])
y = tf.matmul(x1, w1) + b1
print("x1.shape:", x1.shape)
print("w1.shape:", w1.shape)
print("b1.shape:", b1.shape)
print("y.shape:", y.shape)
print("y:", y)
2.3用神经网络实现鸢尾花分类:损失函数

损失函数,定义预测值 y 和标准答案(标签)y_的差距,损失函数可以定量的判断当前这组参数 w 和 b 的优劣,当损失函数最小时,即可得到最优 w 的值和 b 的值。

损失函数的定义有多种方法,均方误差就是一种常用的损失函数:
$$
\operatorname{MSE}\left(y, y_{-}\right)=\frac{\sum_{k=0}^{n}(y-y)^{2}}{n}
$$

2.4用神经网络实现鸢尾花分类:梯度下降

目标:寻找一组参数 w 和 b 使得损失函数最小

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

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

学习率 lr:是一个超参数,表征梯度下降的速度。如学习率设置过小,参数更新会很慢,如果学习率设置过大,参数更新可能会跳过最小值。

2.5用神经网络实现鸢尾花分类:反向传播

从后向前,逐层求损失函数对每层神经元参数的偏导数,迭代更新所有参数。

2.6Tensorflow + py代码实现

3.张量生成

TensorFlow 中的 Tensor 表示张量,是多维数组、多维列表,用阶表示张量的维数。0 阶张量叫做标量,表示的是一个单独的数,如 123;1 阶张量叫作向量,表示的是一个一维数组如[1,2,3];2 阶张量叫作矩阵,表示的是一个二维数组,它可以有 i 行 j 列个元素,每个元素用它的行号和列号共同索引到,如在[[1,2,3],[4,5,6],[7,8,9]]中,2 的索引即为第 0 行第 1 列。

创建张量

利用 tf.constant(张量内容,dtype=数据类型(可选)),第一个参数表示张量内容,第二个参数表示张量的数据类型。

示例:

1

部分内容待补充