我尝试将AlexNet的某些层冻结为self.FROZEN_LAYER=['conv2', 'conv3']
。
这是代码段:
for op_name in weights_dict:
# Check if layer should be trained from scratch
if op_name not in self.SKIP_LAYER:
with tf.variable_scope(op_name, reuse=True):
# Assign weights/biases to their corresponding tf variable
for data in weights_dict[op_name]:
if len(data.shape) == 1:
var = tf.get_variable('biases',
trainable=[True if op_name not in self.FROZEN_LAYER else False][
0]) # todo: trainable
session.run(var.assign(data))
# Weights
else:
var = tf.get_variable('weights',
trainable=[True if op_name not in self.FROZEN_LAYER else False][0])
session.run(var.assign(data))
但是,当我在tf.get_variable()
函数(调试器中的op_name: 'conv2'
或'conv3'
)中进行调试时,trainable
参数不能设置为False
。有人知道问题出在哪里吗?
答案 0 :(得分:0)
Is it possible to make a trainable variable not trainable?中也出现了相同的问题。而在本期中提出的第一个答案就解决了我的问题。