tensorflow - 如何在 Tensorflow 对象检测 API 中初始化卷积层的权重?
问题描述
我按照本教程实现了 TensorFlow 对象检测 API。
首选方法是使用预训练模型。
但在某些情况下,我们需要从头开始训练。
为此,我们只需将配置文件中的两行注释为
#fine_tune_checkpoint: "object_detection/data/mobilenet_v1_1.0_224/mobilenet_v1_1.0_224.ckpt"
#from_detection_checkpoint: true
如果我想用 Xavier 权重初始化来初始化权重,我该怎么做?
解决方案
正如您在配置 protobuf 定义中看到的,您可以使用 3 个初始化程序:
- TruncatedNormalInitializer truncated_normal_initializer
- VarianceScalingInitializer variance_scaling_initializer
- RandomNormalInitializer random_normal_initializer
VarianceScalingInitializer 是您正在寻找的。它是通用初始化程序,您基本上可以通过设置将其转换为 Xavier 初始化程序factor=1.0, mode='FAN_AVG'
,如文档中所述。
因此,通过将初始化程序设置为
initializer {
variance_scaling_initializer {
factor: 1.0
uniform: true
mode: FAN_AVG
}
}
在您的配置中,您将获得 Xavier 初始化程序。
而且,即使您需要对新数据进行训练,也请考虑使用预训练网络作为初始化而不是随机初始化。有关更多详细信息,请参阅这篇文章。
推荐阅读
- c++ - 修复分段错误
- django - 如何从变量中动态调用 Django 模板标签
- mysql - 对多列主键使用 IN
- regex - 如何在正则表达式中排除特定的uri
- android - 使用包管理器禁用包与禁用活动之间的区别
- java - 我怎么知道是什么引发了异常?
- go - AM2320 传感器:CRC 不匹配,来自传感器的 CRC(0)
- r - In R distance between two sentence: Word-level comparison by minimum edit distance
- java - 按双精度和字符串排序arraylist
- android - Room DB - 支持自定义排序规则(ICU 库)