断言失败:预测必须> = 0,条件x> = y不按元素进行

时间:2020-07-30 09:46:36

标签: python-3.x tensorflow2.0 multiclass-classification

我正在运行一个多类模型(总共40个类),共2000个时期。该模型可以正常运行直到828个时代,但在829个时代,它给了我一个InvalidArgumentError(请参见下面的屏幕截图)

enter image description here

下面是我用来构建模型的代码。

n_cats = 40 
input_bow = tf.keras.Input(shape=(40), name="bow")
hidden_1 = tf.keras.layers.Dense(200, activation="relu")(input_bow)

hidden_2 = tf.keras.layers.Dense(100, activation="relu")(hidden_1)

hidden_3 = tf.keras.layers.Dense(80, activation="relu")(hidden_2)

hidden_4 = tf.keras.layers.Dense(70, activation="relu")(hidden_3)

output = tf.keras.layers.Dense(n_cats, activation="sigmoid")(hidden_4)

model = tf.keras.Model(inputs=[input_bow], outputs=output)

METRICS = [
    tf.keras.metrics.Accuracy(name="Accuracy"),
    tf.keras.metrics.Precision(name="precision"),
    tf.keras.metrics.Recall(name="recall"),
    tf.keras.metrics.AUC(name="auc"),
    tf.keras.metrics.BinaryAccuracy(name="binaryAcc")
]

checkpoint_cb = tf.keras.callbacks.ModelCheckpoint(
    "my_keras_model.h5", save_best_only=True)
lr_schedule = tf.keras.optimizers.schedules.ExponentialDecay(initial_learning_rate=1e-2,
                                                             decay_steps=10000,
                                                             decay_rate=0.9)


adam_optimizer = tf.keras.optimizers.Adam(learning_rate=lr_schedule)
model.compile(loss="categorical_crossentropy",
              optimizer="adam", metrics=METRICS)

training_history = model.fit(
    (bow_train),
    indus_cat_train,
    epochs=2000,
    batch_size=128,
    callbacks=[checkpoint_cb],
    validation_data=(bow_test, indus_cat_test))

请帮助我了解TensorFlow的这种行为。是什么导致此错误?我已经读过thisthis,但就我而言,这些似乎并不是正确的解释。

1 个答案:

答案 0 :(得分:2)

我认为此错误是由于设置了AUC度量标准引起的。(请参见https://www.tensorflow.org/api_docs/python/tf/keras/metrics/AUC)。预测应该是所有非负值,而不是[-nan,-nan,...]模型输出。您可以尝试使用http://deeplearning.net/software/theano/tutorial/nan_tutorial.html中的某些内容来处理NAN。而且,如果您想快速解决此错误,可以直接从列表中删除AUC指标。