【问题标题】:Trying to add auc-roc score into CNN training尝试将 auc-roc 分数添加到 CNN 训练中
【发布时间】:2019-11-26 20:33:06
【问题描述】:

我目前的 CNN 具有相对较高的准确度,但 auc 得分较低,因此我想在训练模型时同时考虑准确度和 auc。但是,当我尝试添加“auc”作为训练的第二个指标时,我无法开始我的时代。

这是我收到的错误消息:

FailedPreconditionError:从容器读取资源变量 conv2d_4/kernel 时出错:localhost。这可能意味着变量未初始化。未找到:资源 localhost/conv2d_4/kernel/N10tensorflow3VarE 不存在。 [[{{node conv2d_4/Conv2D/ReadVariableOp}}]]

我已经尝试过之前讨论中提供的功能 auc。抱歉,我现在找不到帖子。

from keras import backend as K

def auc(y_true, y_pred):
    auc = tf.metrics.auc(y_true, y_pred)[1]
    K.get_session().run(tf.local_variables_initializer())
    return auc

auc_model = models.Sequential()
auc_model.add(layers.Conv1D (kernel_size = (200), filters = 10, input_shape=(1644,1) , activation='relu'))
auc_model.add(layers.MaxPooling1D(pool_size = (50), strides=(10)))
auc_model.add(layers.Reshape((40, 35, 1)))

auc_model.add(layers.Conv2D(16, (3, 3), activation='relu'))
auc_model.add(layers.Conv2D(16, (3, 3), activation='relu'))
auc_model.add(layers.MaxPooling2D((2, 2)))

auc_model.add(layers.Flatten())
auc_model.add(layers.Dense(32, activation='relu', kernel_regularizer=keras.regularizers.l2(0.001)))
auc_model.add(layers.Dropout(rate=0.2))
auc_model.add(layers.Dense(1, activation='sigmoid'))

auc_model.compile(optimizer='adam',
                       loss='binary_crossentropy',
                       metrics=['accuracy', auc])

auc_model.summary()


from tensorflow.keras.callbacks import EarlyStopping

target = y_tr.columns[0]
rows_tr = np.isfinite(y_tr[target]).values
rows_te = np.isfinite(y_te[target]).values

x_train = x_tr[rows_tr].reshape((x_tr[rows_tr].shape[0], 1644, 1))
x_test = x_te[rows_te].reshape((x_te[rows_te].shape[0], 1644, 1))

auc_model.fit( x_train, y_tr[target][rows_tr], 
              validation_data=(x_test, y_te[target][rows_te]), epochs = 5)

print('\n# Evaluate on test data')
results = auc_model.evaluate(x_test, y_te[target][rows_te], batch_size = 8, verbose=1)

I want to start my training process considering both accuracy and auc score. Thanks.

【问题讨论】:

    标签: python machine-learning keras deep-learning auc


    【解决方案1】:

    指标仅用于报告您在每个时期训练的模型的评估。它不会改变您的训练。

    如果你想让你的模型也考虑 AUC,你应该修改你的损失。最大限度地减少 binary_crossentropy 的损失,自然而然地在不考虑 AUC 的情况下最大限度地提高准确性。当您拥有不平衡的数据集(例如一个倾斜的类)时,这会使问题更加严重。

    如果你真的只想要指标,你可以看到这篇文章: How to compute Receiving Operating Characteristic (ROC) and AUC in keras?

    但如果你真的希望你的模型最大化 AUC,你应该在 Keras 上编写一个自定义的损失函数,并将它放在你的模型的损失中。 这里有一个很好的讨论: https://www.kaggle.com/c/invasive-species-monitoring/discussion/32762

    【讨论】:

    • 我看过这个讨论,所以这就是我有 auc 功能的原因。但讨论并不那么全面,因为我发现它添加了 auc 函数作为度量。我做了同样的事情,但出现了上面的错误消息。我不能使用 conv1d、conv2d 和dense。
    • y_tr 是张量吗?如果是,我相信在开始拟合之前你确实需要这个命令:init = tf.global_variables_initializer()
    猜你喜欢
    • 2016-01-11
    • 2018-01-11
    • 2021-06-12
    • 2017-10-25
    • 2021-12-08
    • 2021-03-12
    • 2015-06-23
    • 2022-11-11
    • 2020-08-15
    相关资源
    最近更新 更多