【发布时间】:2018-05-20 10:38:32
【问题描述】:
我想冻结除Inception v3 model 中的前三层之外的层,TensorFlow 中的Python 3 还修改这三层的权重,以便能够重新初始化和仅重新训练前三个网络层。如果在初始模型中无法做到这一点,是否还有其他网络(TensorFlow)可以做到这一点?
【问题讨论】:
标签: python machine-learning tensorflow deep-learning data-science
我想冻结除Inception v3 model 中的前三层之外的层,TensorFlow 中的Python 3 还修改这三层的权重,以便能够重新初始化和仅重新训练前三个网络层。如果在初始模型中无法做到这一点,是否还有其他网络(TensorFlow)可以做到这一点?
【问题讨论】:
标签: python machine-learning tensorflow deep-learning data-science
这可以在任何网络中完成。要在训练期间冻结较低层,最简单的解决方案是为优化器提供要训练的变量列表,不包括来自较低层的变量:
train_vars = tf.get_collection(tf.GraphKeys.TRAINABLE_VARIABLES,
scope="hidden[34]|outputs")
training_op = optimizer.minimize(loss, var_list=train_vars)
第一行获取隐藏层 3 和 4 以及输出层中所有可训练变量的列表。这忽略了隐藏层 1 和 2 中的变量。上面的 sn-p 假设层具有变量范围 hidden1,... hidden4 和 outputs; Inception 模型使用不同的命名:Conv2d_2a_*、Conv2d_2b_*、AvgPool_1a_*、...
【讨论】: