tensorflow - How can I use training data into my custom metric? - Stack Overflow

admin2025-04-30  1

I can't pass training data into my custom metric

I can't understand, how can I use input_prices into my custom metric?

Metric:

def metric_overprice(input_prices):
    def overpricing(y_true, y_pred):
        y_pred = tf.round(y_pred)

        pred_value = tf.reduce_sum(y_pred * input_prices, axis=1)
        true_value = tf.reduce_sum(y_true * input_prices, axis=1)
        
        return tf.reduce_mean(pred_value - true_value)

    return overpricing

Passing the symbolic tensor into the metric_overprice:

def supervised_continues_knapsack(item_count=5):
    input_weights = Input((item_count,))
    input_prices = Input((item_count,))
    input_capacity = Input((1,))
    
    inputs_concat = Concatenate()([input_weights, input_prices, input_capacity])
    picks = Dense(item_count, use_bias=False, activation="sigmoid")(inputs_concat)
    model = Model(inputs=[input_weights, input_prices, input_capacity], outputs=[picks])
    modelpile("sgd",
                  binary_crossentropy,
                  metrics=[binary_accuracy, metric_overprice(input_prices), metric_pick_count()])
    return model

I have the error message:

ValueError: Tried to convert 'input' to a tensor and failed. Error: A KerasTensor cannot be used as input to a TensorFlow function. A KerasTensor is a symbolic placeholder for a shape and dtype, used when constructing Keras Functional models or Keras Functions. You can only use it as input to a Keras layer or a Keras operation (from the namespaces keras.layers and keras.operations). You are likely doing something like:

x = Input(...)
...
tf_fn(x)  # Invalid.

What you should do instead is wrap tf_fn in a layer:

class MyLayer(Layer):
    def call(self, x):
        return tf_fn(x)

x = MyLayer()(x)

How can I do that correctly?

转载请注明原文地址:http://anycun.com/QandA/1746022278a91467.html