我当前的CNN具有相对较高的准确度,但auc得分较低,因此我想同时考虑准确性和auc来训练我的模型。但是,当我尝试将“ auc”添加为要训练的第二个指标时,我无法开始新纪元。
这是我收到的错误消息:
FailedPreconditionError:从容器:本地主机读取资源变量conv2d_4 / kernel时出错。这可能意味着该变量未初始化。找不到:资源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.
答案 0 :(得分:0)
Metric仅用于在每个时期报告对您训练的模型的评估。它不会改变您的训练。
如果要使模型也考虑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