文章目录
源码: https://github.com/tensorflow/tensorflow/blob/r1.4/tensorflow/contrib/training/python/training/training.py
1.作用
- 简化使用tensorflow进行训练的过程,减少代码
- 训练过程进行高度封装
- 缺点:有点难理解
- 优点:高度集成,理解后很方便使用,可以很快搭建训练训练,不用一层一层写if
包含各种训练模型的例程和辅助功能。此脚本包含用于培训模型的各种功能。这些包括计算梯度、创建一个“train_op”(train_op = 计算loss + 运行反向传播)和一个训练循环函数。训练循环允许用户传入“train_op”并根据用户指定的参数运行优化。
简单来说,我们需要定义一个train_op,这个train_op包含两个部分,如何计算loss和如何进行反向传播,每一步,都会运行train_op里面的内容,进行梯度的计算,和反向传播。所以定义train_op是tf.contrib.training.train的核心
2.使用train的简单的例子
2.1载入数据和创建模型
images, labels = LoadData(...)
predictions = MyModel(images)
2.2定义loss
tf.contrib.losses.log_loss(predictions, labels)total_loss = tf.contrib.losses.get_total_loss()
2.3定义优化器
optimizer=tf.compat.v1.train.MomentumOptimizer(FLAGS.learning_rate,FLAGS.momentum)
2.4创建train_op
train_op = tf.contrib.training.create_train_op(total_loss,
optimizer)
2.5运行训练过程
Run training.tf.contrib.training.train(train_op, my_log_dir)
3.如何定义train_op
根据以上所说,使用train来训练模型的核心就是创建一个train_op,下面我们讲讲如何创建一个train_op
为了使用’ train '函数,我们需要创建一个train_op:
train_op包含三个部分
- (a)计算损失,
- (b)应用梯度更新权重和
- ©返回损失的值。
我们使用tf.contrib.training。create_train_op创建这样一个“train_op”,如下。
train_op = tf.contrib.training.create_train_op(total_loss,
optimizer)
是不是没听懂,没关系,我们举几个例子。
3.1创建一个train_op,对梯度进行裁剪操作
train_op = tf.contrib.training.create_train_op( total_loss, optimizer, transform_grads_fn=clip_gradient_norms_fn(3))
3.2创建train_op并通过提供来自变量的映射来缩放梯度
# Create the train_op and scale the gradients by providing a map from variable
# name (or variable) to a scaling coefficient:
def transform_grads_fn(grads):
gradient_multipliers = {
'conv0/weights': 1.2,
'fc8/weights': 3.4,
}
return tf.contrib.training.multiply_gradients(
grad