如何定义/更改非分类卷积神经网络的准确性?

问题描述 投票:0回答:1

我目前正在使用 Keras 制作预测模型。它接受两个时间序列并输出 0 到 1 之间的数字。目前,我的准确度非常低,因为模型只有在获得确切的数字时才被认为是“正确的”。例如,正确的数字是0.34,如果预测为0.35,则认为是错误的。我希望能够认为某个范围内的所有数字都是正确的,例如:在真实值的 0.05 范围内。另一种选择可能是四舍五入,但我遇到了它输出小数点后 6 位的问题。

  1. 我怎样才能认为某个范围内的所有数字对于准确性来说都是“正确的”?
  2. 如何对 CNN 的输出进行舍入?

这是我的 CNN 代码: def 网络模型(): 模型 = tf.keras.Sequential([

tf.keras.layers.Conv2D(filters = 16, kernel_size=(2, 2), activation='relu',padding='same'),
tf.keras.layers.Conv2D(filters = 9, kernel_size=(2, 2), activation='relu',padding='same'),
tf.keras.layers.MaxPooling2D(pool_size=(2, 2)),
tf.keras.layers.Flatten(),
tf.keras.layers.Dense(256, activation='relu'),
tf.keras.layers.Dense(1, activation='sigmoid')

])

model.compile(optimizer='adam',
            loss = tf.keras.losses.BinaryCrossentropy(),
            metrics=['accuracy'])

return model
machine-learning keras deep-learning neural-network conv-neural-network
1个回答
0
投票

对于这种特定情况,您可以将自定义准确度函数定义为指标,并为您的

Callback
模型定义
Keras

自定义准确度指标

import keras.backend as K

def custom_accuracy(y_true, y_pred, tolerance=0.05):
    absolute_difference = K.abs(y_true - y_pred)
    correct_predictions = K.cast(absolute_difference <= tolerance, dtype='float32')
    return K.mean(correct_predictions)

model.compile(optimizer='adam', loss='mse', metrics=[custom_accuracy])

自定义回调:

from keras.callbacks import Callback
import numpy as np

class CustomAccuracyCallback(Callback):
    def __init__(self, validation_data, tolerance=0.05):
        super(CustomAccuracyCallback, self).__init__()
        self.validation_data = validation_data
        self.tolerance = tolerance

    def on_epoch_end(self, epoch, logs={}):
        x_val, y_val = self.validation_data
        y_pred = self.model.predict(x_val)
        accuracy = np.mean(np.abs(y_val - y_pred) <= self.tolerance)
        print(f"\nEpoch {epoch + 1}: Custom Accuracy: {accuracy:.4f}")
        logs['custom_accuracy'] = accuracy

custom_callback = CustomAccuracyCallback((x_val, y_val))
model.fit(x_train, y_train, validation_data=(x_val, y_val), callbacks=[custom_callback])
© www.soinside.com 2019 - 2024. All rights reserved.