tf.keras.metrics.TruePositives() 在作为度量传递给 model.compile() 时在 model.fit() 中返回错误值
tf.keras.metrics.TruePositives() returning wrong value in model.fit() when passed as metric to model.compile()
当我将 one-hot 编码标签作为训练和验证数据传递给 tensorflow keras 的 model.fit()
函数时,指标 tf.keras.metrics.TruePositives()
returns 错误值。
我是 运行 Tensorflow 2.0.
例如,如果这是我的代码:
model.compile(optimizer, 'binary_crossentropy',
['accuracy', tf.keras.metrics.TruePositives()])
history = model.fit(train_data, train_labels_binary, batch_size=32, epochs=30,
validation_data=(val_data, val_labels_binary),
callbacks=[early_stopping])
train_labels_binary
是这样的:array([[1, 0], [1, 0], [0, 1]])
结果 y_pred
是 array([[1, 0], [1, 0], [0, 1]])
那么 tf.keras.metrics.TruePositives()
应该 return 1,但是 returns 3.
任何帮助将不胜感激!!
好的,我做了更多的实验,当输入不是 1-hot 编码并且只有 1 个输出神经元时,它是固定的。因此,如果我们更改以下两行,所有指标 运行 都是正确的:
这个:train_labels = np.eye(2)[np.random.randint(0, 2, size=(10, 1)).reshape(-1)]
收件人:train_labels = np.random.randint(0, 2, size=(10, 1))
和
这个:model.add(layers.Dense(units=2, activation='sigmoid'))
收件人:model.add(layers.Dense(units=1, activation='sigmoid'))
当我将 one-hot 编码标签作为训练和验证数据传递给 tensorflow keras 的 model.fit()
函数时,指标 tf.keras.metrics.TruePositives()
returns 错误值。
我是 运行 Tensorflow 2.0.
例如,如果这是我的代码:
model.compile(optimizer, 'binary_crossentropy',
['accuracy', tf.keras.metrics.TruePositives()])
history = model.fit(train_data, train_labels_binary, batch_size=32, epochs=30,
validation_data=(val_data, val_labels_binary),
callbacks=[early_stopping])
train_labels_binary
是这样的:array([[1, 0], [1, 0], [0, 1]])
结果 y_pred
是 array([[1, 0], [1, 0], [0, 1]])
那么 tf.keras.metrics.TruePositives()
应该 return 1,但是 returns 3.
任何帮助将不胜感激!!
好的,我做了更多的实验,当输入不是 1-hot 编码并且只有 1 个输出神经元时,它是固定的。因此,如果我们更改以下两行,所有指标 运行 都是正确的:
这个:train_labels = np.eye(2)[np.random.randint(0, 2, size=(10, 1)).reshape(-1)]
收件人:train_labels = np.random.randint(0, 2, size=(10, 1))
和
这个:model.add(layers.Dense(units=2, activation='sigmoid'))
收件人:model.add(layers.Dense(units=1, activation='sigmoid'))