TF-Slim
文章来源:https://github.com/tensorflow/tensorflow/tree/master/tensorflow/contrib/slim
1-
允许用户通过消除样板代码来更紧凑地定义模型。这是通过使用参数范围和许多高级层和变量来实现的。这些工具提高了可读性和可维护性,降低了复制和粘贴超参数值的错误发生的可能性,并简化了超参数调整。
2-
通过提供常用的正则化器使开发模型变得简单。
3-
已经开发了几种广泛使用的计算机视觉模型(例如,VGG,AlexNet),并且可供用户使用。这些可以用作黑盒子,或者可以以各种方式扩展,例如,通过向不同的内层添加“多个头”。
4-
Slim可以轻松扩展复杂模型,并通过使用预先存在的模型检查点来热启动训练算法。
2-定义模型
结合variables, layers and scopes,可以使用TF-Slim简洁地定义模型。这些元素中的每一个都在下面定义。
Variable
在原tensorflow中创建变量需要预定义值或初始化机制(例如,从高斯随机采样)。此外,如果需要在特定设备(如GPU)上创建变量,则必须明确规范。为了减轻变量创建所需的代码,TF-Slim在variables.py中提供了一组瘦包装函数,允许调用者轻松定义变量。
例如,要创建权重变量,使用截断的正态分布对其进行初始化,使用l2_loss对其进行规范化并将其放在CPU上,只需要声明以下内容:
请注意,在TensorFlow中,有两种类型的变量:常规变量和本地(瞬态)变量。绝大多数变量都是常规变量:一旦创建,就可以使用保护程序将它们保存到磁盘。局部变量是仅在会话期间存在且不保存到磁盘的变量。
TF-Slim通过定义模型变量进一步区分变量,模型变量是表示模型参数的变量。模型变量在学习期间被训练或微调,并在评估或推理期间从checkpoint加载。示例包括slim.fully_connected或slim.conv2d层创建的变量。非模型变量是在学习或评估期间使用的所有其他变量,但不是实际执行推理所必需的。例如,global_step是在学习和评估期间使用的变量,但它实际上不是模型的一部分。同样,移动平均变量可能反映模型变量,但移动平均值本身不是模型变量。
这个怎么用?当您通过TF-Slim的图层创建模型变量或直接通过slim.model_variable函数创建模型变量时,TF-Slim会将变量添加到tf.GraphKeys.MODEL_VARIABLES集合中。如果您有自己的自定义图层或变量创建例程但仍希望TF-Slim管理或了解您的模型变量,该怎么办? TF-Slim提供了一个方便的功能,用于将模型变量添加到其集合中:
Layer: