人工智能工具课
人工智能的主流方向—连接主义
人工智能三学派:
行为主义:基于控制论,构建感知-动作控制系统,
符号主义:基于算数逻辑表达式,求解问题时先把问题描述为表达式,再求解表达式,
连接主义:仿生学,模拟神经元连接关系,用计算机仿出神经网络连接关系,让计算机具备感性思维
过程:
准备数据:采集大量特征/标签数据
搭建网络:搭建神经网络结构获取最佳参数(反转)
应用网络:将网络保存为模型,输入新数据,输出分类或预测结果(前传)
前向传播
鸢尾花分类(Iris):
if语句case语句—专家系统:
把专家经验告知计算机,计算机执行逻辑判别(理性计算),给出分类。
神经网络:
采集大量的数据(输入特征:花萼长,花萼宽,标签:对应类别)构成数据集把数据集喂入搭建好的神经网络结构,网络优化参数得到模型,模型读入新输入特征,输出识别结果。
MP模型
损失函数:
预测值(y)与标准答案(y_)的差距。损失函数可以定量判断W、b的优劣,当损失函数输出最小时,参数W,b会出现最优值。
例子
目的:
想找到一组参数w和b,使得损失函数最小
梯度:
函数对各参数求偏导后的向量。函数梯度下降方向是函数减小方向。
梯度下降法:
沿损失函数梯度下降的方向,寻找损失函数的最小值,得到最优参数的方法。
学习率(learning rate lr):
当学习率设置的过小时,收敛过程将变得十分缓慢,而当学习率设置的过大时,梯度可能会在最小值附近来回震荡,甚至可能无法收敛
反向传播:
从后向前,逐层求损失函数对每层神经元参数的偏导数,迭代更新所有参数。
Tensorflow起步
张量常见定义
Tensorflow中Tensor就是张量:多维数组(列表)
阶:张量的维数
0阶张量:数字
1阶张量:向量
2阶张量:矩阵
n阶张量:n阶数组
数据类型:
tf.int 32 tf.float21 tf.float 64 tf.bool tf.string
如何创建一个Tensor
1.创建一个张量
tf.constant(张量内容,dtype=数据类型(可选))
import tensorflow as tf
a=tf.constant([1,5],dtype=tf.int64)
print(a)
print(a.dtype)
print(a.shape)
2.将numpy的数据类型转换为Tensor 数据类型
tf.convert_to_tensor(数据名,dtype=数据类型(可选))
import tensorflow as tf
import numpy as np
a=np.arange(0,5)
b=tf.convert_to_tensor(a,dtype=tf.int64)
print(a)
print(b)
3.创建全为0的张量:
tf.zeros(维度)
4.创建全为1的张量:
tf.ones(维度)
5.创建全为指定值的张量:
tf.fill(维度,指定值)
a=tf.zeros([2,3])
b=tf.ones(4)
c=tf.fill([2,2],9)
print(a)
print(b)
print(c)
维度记忆法:
一维 直接写个数
二维 用[行,列]
多维 用[n,m,j,k…]
6.生成正态的随机数默认均值为0,标准差为1
tf.random.normal(维度,mean=均值,stddev=标准差)
7.生成截断式正态分布的随机数
tf.random.truncated_normal(维度,mean=均值,stddev=标准差)
在tf.truncated_normal中如果随机生成数据的取值在(μ-2σ,μ+2σ)之外,则重新进行生成,保证了生成值在均值附近。μ为均值,σ为标准差
标准差的计算公式
d =tf.random.normal([2,2],mean=0.5,stddev=1)
print(d)
e=tf.random.truncated_normal([2,2],mean=0.5,stddev=1)
print(e)
8.生成均匀分布随机数[minval,maxval)前必后开
tf.random.uniform(维度,minval=最小值,maxval=最大值)
f=tf.random.uniform([2,2],minval=0,maxval=1)
print(f)
常用函数一
1.强制tensor转换为该数据类型
tf.cast(张量名,dtype=数据类型)
2.计算张量维度上元素的最小值
tf.reduce_min(张量名)
3.计算张量维度上元素的最大值
tf.reduce_max(张量名)
x1=tf.constant([1,2,3],dtype=tf.float(64)
x2=tf.cast(x1,tf.int32)
print(x2)
print(tf.reduce_min(x2),tf.reduce_max(x2))
4.理解axis
在一个二维张量或数组中,可以通过axis等于0或1控制执行维度。axis=0代表跨行(经度,down),而axis=1代表跨列(纬度,across),如果不指定axis,则所有元素参与计算。
5.计算张量沿指定维度的平均值
tf.reduce_mean(张量名,axis=操作轴)
6.计算张量沿着指定维度的和
tf.reduce_sum(张量名,axis=操作轴)
x=tf.constant([[1,2,3],[2,2,3]])
print(x)
print(tf.reduce_mean(x))
print(tf.reduce_sum(x,axis=1))
7. tf.Variable()函数将变量标记为可训练的
被标记的变量会在反向传播中记录梯度信息。神经网络训练中,常用该函数标记待训练参数。
tf.Variable(初始值)
#初始化参数w的代码
w=tf.Variable(tf.random.normal([2,2],mean=0,stddev=1))
8.Tensorflow中的数学计算
8.1四则运算:tf.add,tf.subtract,tf.multiply,tf.divide
只有维度相同的张量才可以做四则运算
a=tf.ones([1,3],dtype=tf.int32)
b=tf.fill([1,3],3)
print(a)
print(b)
print(tf.add(a,b))
print(tf.multiply(a,b))
print(tf.divide(b,a))
8.2平方,开方,次方:tf.square,tf.sqrt,tf.pow
a=tf.fill([1,2],4.0)
print(a)
print(tf.pow(a,3))
print(tf.square(a))
print(tf.sqrt(a))
8.3矩阵乘:tf.matmul
a=tf.ones([3,2])
b=tf.fill([2,3],3.0)
print(tf.matmul(a,b))
9.tf.data.Dataset.from_tensor_slices
切分传入张量的第一维度,生成输入特征/表情对,构建数据集
data=tf.data.Dataset.from_tensor_slices((输入标签,标签))
Numpy和Tensor格式都可用该语句读入数据
features=tf.constant([12,23,10,17])
labels=tf.constant([0,1,1,0])
dataset=tf.data.Dataset.from_tensor_slices((features,labels))
print(dataset)
for element in dataset:
print(element)
常用函数二
1.tf.GradientTape
with结构记录计算过程,gradient求出张量梯度
with tf.GradientTape() as tape:
若干计算过程
grad=tape.grandient(函数,对谁求导)
#
with tf.GradientTape() as tape:
w=tf.Variable(tf.constant(3.0))
loss=tf.pow(w,2)
grad=tape.gradient(loss,w)
print(grad)
2.enumerate
enumerate是python的内建函数,它可遍历每个元素(如列表、元组、字符串),组合为:索引 元素,常在for循环中使用
enumerate(列表名)
seq=['one','two','three']
for i,element in enumerate(seq):
print(i,element)
3.tf.one_hot
独热编码(one-hot encoding):在分类问题中,常用热独码做标签,标记类别,1表示是,0表示非。
tf.one_hot()函数将待转换数据,转换为one-hot形式的数据输出
tf.one_hot(待转换数据,depth=几分类)
classes=3
label=tf.constant([1,0,2])
output=tf.one_hot(labels,depth=classes)
print(output)
4.tf.nn.softmax
tf.nn.softmax(x)使输出符合概率分布
当n分类的n个输出(y0,y1,…yn-1)通过softmax()函数,便可使分布符合概率分布
y=tf.constant([1.01,2.01,-0.66])
y_pro=tf.nn.softmax(y)
print("after softmax ,y_pro is",y_pro)
5.assign_sub
赋值操作,更新参数的值并返回。
调用assign_sub之前,先用tf.Variable定义变量w为可训练(可自更新)
w.assign_sub(w要自减的内容)
w=tf.Variable(4)
#w-=1 ===>w=w-1
w.assign_sub(1)
print(w)
6.tf.argmax
返回张量沿指定维度最大值的索引tf.argmax(张量名,axis=操作轴)
import numpy as py
test=np.array([[1,2,3], [2, 3, 4], [5, 4, 3], [8, 7, 2]])
print(test)
#返回每列最大值索引
print(tf.argmax(test,axis=0))
#返回没行最大值索引
print(tf.argmax(test,axis=1))
鸢尾花数据集
从sklearn包datasets读入数据集,语法为:
from sklearn.datasets import load_iris
#返回iris数据集所有输入特征
x_data=datasets.load_iris().data
#返回iris数据集所有标签
y_data=datasets.load_iris().target
`python
import numpy as py
test=np.array([[1,2,3], [2, 3, 4], [5, 4, 3], [8, 7, 2]])
print(test)
#返回每列最大值索引
print(tf.argmax(test,axis=0))
#返回没行最大值索引
print(tf.argmax(test,axis=1))
-------
### 鸢尾花数据集
从sklearn包datasets读入数据集,语法为:
```python
from sklearn.datasets import load_iris
#返回iris数据集所有输入特征
x_data=datasets.load_iris().data
#返回iris数据集所有标签
y_data=datasets.load_iris().target