TensorFlow损失函数:
MeanSquaredError()
KLDivergence()
CosineSimilarity()
- 等等
在TensorFlow中已经内置了很多常用的损失函数,可以满足我们的模型训练要求,但是有的时候我们自己特定的任务会有自己的损失函数,这样TensorFlow库中的函数就不会满足我们,我们就需要自己定义计算损失的方法。
在TensorFlow提供了两种方式自定义损失函数:
- 自定义函数
- Loss类子类化
下面我们以自定义MSE均方误差作为示例:
方式一:自定义函数
参数为真实值和预测值,函数体则为自定义的损失计算方法
# 方式一:自定义函数 def custom_mean_squared_error(y_true, y_pred): return tf.math.reduce_mean(tf.square(y_true - y_pred))
方式二:Loss类子类化
该方法要分别实现__init__
和call
方法,在初始化方法中可以自定义需要传入的参数,call的参数为真实值和预测值,函数体则为自定义的损失计算方法
# 方式二:Loss类子类化 class CustomMSE(keras.losses.Loss): def __init__(self): super(CustomMSE, self).__init__() def call(self, y_true, y_pred): mse = tf.math.reduce_mean(tf.square(y_true - y_pred)) return mse
完整代码:
""" * Created with PyCharm * 作者: 阿光 * 日期: 2022/1/2 * 时间: 15:57 * 描述: """ import numpy as np import tensorflow as tf from keras import Input, Model from keras.layers import Dense from tensorflow import keras x = np.random.random((1000, 10)) y = np.random.random((1000, 1)) # 方式一:自定义函数 def custom_mean_squared_error(y_true, y_pred): return tf.math.reduce_mean(tf.square(y_true - y_pred)) # 方式二:Loss类子类化 class CustomMSE(keras.losses.Loss): def __init__(self): super(CustomMSE, self).__init__() def call(self, y_true, y_pred): mse = tf.math.reduce_mean(tf.square(y_true - y_pred)) return mse def get_model(): inputs = Input(shape=(10,)) outputs = Dense(1, activation='relu')(inputs) model = Model(inputs, outputs) model.compile( optimizer='adam', loss=custom_mean_squared_error, # loss=CustomMSE(), metrics=['mse'] ) return model model = get_model() model.fit( x, y, epochs=5, batch_size=32, validation_split=0.2 )