tensorflow: InvalidArgumentError 同时找到 AUC 分数
tensorflow: InvalidArgumentError while find the AUC score
我有一个标签为 0 和 1 的数据集,这是二元分类问题。尝试使用 tf.keras.metrics.AUC()
作为 model.compile(..
函数中的指标来查找 AUC 分数时出错。
代码:
initializer = tf.keras.initializers.RandomUniform(minval=0., maxval=1.)
model = tf.keras.models.Sequential()
model.add(tf.keras.Input(shape=(2,)))
model.add(tf.keras.layers.Dense(4, activation='tanh', kernel_initializer=initializer))
model.add(tf.keras.layers.Dense(8, activation='tanh', kernel_initializer=initializer))
model.add(tf.keras.layers.Dense(16, activation='tanh', kernel_initializer=initializer))
model.add(tf.keras.layers.Dense(8, activation='tanh', kernel_initializer=initializer))
model.add(tf.keras.layers.Dense(4, activation='tanh', kernel_initializer=initializer))
model.add(tf.keras.layers.Dense(1))
model.compile(loss= tf.keras.losses.BinaryCrossentropy(),
optimizer = tf.optimizers.SGD(momentum=0.9,),
metrics=['accuracy', tf.keras.metrics.AUC()])
model.fit(X, y, validation_data=(X_val, y_val), epochs=10)
如果我从指标中删除 AUC,代码运行正常。
错误:
InvalidArgumentError: assertion failed: [predictions must be >= 0]
[Condition x >= y did not hold element-wise:] [x
(sequential_48/dense_293/BiasAdd:0) = ]
[[2.12408257][2.12408257][-2.12408257]...] [y (Cast_10/x:0) = ] [0]
[[{{node
assert_greater_equal/Assert/AssertGuard/else/_1/assert_greater_equal/Assert/AssertGuard/Assert}}]]
[Op:__inference_train_function_120642]
Function call stack: train_function
如何找到 AUC score/how 以将 AUC 分数设置为编译中的指标?
您在最后一个致密层中缺少激活函数。如果我们默认不提及,它将考虑线性激活,这意味着您可以获得任何值,包括负值。
InvalidArgumentError: assertion failed: [predictions must be >= 0]
[Condition x >= y did not hold element-wise:] [x (sequential_48/dense_293/BiasAdd:0) = ] [[2.12408257][2.12408257][-2.12408257]...]
If you can check above error, it is saying the same (i.e predictions for your model must be >=0), but your model return [[2.12408257][2.12408257][-2.12408257]...] values
.
为避免这种情况,您应该将 sigmoid
激活函数添加到最后一个密集层,如下所示。
initializer = tf.keras.initializers.RandomUniform(minval=0., maxval=1.)
model = tf.keras.models.Sequential()
model.add(tf.keras.Input(shape=(2,)))
model.add(tf.keras.layers.Dense(4, activation='tanh', kernel_initializer=initializer))
model.add(tf.keras.layers.Dense(8, activation='tanh', kernel_initializer=initializer))
model.add(tf.keras.layers.Dense(16, activation='tanh', kernel_initializer=initializer))
model.add(tf.keras.layers.Dense(8, activation='tanh', kernel_initializer=initializer))
model.add(tf.keras.layers.Dense(4, activation='tanh', kernel_initializer=initializer))
model.add(tf.keras.layers.Dense(1, activation='sigmoid'))
model.compile(loss= tf.keras.losses.BinaryCrossentropy(),
optimizer = tf.optimizers.SGD(momentum=0.9,),
metrics=['accuracy', tf.keras.metrics.AUC()])
model.fit(X, y, validation_data=(X_val, y_val), epochs=10)
我有一个标签为 0 和 1 的数据集,这是二元分类问题。尝试使用 tf.keras.metrics.AUC()
作为 model.compile(..
函数中的指标来查找 AUC 分数时出错。
代码:
initializer = tf.keras.initializers.RandomUniform(minval=0., maxval=1.)
model = tf.keras.models.Sequential()
model.add(tf.keras.Input(shape=(2,)))
model.add(tf.keras.layers.Dense(4, activation='tanh', kernel_initializer=initializer))
model.add(tf.keras.layers.Dense(8, activation='tanh', kernel_initializer=initializer))
model.add(tf.keras.layers.Dense(16, activation='tanh', kernel_initializer=initializer))
model.add(tf.keras.layers.Dense(8, activation='tanh', kernel_initializer=initializer))
model.add(tf.keras.layers.Dense(4, activation='tanh', kernel_initializer=initializer))
model.add(tf.keras.layers.Dense(1))
model.compile(loss= tf.keras.losses.BinaryCrossentropy(),
optimizer = tf.optimizers.SGD(momentum=0.9,),
metrics=['accuracy', tf.keras.metrics.AUC()])
model.fit(X, y, validation_data=(X_val, y_val), epochs=10)
如果我从指标中删除 AUC,代码运行正常。
错误:
InvalidArgumentError: assertion failed: [predictions must be >= 0] [Condition x >= y did not hold element-wise:] [x (sequential_48/dense_293/BiasAdd:0) = ] [[2.12408257][2.12408257][-2.12408257]...] [y (Cast_10/x:0) = ] [0]
[[{{node assert_greater_equal/Assert/AssertGuard/else/_1/assert_greater_equal/Assert/AssertGuard/Assert}}]] [Op:__inference_train_function_120642]Function call stack: train_function
如何找到 AUC score/how 以将 AUC 分数设置为编译中的指标?
您在最后一个致密层中缺少激活函数。如果我们默认不提及,它将考虑线性激活,这意味着您可以获得任何值,包括负值。
InvalidArgumentError: assertion failed: [predictions must be >= 0] [Condition x >= y did not hold element-wise:] [x (sequential_48/dense_293/BiasAdd:0) = ] [[2.12408257][2.12408257][-2.12408257]...]
If you can check above error, it is saying the same (i.e predictions for your model must be >=0), but your model return [[2.12408257][2.12408257][-2.12408257]...] values
.
为避免这种情况,您应该将 sigmoid
激活函数添加到最后一个密集层,如下所示。
initializer = tf.keras.initializers.RandomUniform(minval=0., maxval=1.)
model = tf.keras.models.Sequential()
model.add(tf.keras.Input(shape=(2,)))
model.add(tf.keras.layers.Dense(4, activation='tanh', kernel_initializer=initializer))
model.add(tf.keras.layers.Dense(8, activation='tanh', kernel_initializer=initializer))
model.add(tf.keras.layers.Dense(16, activation='tanh', kernel_initializer=initializer))
model.add(tf.keras.layers.Dense(8, activation='tanh', kernel_initializer=initializer))
model.add(tf.keras.layers.Dense(4, activation='tanh', kernel_initializer=initializer))
model.add(tf.keras.layers.Dense(1, activation='sigmoid'))
model.compile(loss= tf.keras.losses.BinaryCrossentropy(),
optimizer = tf.optimizers.SGD(momentum=0.9,),
metrics=['accuracy', tf.keras.metrics.AUC()])
model.fit(X, y, validation_data=(X_val, y_val), epochs=10)