训练过程中的张量流恒定层

2024-04-25 21:21:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个小神经网络tf.层公司名称:

# The neural network 
input = tf.placeholder(dtype=tf.float32, shape=(None,5,5,1), name="input")
conv_layer_1 = tf.layers.conv2d(input, 3,        (1,1), activation=tf.nn.leaky_relu, name="conv_1")
conv_layer_2 = tf.layers.conv2d(conv_layer_1, 3, (1,1), activation=tf.nn.leaky_relu, name="conv_2")
conv_layer_3 = tf.layers.conv2d(conv_layer_2, 1, (1,1), activation=tf.nn.leaky_relu, name="conv_3")


# Trainingsstuff
prediction = tf.placeholder(dtype= tf.float32, shape = (None, 5,5,1))
loss = tf.losses.mean_squared_error(conv_layer_3, prediction)
train_step = tf.train.AdamOptimizer(learning_rate=0.001).minimize(loss)

我想训练这个网络。几步之后,我需要将第2层转换为常量。有没有办法将conv_layer_2设置为常量?在


编辑:这个问题不够准确。在


Tags: namelayerinputlayerstfnnactivationplaceholder
1条回答
网友
1楼 · 发布于 2024-04-25 21:21:20

更新

所以你需要的是训练所有的变量一段时间,然后有一个层要固定。不幸的是,要做到这一点并不简单,因为当您定义一个优化操作时,它本质上与它更新的变量关联。但你可以做以下事情:

# The neural network 
input = tf.placeholder(dtype=tf.float32, shape=(None,5,5,1), name="input")
conv_layer_1 = tf.layers.conv2d(input, 3,        (1,1), activation=tf.nn.leaky_relu, name="conv_1")
conv_layer_2 = tf.layers.conv2d(conv_layer_1, 3, (1,1), activation=tf.nn.leaky_relu, name="conv_2")
conv_layer_3 = tf.layers.conv2d(conv_layer_2, 1, (1,1), activation=tf.nn.leaky_relu, name="conv_3")

# Training stuff
prediction = tf.placeholder(dtype= tf.float32, shape = (None, 5,5,1))
loss = tf.losses.mean_squared_error(conv_layer_3, prediction)
optimizer = tf.train.AdamOptimizer(learning_rate=0.001)
train_step_all = optimizer.minimize(loss)
# Now you remove the weights of conv_layer_2 from the trainable variables
trainable_vars = tf.get_collection_ref(GraphKeys.TRAINABLE_VARIABLES)
for var in conv_layer_2.variables:
    try:
        trainable_vars.remove(var)
    except ValueError: pass
# This op will train only the remaining layers
train_step_some = optimizer.minimize(loss)

然后,您需要设计逻辑以根据需要使用train_step_all或{}。另一种方法是将一个var_list参数传递给minimize方法,其中包含在每种情况下要更新的所有变量(您也可以在构建图形时使用自定义图形集合保存它们)。在


旧答案(供参考)

如果您查看the docs,您将看到有一个trainable参数,您可以将其设置为False,以防止在训练期间更新层权重(更具体地说,默认情况下,相关联的变量不会添加到优化器使用的可训练变量的标准集合中)。请注意,除非手动或从检查点加载某些特定的值,否则这些值将在初始化时给定。在

相关问题 更多 >