我有一个神经网络问题,我知道错误函数相对于我的输出的衍生物,但不是目标值(这个问题在这个问题上没有意义)。我当然可以通过将渐变添加到输出然后使用DNNEstimator来创建一个,但这似乎是人为的。
一个简化的例子可能是训练神经网络在笛卡尔空间中定位一个正方形,使得它不与另一个坐标为输入的正方形重叠。在这种情况下,我们可以轻松地计算导数(远离其他正方形的中心),但标签没有任何意义。
Tensorflow的page on Estimators听起来像而不是使用估算器通常是一个坏主意:
您可以创建自定义Estimator来执行任何操作。如果你 希望以某种不寻常的方式连接隐藏层,编写自定义 估计。如果要为模型计算唯一度量标准, 写一个自定义Estimator。基本上,如果你想要一个Estimator 针对您的特定问题进行了优化,编写自定义Estimator。
好的,但是根据tf.estimator.Estimator
的签名,Tensorflow的model_func
类似乎与功能必须附带标签的概念紧密相关:
def my_model_fn(
features, # This is batch_features from input_fn
labels, # This is batch_labels from input_fn
mode, # An instance of tf.estimator.ModeKeys
params): # Additional configuration
但我没有任何标签。在这种情况下,使用自定义Estimator对我来说仍然有意义,还是我最好直接使用较低级别的API?
答案 0 :(得分:1)
您仍然可以使用Estimator API。您只需返回tf.estimator.EstimatorSpec即可。在培训期间,它看起来像这样:
NAME(PK) | AGE | CITY | ... many more here ... |
--------------------------------------------------
aaa | 12 | nyc | ...
bbb | 12 | nyc | ...
ddd | 34 | la | ...
其中trainOp通常是优化步骤的结果(这是您使用误差函数导数的地方)。
您也可以使用较低级别的API,但您将失去Estimator API的所有优势,例如,您可以轻松导出经过培训的模型以进行推理服务。