Python 3.x 当损耗依赖于输入并通过自定义损耗层实现时,如何使用tf估计器API为列车运行设置损耗?

Python 3.x 当损耗依赖于输入并通过自定义损耗层实现时,如何使用tf估计器API为列车运行设置损耗?,python-3.x,tensorflow,tensorflow-estimator,tf.keras,Python 3.x,Tensorflow,Tensorflow Estimator,Tf.keras,我正在用tf.estimatorAPI实现一个CNN模型 简而言之,成本/损失函数取决于输入,包含培训期间要更新的变量。我实现了一个具有相同映射的自定义层,用于调用add_loss()并保存可训练的丢失变量 但是,当我试图为EstimatorSpec指定train\u op时(使用AdamOptimizer),我不知道如何检索损失并将其提供给optimizer.minimize() 当我试图实现中提出的多最大高斯似然损失时,问题出现了。 我采用了通用方法作为本文作者在上提供的示例代码,该代码定义

我正在用
tf.estimator
API实现一个CNN模型

简而言之,成本/损失函数取决于输入,包含培训期间要更新的变量。我实现了一个具有相同映射的自定义层,用于调用
add_loss()
并保存可训练的丢失变量

但是,当我试图为
EstimatorSpec
指定
train\u op
时(使用
AdamOptimizer
),我不知道如何检索损失并将其提供给
optimizer.minimize()

当我试图实现中提出的多最大高斯似然损失时,问题出现了。 我采用了通用方法作为本文作者在上提供的示例代码,该代码定义了一个用于丢失的自定义层

不幸的是,前面提到的代码使用了
Keras
,而我正试图用
tensorflow
测试它,更具体地说,
tf.estimator
。在Keras中,当调用model.compile()时,我们可以将
None
作为
loss
参数输入。但是我想我们不能在tensorflow中将
None
传递给优化器

def model_fn(features, labels, mode, params):
    ...
    xs = ts.reshape(xs, shape=[-1, ...])
    nn_params = dict(...)
    ys_out = cnn_blabla(x, mode, ** nn_params)
    ...

    loss=???

    ...
    if mode == tf.estimator.ModeKeys.TRAIN:
        optimizer = tf.train.AdamOptimmizer(params['LEARNING_RATE'])
        train_op = optimizer.minimize(loss)
    ...
    return tf.estimator.EstimatorSpec(...)


def cnn_blabla(x, mode, n_outputs, ...):
    with tf.variable_scope("blabla", reuse=tf.AUTO_REUSE):
        layer_out_1 = conv(x, ..., activation=..., name=...)
        layer_out_2 = conv(layer_out_1, ..., activation=..., name=...)
        ...
        layer_out_v = conv(layer_out_u, ..., activation=..., name=...)
        out = CustomLossLayer(n_outputs=n_outputs, name="loss_blabla")(layer_out_v)
    return out


def conv(...):
    ...
我希望通过tensorflow中的
tf.estimator
,用自定义损失训练模型