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
)