【神经网络】4. 搭建神经网络中常用概念和函数

本文将对神经网络中常用的一些概念以及函数进行解释,如张量、神经网络复杂度\学习率激活函数损失函数过拟合优化器等。

1. 张量是什么?

张量(Tensor):多维数组(列表)

阶:张量的维数

0阶张量叫做标量,1阶张量叫做向量,2阶张量叫做矩阵,...

张量可以表示0阶到n阶的数组(列表),判断张量是几阶,主要看方括号有几个

Tensorflow的数据类型:tf.int,tf.float,tf.bool,tf.string等

如何创建一个张量(Tensor)?

tf.constant(张量内容,dtype=数据类型(可选))

例如:a=tf.constant([1,5],dtype=tf.int64)  创建一个整数型的一阶张量[1,5]

tf.zeros(维度):创建全为0的张量

tf.ones(维度):创建全为1的张量

tf.fill(维度,指定值):创建全为指定值的张量

维度:1维:直接写个数;2维:用[行,列];多维:用[n,m,k...]

tf.random.normal(维度,mean=均值,stddev=标准差):生成正态分布的随机数,默认均值为0,标准差为1

tf.random.truncated_normal(维度,mean=均值,stddev=标准差):生成截断式正态分布的随机数,在\mu \pm 2\sigma之内

tf.random.uniform(维度,minval=最小值,maxval=最大值):生成均匀分布随机数 [min,max)

如何将numpy数据格式转换为Tensor数据类型?

tf.convert_to_tensor(数据名,dtype=数据类型(可选))

例如:a=np.arange(0,5)
           b=tf.convert_to_tensor(a,dtype=tf.int64)

2. 神经网路(NN)复杂度

NN复杂度:多用NN层数和NN参数的个数表示

3. 学习率

参数更新公式里 lr学习率(0~1之间),表示参数每次更新的幅度。

lr 设定过小时,参数更新过慢;设定过大时,参数更新不收敛

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

例如:

4. 激活函数

一个两层神经网络的传播过程可以表示为:H=X*W1+b1;Y=H*W2+b2。一系列线性方程的运算最终都可以用一个线性方程表示。也就是说,上述两个式子联立后可以用一个线性方程表达。对于两次神经网络是这样,就算网络深度加到100层,也依然是这样。这样的话神经网络就失去了意义。因此引入了激活函数。

激活函数非线性特性引入到神经网络中,对于神经网络模型去学习、理解非常复杂和非线性的函数来说具有十分重要的作用。

常用的激活函数有三种,分别是阶跃函数、Sigmoid、Tanh、ReLU、Leaky Relu等

一般来说首选:

  • relu激活函数;
  • 学习率设置较小值;
  • 输入特征标准化,即让输入特征满足以0为均值,1为标准差的正态分布;
  • 初始参数中心化,即让随机生成的参数满足以0为均值,根号(2/当前层输入特征个数)为标准差的正态分布。

5. 损失函数

损失函数(loss):预测值(y)与一直答案(y_)的差距

(1)损失函数常用均方误差

(2)自定义损失函数

  • 当y-y_(y>y_)与y_-y(y<y_)来带的损失程度不同时,可采用自定义损失函数
  • 可以设定PROFIT与COST为不同值来反映不同损失程度

(3)交叉熵损失函数CE(Cross Entropy)

  • 表征两个概率分布之间的距离
  • 交叉熵越大表示两个概率分布越远,反之则越近

注:在tensorflow中给出了可以同时计算概率分布softmax和交叉熵的函数:

tf.nn.softmax_cross_entropy_with_logits(y_,y)

6. 过拟合

欠拟合:模型不能有效拟合数据集,对现有数据集学习的不够彻底。解决方法:

  • 增加输入特征项
  • 增加网络参数
  • 减少正则化参数

过拟合:模型对当前数据拟合太好了,对新数据难以做出正确的判断,模型缺乏泛化力。解决方法:

  • 数据清洗
  • 增大训练集
  • 采用正则化
  • 增大正则化参数

正则化缓解过拟合:正则化在损失函数中引入模型复杂度指标,利用给W加权值,弱化了训练数据的噪声(一般不正则化b),有两种正则化方法:L1和L2

  • L1正则化大概率会使很多参数变为零,因此该方法可通过稀疏参数,即减少参数的数量,降低复杂度。
  • L2正则化会使参数很接近零但不为零,因此该方法可通过减小参数值的大小降低复杂度。

7. 优化器

待优化:参数w,损失函数loss,学习率lr,每次迭代一个batch

更新参数分为4步完成:(t表示当前batch迭代的总次数)

常用的优化器有:梯度下降法(SGD)、SGDM、Adagrad、RMSProp、Adam

梯度下降法(SGD):

一阶和二阶动量设定:

更新公式:

SGDM:在SGD基础上增加一阶动量

Adagrad:在SGD基础上增加二阶动量

RMSProp:SGD基础上增加二阶动量

Adam:同时结合SGDM一阶动量和RMSProp二阶动量

以上这些公式愿意推导的自己可以试试

以下是用这些求解器在鸢尾花问题的代码上,改动了训练部分,参数更新处加入了优化器,统计了五种优化器下的loss和acc以及所有花费时间:

学习来源:人工智能实践:Tensorflow笔记

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蓝色蛋黄包

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值