TensorFlow学习笔记(2)

常用函数:

tf.where(条件语句,真A,假B)   进行条件判断,若条件判断为真,则输出A,判断为假则输出B。

tf.greater(a,b)   比较a,b的大小,谁大输出谁

np.random.randomstate.rand(维度)   返回一个0-1之间的随机数,括号中表示返回的是几维的

np.vstack(数组1,数组2)   将两个数组按照垂直方向叠加

np.mgrid [起始坐标:终点坐标:步长]   生成一个多维结构,如2D、3D图形。步长可以是 ni或者nj,表示该多维结构按照行或者列进行排列。

.ravel与flatten   二者的功能都是使多维数组变为一维数组。   

ravel(散开,解开),flatten(变平)。两者的区别在于返回拷贝(copy)还是返回视图(view),numpy.flatten()返回一份拷贝,对拷贝所做的修改不会影响(reflects)原始矩阵,而numpy.ravel()返回的是视图(view,也颇有几分C/C++引用reference的意味),会影响(reflects)原始矩阵。

np.c_[数组1,数组2]   将数组1和数组2配对后输出,要求二者的行数相等。

神经网络

复杂度:

1、空间复杂度:层数=隐藏层+输出层      参数=w的个数+b的个数

2、时间复杂度:乘加的运算次数

权重更新表达式:

指数衰减学习率:

可以先用较大的学习率,快速得到最优解,然后逐步减小学习率,使模型在训练后期稳定。

指数衰减学习率=初始学习率*学习率衰减率(当前轮数/多少轮衰减一次)

常见的激活函数:

激活函数:

1、首选relu函数;

2、学习率设置较小

3、输入特征标准化,即输入特征满足以0为均值,1为标准差的正态分布;

4、初始参数中心化,随机生成的参数满足以0为均值,根号下(2/当前层输入特征个数)为标准的分布。

损失函数:

损失函数是一个用来衡量期望值与实际值差值的函数(y与y_)

交叉熵函数常与softmax函数结合,即输出先经过softmax函数(将多个神经元的输出,映射到(0,1)区间内)转化为0-1之间的概率值,再去计算y与y_之间的损失函数。

在模型拟合的过程中,往往会产生:过拟合、正确拟合和欠拟合三种情况。

拟合:

1、欠拟合:拟合效果差,不能有效表征特征

解决办法:增加输入特征、增加网络参数、减少正则化参数

2、正确拟合:符合预期的拟合

3、过拟合:模型缺乏泛化力

解决办法:①数据清洗,减小数据集中的噪声;②增大训练集,模型见到更多数据;③采用正则化;④增大正则化参数

在模型训练中,与欠拟合相比过拟合出现的更为频繁。常用正则化去缓解过拟合:

L1:减少复杂度引起的过拟合      L2:减少噪声引起的过拟合

优化目标:使损失函数最小,损失函数越小,意味着二者的差值越小,即预测值越来越靠近真实值。

优化步骤:

待优化参数W,损失函数loss,学习率Lr,每次迭代一个batch,t表示当前batch迭代的总次数:

1、计算t时刻损失函数关于当前参数的梯度gt=δloss=δloss/δ(Wt)

2、计算t时刻一阶动量Mt和二阶动量Vt

3、计算t时刻下降梯度:ηt=lr*mt/sqrt(Vt)

4、计算t+1时刻参数:

一阶动量:与梯度相关的函数

二阶动量:与梯度的平方相关的函数

常见优化方法:

1、SGD(无动量)

2、SGDM(增加一阶动量)

3、Adagrad(增加二阶动量)

4、RMSprop(增加二阶动量)

5、Adam

补充:比较loss和val_loss(test_loss)的变化

通常回调显示的 loss 有很多种,一个总 loss 是多个子 loss 的加权求和。此处主要讲解最基础的训练情况(只有一个训练 loss,和一个验证 loss)。下文用 loss 代表训练集的损失值,在网络中用于更新网络参数;val_loss 代表验证集的损失值(有时也写成测试集损失test_loss)不对网络参数做修改,只做测试。

一般训练规律:

loss 下降,val_loss 下降:训练网络正常,最理想情况情况。

loss 下降,val_loss 稳定或上升:网络过拟合。解决办法:①数据集没问题:可以向网络“中间深度”的位置添加 Dropout 层;或者逐渐减少网络的深度(靠经验删除部分模块)。②数据集有问题:可将所有数据集混洗重新分配,通常开源数据集不容易出现这种情况。

loss 稳定,val_loss 下降:数据集有严重问题,建议重新选择。一般不会出现这种情况。

loss 快速稳定,val_loss 快速稳定:如果数据集规模不小的情况下,代表学习过程遇到瓶颈,需要减小学习率(自适应动量优化器小范围修改的效果不明显)。其次考虑修改batchsize数量,如果数据集规模很小的话代表训练稳定。

loss 上升,val_loss 上升:可能是网络结构设计问题、训练超参数设置不当、数据集需要清洗等问题。属于训练过程中最差情况,得一个一个排除问题。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值