gpt4 book ai didi

optimization - Tensorflow 加载预训练模型使用不同的优化器

转载 作者:行者123 更新时间:2023-12-03 16:13:47 25 4
gpt4 key购买 nike

我想加载一个预训练模型(由 AdadeltaOptimizer 优化)并继续使用 SGD(GradientDescentOptimizer)进行训练。模型保存和加载 tensorlayer API :

保存模型:

import tensorlayer as tl
tl.files.save_npz(network.all_params,
name=model_dir + "model-%d.npz" % global_step)

负载模型:
load_params = tl.files.load_npz(path=resume_dir + '/', name=model_name)
tl.files.assign_params(sess, load_params, network)

如果我继续使用 adadelta 进行训练,训练损失(交叉熵)看起来很正常(从接近的值开始作为加载的模型)。但是,如果我将优化器更改为 SGD,则训练损失将与新初始化的模型一样大。

我看了一下 model-xxx.npz文件来自 tl.files.save_npz .它只将所有模型参数保存为 ndarray。我不确定这里是如何涉及优化器或学习率的。

最佳答案

您可能必须将张量导入到一个变量中,即 之前输入您的 Adam 优化器的损失函数/交叉熵 .现在,只需通过您的 SGD 优化器提供它。

saver = tf.train.import_meta_graph('filename.meta')
saver.restore(sess,tf.train.latest_checkpoint('./'))
graph = tf.get_default_graph()
cross_entropy = graph.get_tensor_by_name("entropy:0") #Tensor to import

optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(cross_entropy)

在这种情况下,我在训练我的预训练模型之前标记了交叉熵张量,名称为 entropy , 像这样
tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels=y_, logits=y_conv), name = 'entropy')

如果您无法更改预训练模型,您可以从 graph 获取模型中的张量列表(导入后)。并推断出您需要哪个张量。我没有使用 Tensorlayer 的经验,所以本指南是为了提供更多的理解。你可以看看 Tensorlayer-Layers ,他们应该解释如何获得你的张量。由于 Tensorlayer 建立在 Tensorflow 之上,因此大部分功能应该仍然可用。

关于optimization - Tensorflow 加载预训练模型使用不同的优化器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44710772/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com