python - 我的损失函数会按照我希望的方式工作吗?(凯拉斯)
问题描述
所以我用这段代码实现了一个神经网络:
self.model = keras.Sequential()
self.model.add(keras.Input(shape=(self.wejscia,), name="Input"))
self.model.add(layers.Dense(64, activation="relu", name="dense_1"))
self.model.add(layers.Dense(64, activation="relu", name="dense_2"))
self.model.add(layers.Dense(8, activation="softmax", name="predictions"))
但我想让它可以只在输出向量的一个选定位置上执行梯度下降。我这样做的方式是这样的:
首先,我创建了一个这样的类:
class CustomMSE(keras.losses.Loss):
def __init__(self, my_output, name="custom_mse"):
super().__init__(name=name)
self.my_output = my_output
def call(self, y_true, y_pred):
mse = tf.math.reduce_mean(tf.square(y_true[0,self.my_output] - y_pred[0,self.my_output]))
return mse
然后我只是应用了这样的编译方法:
self.model.compile(optimizer=keras.optimizers.Adam(), loss=CustomMSE(i))
我不确定两件事。
第一:.fit 方法是否会修改第二个隐藏层和第 j 个输出之间的工资 j !=i (我希望不会)
第二:指令 self.model.compile(optimizer=keras.optimizers.Adam(), loss=CustomMSE(i)) 对不同的 i 值多次应用会影响模型的当前工资,还是只会改变应用 .fit 方法后网络的进一步行为?
解决方案
使用您拥有的代码,它不会按预期工作,因为您正在使用 tf. 函数而不是 keras.backend 函数来创建损失函数。以下是如何创建自定义损失函数的示例:
import tensorflow.keras.backend as kb
def custom_loss(y_actual,y_pred):
custom_loss=kb.square(y_actual-y_pred)
return custom_loss
你可以像这样使用这个损失函数:
model.compile(loss=custom_loss,optimizer=optimizer)
当然,这与您实现的损失函数不同,但它显示了方法论。
推荐阅读
- oracle - 当我连接到工作网络时,为什么我的应用程序启动时间过长?
- python - 在 Altair 中按多列排序
- google-maps - 用户单击标记时如何绘制路线
- nuxt.js - 如何在 DocuSign 中获取授权码?
- linux - 如果它们在 Linux 中的确切位置具有 0 值,则从文件中删除行
- html - 水平对齐两个按钮 bootstrap4
- angular - 使用 cli 将角度 8 更新为 10
- graph - 如何使用 Microsoft graph api 从 Office 365 恢复已删除的邮件
- java - 带有 JPA 的 Spring Boot 2.3:CommandLineRunner 完成延迟
- javascript - JS/jQuery - 检查元素是否包含数组中的所有类