python - TensorFlow:将来自一个模型的预测整合到新模型的训练中的最简单方法是什么?
问题描述
tf.estimator
在训练另一个模型 B 期间,使用训练好的模型 A 的最简单方法是什么?
模型 A 中的权重是固定的。在模型 B 中,我想获取一些输入,计算,将这些结果输入模型 A,然后对输出进行更多计算。
一个简单的例子:
A型回归tf.matmul(input,weights)
在 ModelB 中,我想做以下事情:
x1 = tf.matmul(new_inputs,new_weights1)
x2 = modelA(x1) # with fixed weights
return tf.matmul(x2,new_weights2)
但是对于更复杂的模型 A 和 B,每个模型都被训练为 a tf.estimator
(尽管如果有另一个简单的解决方案,我很高兴不使用估计器——我使用它们是因为我想使用 ML Engine)。
这个问题是相关的,但建议的解决方案不适用于训练模型 B,因为 tf.py_func 的梯度是 [None]。我尝试为 tf.py_func 注册一个渐变,但这失败了
不支持的对象类型张量
我也尝试tf.import_graph_def
过模型 A,但这似乎加载了预训练图,而不是实际权重。
解决方案
对于模型可组合性,Keras 工作得更好。您可以将 Keras 模型转换为估算器:
所以你仍然可以在 ML Engine 上进行训练。
使用 Keras,只需从检查点加载中间层的权重和偏差,并使该层不可训练。看:
推荐阅读
- ios - 如何为用户设置更改密码按钮?
- javascript - 重复异步函数直到为真
- javascript - 如何重写这个 batch.delete 函数来为实时数据库工作?
- c# - XmlSerializer:反序列化递归对象图
- angular - 动画在 Angular 项目中不起作用
- spring - 如何使用 Spring Framework 实现多点模式
- xamarin.forms - 无法在 iOS 上的 Xamarin UITest 中使用 ScrollDownTo() 向下滚动到 ScrollView 中不可见的控件
- node.js - 出现“无法在模块外使用 import 语句”错误并且不想升级 Node
- parsing - 解析类 lisp 语言中“Lex 组”的概念
- html - Flexbox flex 属性似乎只适用于 Firefox,不适用于 Chrome 或 Edge