参考视频:b站北大的Tensorflow课程,TF 2 的使用
神经网络:把采集的大量数据喂入搭建的网络,优化参数得到模型,模型输入新的特征,输出识别结果。
y=x*w+b
损失函数:可以用均方误差来表征
梯度下降法:沿着损失函数下降的方向,寻找损失函数的最小值,得到最优参数的方法
w(t+1)=w(t)-lr*dloss/dw(t)
b(t+1)=b(t)-lr*dloss/db(t)
学习率:梯度下降的步子大小 。过小:收敛太慢;过大:梯度在最小值附近震荡,甚至无法收敛
反向传播:从后向前,逐层求损失函数对每层神经元的偏导数,迭代更新所有参数
张量(Tensor):多维数组(列表)。张量可以表示0-n阶数组(列表)
数据类型:
tf.int,tf.float:tf.int32、tf.float32
tf.bool: tf.constant([True,False])
tf.string:tf.constant(["hello"])
创建张量:
1)tf.constant(张量内容,dtype=数据类型)
2)将numpy数据类型转换为Tensor类型
tf.convert_to_tensor(数据名,dtype=数据类型)
3)特殊张量的创建
tf.zeros(维度)
tf.ones(维度)
tf.fill(维度,指定值)
维度写法:一维(直接写数字);二维:[行,列];多维:[n,m,j,k,...]
生成正态分布随机数,默认均值为0,方差为1
tf.random.normal(维度,mean=均值,stddev=标准差)
截断式正态分布随机数
tf.random.truncared_normal(维度,mean=均值,stddev=标准差)
生成均匀分布随机数[min,max]
tf.random.uniform(维度,minval=最小值,maxval=最大值)
一些常用函数
强制tensor转换为该类型:tf.cast(张量名,dtype=类型)
计算张量维度上元素的最大/最小值:tf.reduce_max(张量名)/tf.reduce_min(张量名)
理解axis:
axis=0,操作列,第0维度
axis=1,操作行,第一维度
若不指定axis,则所有元素均参与运算
计算张量沿着指定维度的均值:tf.reduce_mean(张量,axis=操作轴)
计算张量沿着指定维度的和:tf.reduce_sum(张量,axis=操作轴)
tf.Variable()
将变量标记为可训练,被标记的变量会在反向传播中记录梯度信息。神经网络训练中,常用该函数标记待训练参数
tf.Variable(初始值)
Tensorflow中的四则运算
tf.add(张量1,张量2)
tf.substract(张量1,张量2)
tf.multiply(张量1,张量2)
tf.divide(张量1,张量2)
只有维度相同的元素才能做四则运算
平方、次方、开方:tf.square(张量名),tf.pow(张量名,次数),tf.sqrt(张量名)
矩阵乘:tf.matmul(矩阵1,矩阵2)
tf.data.Dataset.from_tensor_slices
切分传入张量的第一维度,生成输入特征/标签对,构建数据集
data=tf.data.Dataset.from_tensor_slices((输入特征,标签))
tf.GradientTape
with结构记录计算过程,gradient求出张量梯度
with tf.GradientTape() as tape:
若干计算过程
grad=tape.gradient(函数,对谁求导)
enumerate是python的内嵌函数,可遍历每个元素,组合为索引:元素,常在for循环使用
enumerate(列表名)
tf.one_hot
独热编码,在分类问题中,用独热编码做标签,标记为1是,0非。
在多分类问题中经常使用
tf.one_hot(待转换数据,depth=分几类)
tf.nn.softmax
tf.nn,softmax(x)--使输出符合概率分布
assign_sub
赋值操作,更新参数值并返回
调用assign_sub前,先用tf.Variable定义变量w作为可训练
w.assign_sub(w要自减的内容)
tf.argmax
返回张量沿指定维度的最大值索引
tf.argmax(张量名,axis=操作轴)