Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在tf.估计器检查点中保持不可训练变量?_Python_Tensorflow_Tensorflow Estimator - Fatal编程技术网

Python 如何在tf.估计器检查点中保持不可训练变量?

Python 如何在tf.估计器检查点中保持不可训练变量?,python,tensorflow,tensorflow-estimator,Python,Tensorflow,Tensorflow Estimator,我试图将一个不可训练且初始化为单位矩阵的层作为tensorflow估计器的一部分。直觉是这个密集层在标准训练和随后的微调步骤中通过其输入。问题是我根本不希望在第一轮中更新这些权重,只希望在微调过程中更新 我可以做一些事情使这些权重不可训练,包括在稠密构造函数中使用可训练参数,或者在传递给MomentumOptimizer.compute_gradients()之前过滤掉任何名称中带有稠密的参数 但在任何一种情况下(使稠密层不可训练或只是不将其传递给优化器),tf都会抛出一个错误,表示它找不到与稠

我试图将一个不可训练且初始化为单位矩阵的层作为tensorflow估计器的一部分。直觉是这个密集层在标准训练和随后的微调步骤中通过其输入。问题是我根本不希望在第一轮中更新这些权重,只希望在微调过程中更新

我可以做一些事情使这些权重不可训练,包括在稠密构造函数中使用可训练参数,或者在传递给MomentumOptimizer.compute_gradients()之前过滤掉任何名称中带有稠密的参数

但在任何一种情况下(使稠密层不可训练或只是不将其传递给优化器),tf都会抛出一个错误,表示它找不到与稠密层相关的密钥

我理解,因为在第一次运行时,稠密是不可训练的,所以它不会持久保存在检查点文件中。同样,如果从传递到计算_梯度的过程中过滤掉它,那么同样的问题也会发生

是否有任何方法可以在运行期间仅保留未经训练的变量,即使只有它们的初始化值

NotFoundError(回溯见上文):键密集/内核/动量不 在检查站发现


我将在这里回答我自己的问题,因为这对我来说不是很明显,因为tf文档似乎没有明确说明。如果您想引入一个新的可训练变量,那么在以后的模型中,它需要基本上是一个不同的模型。因此,为了处理现有权重的微调,必须从热启动设置解析新模型中的那些现有权重

因此,训练一个模型,当估计器的模型函数运行时,有条件地不包括微调层。训练现有模型,然后创建另一个单独的模型。从技术上讲,这只是意味着您需要使用一个新的模型目录,但是热启动设置应该指向您事先培训过的模型

在微调运行时,模型函数应该有条件地包括微调层,但它应该恢复上一次运行设置的权重,并使用热启动设置查看上一个模型目录