![ccad02ae19790467b78bcbfbbec3e7dc.png](https://img-blog.csdnimg.cn/img_convert/ccad02ae19790467b78bcbfbbec3e7dc.png)
1. 前言
李宏毅说过,将来会有一个新兴工作类型:AI训练师。因为通过深度学习神经网络获得预测模型涉及如下两个经验性的过程需要人类的参与。
1) 神经网络模型的选择;
2)模型训练过程中参数的设定。
就目前我所了解到的,最终训练所得模型性能的好坏涉及到下面4个方面:
1) 数据的预处理和组织;
2) 神经网络模型的选择和构建;
3) 损失函数和优化函数的选择;
4) 涉及上述3个因素的 参数的设定。
本文,我主要罗列一些第3,4方面的学习心得,如下文。1,2两点在代码注释中有所涉及。
此外,推荐:
1)AI副教授李宏毅课程;
2)两个关于调参的知乎回答,1,2
2. 模型训练的两个关键函数和它们的参数
神经网络训练模型的方法是迭代,目标是得到最优模型参数( ,b)。模型参数的好坏(即,模型的好坏)用损失函数(Loss)评估。神经网络的起始参数w是随机给定的,每次迭代就是用拟定更优的参数w计算损失函数,拟定的更优w由优化函数(optimizer)求导计算得到。这个训练过程涉及到2个参数(学习率 ;迭代次数n),其基本过程概括如下:
1) 首先随机生成初始模型参数( );算法代入设定好的学习率 ,和迭代次数n;
2) 由 损失函数(Loss )获得Loss ( );
3) 计算导数 / . 由优化函数(optimizer )得到下一次迭代的优化参数 = ( − / );
4) 不断迭代直至迭代次数n。
整个过程其实由损失函数和优化函数驱动。因此,除了参数的选择影响模型性能,这2个函数的选择也是一个核心因素。
1) 损失函数Loss,示例如下(采用crossentropy函数):
#这里损失函数采用了crossentropy函数
loss = tf.keras.losses.sparse_categorical_crossentropy(y_true=labels, y_pred=labels_pred)
2) 优化函数optimizer示例1如下(优化过程):
#第1步求导grads= /
grads = tape.gradient(loss, model.trainable_variables)
#第2步得到下一次迭代的优化参数w
optimizer.apply_gradients(grads_and_vars=zip(grads, model.trainable_variables))
示例2如下(采用Adam优化函数):
#这里优化函数采用封装好的Adam方法
optimizer=tf.keras.optimizers.Adam(learning_rate),
3. 代码和详细注释
3.1. 自定义模型
# -*- coding: