深度学习模型训练痛点及解决方法

来源:https://www.cnblogs.com/carsonzhu/p/9547852.html

1 模型训练基本步骤

进入了AI领域,学习了手写字识别等几个demo后,就会发现深度学习模型训练是十分关键和有挑战性的。选定了网络结构后,深度学习训练过程基本大同小异,一般分为如下几个步骤:

  1. 定义算法公式,也就是神经网络的前向算法。我们一般使用现成的网络,如InceptionV4,mobilenet等。
  2. 定义loss,选择优化器,来让loss最小
    3.对数据进行迭代训练,使loss到达最小
    4.在测试集或者验证集上对准确率进行评估

下面我们来看深度学习模型训练中遇到的难点及如何解决。

2 模型训练难点及解决方法

2.1 收敛速度慢

深度学习其实就是一个反复调整模型参数的过程,得力于GPU等硬件性能的提升,使得复杂的深度学习训练成为了可能。收敛速度过慢,训练时间过长,一方面使得相同总训练时间内的迭代次数变少,从而影响准确率,另一方面使得训练次数变少,从而减少了尝试不同超参数的机会。因此,加快收敛速度是一大痛点。那么怎么解决它呢?

2.1.1 设置合理的初始化权重w和偏置b

深度学习通过前向计算和反向传播,不断调整参数,来提取最优特征,以达到预测的目的。其中调整的参数就是weight和bias,简写为w和b。根据奥卡姆剃刀法则,模型越简单越好,我们以线性函数这种最简单的表达式来提取特征,也就是:

​ f(x) = w * x + b

深度学习训练时几乎所有的工作量都是来求解神经网络中的w和b。模型训练本质上就是调整w和b的过程,如果将他们初始化为一个合理的值,那么就能够加快收敛速度。怎么初始化w和b呢?

我们一般使用截断的正态分布(也叫高斯分布)来初始化w。如下:

#权重weight,标准差0.1。truncated_normal截断的正态分布来初始化weight。权重初始化很有讲究的,会决定学习的快慢
def weight_variable(shape, vname):
  initial = tf.truncated_normal(shape, stddev=0.1, name=vname)
  return tf.Variable(initial)

tf.truncated_normal定义如下

tf.truncated_normal(
    shape,            # 正态分布输出数据结构,1维tensor
    mean=0.0,        # 平均值,默认为0.我们一般取默认值0
    stddev=1.0,        # 标准差
    dtype=tf.float32,        # 输出数据类型
    seed=None,        # 随机分布都会有一个seed来决定分布
    name=None
)

什么叫截断的正态分布呢,看下图就明白了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值