Tensorflow自定义正则化项:预测值与真实值的比较

你好,我需要一个自定义的正则化项来添加到我的(二元交叉熵)损失函数中。有人能帮我用Tensorflow语法实现这个吗?我已经尽可能简化了一切,以便更容易帮助我。

模型输入的是10000个18 x 18的二进制配置数据集,输出的是16×16的配置集。神经网络仅包含两个卷积层。

我的模型如下所示:

import tensorflow as tffrom tensorflow.keras import datasets, layers, modelsEPOCHS = 10model = models.Sequential()model.add(layers.Conv2D(1,2,activation='relu',input_shape=[18,18,1]))model.add(layers.Conv2D(1,2,activation='sigmoid',input_shape=[17,17,1]))model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=1e-3),loss=tf.keras.losses.BinaryCrossentropy())model.fit(initial.reshape(10000,18,18,1),target.reshape(10000,16,16,1),batch_size = 1000, epochs=EPOCHS, verbose=1)output = model(initial).numpy().reshape(10000,16,16) 

现在我写了一个函数,我想用它作为额外的正则化项。这个函数接受真实值和预测值。基本上,它将两者的每个点与其“右侧”邻居相乘,然后计算差异。我假设真实值和预测值是16×16的(而不是10000x16x16)。这是正确的吗?

def regularization_term(prediction, true):    order = list(range(1,4))    order.append(0)        deviation = (true*true[:,order]) - (prediction*prediction[:,order])    deviation = abs(deviation)**2    return 0.2 * deviation

我非常希望能得到一些帮助,将类似这样的函数作为正则化项添加到我的损失函数中,以帮助神经网络更好地训练这种“右侧邻居”交互。我在使用Tensorflow的可自定义功能方面遇到了很多困难。非常感谢你的帮助。


回答:

这很简单。你需要指定一个自定义损失函数,在其中定义你的附加正则化项。像这样:

# to minimize!def regularization_term(true, prediction):    order = list(range(1,4))    order.append(0)        deviation = (true*true[:,order]) - (prediction*prediction[:,order])    deviation = abs(deviation)**2    return 0.2 * deviationdef my_custom_loss(y_true, y_pred):    return tf.keras.losses.BinaryCrossentropy()(y_true, y_pred) + regularization_term(y_true, y_pred)model.compile(optimizer='Adam', loss=my_custom_loss)

正如keras所述:

任何具有签名loss_fn(y_true, y_pred)并返回损失数组(输入批次中每个样本的损失)的可调用对象都可以作为损失传递给compile()。请注意,样本加权自动支持任何此类损失。

所以请确保返回一个损失数组(编辑:正如我现在看到的,也可以返回一个简单的标量。如果你使用例如reduce函数也没关系)。基本上y_true和y_predicted的第一维是批次大小

这里有详细信息:https://keras.io/api/losses/

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注