试着在CNN的训练中加入aucroc分数

2024-04-19 21:23:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我现在的CNN有相对较高的准确度,但auc分数较低,所以我想训练我的模型,同时考虑准确性和auc。然而,当我试图添加‘auc’作为第二个训练指标时,我无法开始我的时代。在

这是我收到的错误消息:

FailedPreconditionError: Error while reading resource variable conv2d_4/kernel from Container: localhost. This could mean that the variable was uninitialized. Not found: Resource localhost/conv2d_4/kernel/N10tensorflow3VarE does not exist. [[{{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.

Tags: fromtestaddtargetmodellayersactivationkernel
1条回答
网友
1楼 · 发布于 2024-04-19 21:23:11

度量只是用来报告在每个时代对您的训练模型的评估。它不会改变你的训练。在

如果你想让你的模型也考虑到AUC,你应该修改你的损失。将二进制交叉熵的损失最小化,自然地,在不考虑AUC的情况下最大限度地提高精确度。当你有一个不平衡的数据集,比如一个倾斜的类,这使得问题变得更严重。在

如果你真的只想把它用于度量,你可以看到这篇文章: How to compute Receiving Operating Characteristic (ROC) and AUC in keras?

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

相关问题 更多 >