如何BCEWithLogitsLoss在 keras 中实现并将其用作自定义损失函数,同时用作Tensorflow后端。
我已经使用了BCEWithLogitsLoss其中PyTorch定义的torch。
如何在 Keras 中实现相同的功能?
我正在尝试通过顺序 Keras 神经网络运行小波重建数据集。为了从训练中获得更好的结果,我尝试构建一个仅关注波形的某些索引的自定义损失函数。我打算创建一个对剪切波形进行插值的神经网络,因此我只想让神经网络通过将波形的剪切片段与实际输出进行比较来计算损失。
我已经尝试为我的自定义损失函数创建一个包装器,以便我可以传递额外的输入参数。然后,我使用此输入参数来查找剪辑数据点的索引,并尝试从 y_pred 和 y_true 收集这些索引。
这是模型实例化和训练的地方:
x_train, x_test, y_train, y_test = train_test_split(X, Y, train_size=0.7)
_dim = len(x_train[0])
# define the keras model
model = Sequential()
# tanh activation allows for vals between -1 and 1 unlike relu
model.add(Dense(_dim*2, input_dim=_dim, activation=_activation))
model.add(Dense(_dim*2, activation=_activation))
model.add(Dense(_dim, activation=_activation))
# model.compile(loss=_loss, optimizer=_optimizer)
model.compile(loss=_loss, optimizer=_optimizer, metrics=[custom_loss_wrapper_2(x_train)])
print(model.summary())
# The patience parameter is the amount of epochs to check for improvement
early_stop = EarlyStopping(monitor='val_loss', patience=5)
# fit the model
history = model.fit(x_train, y_train, validation_data=(x_test, …Run Code Online (Sandbox Code Playgroud) 而在很多代码中,例如here、here和here,代码实现为:
KL_loss = -0.5 * torch.sum(1 + logv - mean.pow(2) - logv.exp())
Run Code Online (Sandbox Code Playgroud)
或者
def latent_loss(z_mean, z_stddev):
mean_sq = z_mean * z_mean
stddev_sq = z_stddev * z_stddev
return 0.5 * torch.mean(mean_sq + stddev_sq - torch.log(stddev_sq) - 1)
Run Code Online (Sandbox Code Playgroud)
它们有何关系?为什么代码中没有“tr”或“.transpose()”?
我有一个包含 15 个不平衡类别的数据集,并尝试使用 keras 进行多标签分类。
我正在尝试使用微型 F-1 分数作为衡量标准。
我的型号:
# Create a VGG instance
model_vgg = tf.keras.applications.VGG19(weights = 'imagenet', pooling = 'max', include_top = False,
input_shape = (512, 512, 3))
# Freeze the layers which you don't want to train.
for layer in model_vgg.layers[:-5]:
layer.trainable = False
# Adding custom Layers
x = model_vgg.output
x = Flatten()(x)
x = Dense(1024, activation = "relu")(x)
x = Dropout(0.5)(x)
x = Dense(1024, activation = "relu")(x)
predictions = Dense(15, activation = "sigmoid")(x)
# creating …Run Code Online (Sandbox Code Playgroud) 我正在研究一个名为DPR的信息检索模型,它基本上是一个神经网络(2 个 BERT),根据给定的查询对文档进行排名。目前,该模型以二进制方式(文档是否相关)进行训练,并使用负对数似然(NLL)损失。我想改变这种二元行为并创建一个可以处理分级相关性的模型(例如 3 个等级:相关、某种程度上相关、不相关)。我必须更改损失函数,因为目前我只能为每个查询分配 1 个正目标(DPR 使用 pytorch NLLLoss),而这不是我需要的。
我想知道是否可以使用像 NDCG(标准化贴现累积增益)这样的评估指标来计算损失。我的意思是,损失函数的全部意义在于告诉我们我们的预测有多偏离,而 NDCG 也在做同样的事情。
那么,我可以使用这样的指标来代替损失函数并进行一些修改吗?对于 NDCG,我认为从 1 (1 - NDCG_score) 中减去结果可能是一个很好的损失函数。真的吗?
致以最诚挚的问候,阿里。
evaluation information-retrieval ranking neural-network loss-function
我正在尝试组合由同一网络生成的两个输出,这些输出对4类任务和10类任务进行预测.然后我想结合这些输出给出一个长度为14的数组,我用它作为我的最终目标.
虽然这似乎是积极的,预测总是针对一个类,所以它产生概率dist,只关注选择14个选项中的1个而不是2.我实际需要它做的是提供2个预测,一个用于每节课.我希望所有这些都由同一型号生产.
input = Input(shape=(100, 100), name='input')
lstm = LSTM(128, input_shape=(100, 100)))(input)
output1 = Dense(len(4), activation='softmax', name='output1')(lstm)
output2 = Dense(len(10), activation='softmax', name='output2')(lstm)
output3 = concatenate([output1, output2])
model = Model(inputs=[input], outputs=[output3])
Run Code Online (Sandbox Code Playgroud)
我的问题是确定适当的损失函数和预测方法?对于预测,我可以简单地在softmax之后获取每一层的输出但是我不确定如何为每个要训练的东西设置损失函数.
有任何想法吗?
非常感谢
我有一个名为定期keras模型e,我想它的输出比较两者y_pred,并y_true在我的自定义损失函数。
from keras import backend as K
def custom_loss(y_true, y_pred):
return K.mean(K.square(e.predict(y_pred)-e.predict(y_true)), axis=-1)
Run Code Online (Sandbox Code Playgroud)
我收到错误消息:AttributeError: 'Tensor' object has no attribute 'ndim'
这是因为y_true和y_pred都是张量对象,keras.model.predict希望传递给numpy.array。
知道如何keras.model在自定义损失函数中成功使用我的方法吗?
如果需要,我愿意获取指定层的输出,也可以将其转换keras.model为tf.estimator对象(或其他任何对象)。
我想编写一个自定义损失函数,该函数将权衡正目标值的低估。它将像均方误差一样工作,唯一的区别在于,在这种情况下,均方误差将乘以大于1的权重。
我这样写:
def wmse(ground_truth, predictions):
square_errors = np.square(np.subtract(ground_truth, predictions))
weights = np.ones_like(square_errors)
weights[np.logical_and(predictions < ground_truth, np.sign(ground_truth) > 0)] = 100
weighted_mse = np.mean(np.multiply(square_errors, weights))
return weighted_mse
Run Code Online (Sandbox Code Playgroud)
然而,当我把它提供给我的顺序模型keras与tensorflow作为后端:
model.compile(loss=wmse,optimizer='rmsprop')
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
raise TypeError("Using a `tf.Tensor` as a Python `bool` is not allowed.
TypeError: Using a `tf.Tensor` as a Python `bool` is not allowed. Use `if t is not None:` instead of `if t:` to test if a tensor is defined, and use TensorFlow ops such as tf.cond to …Run Code Online (Sandbox Code Playgroud) 我用keras(一个convnet)构建了一个自定义体系结构。该网络有4个头,每个头输出不同大小的张量。我试图编写一个自定义损失函数作为这4个输出的函数。我以前曾实施过客户损失,但要么是每个头损失不同,要么是每个头损失相同。在这种情况下,我需要组合4个输出来计算损耗。
我习惯以下几点:
def custom_loss(y_true, y_pred):
return something
model.compile(optimizer, loss=custom_loss)
Run Code Online (Sandbox Code Playgroud)
但就我而言,我需要y_pred列出4个输出。我可以用零填充输出,并在模型中添加一个连接层,但是我想知道是否有更简单的方法。
我的损失函数相当复杂,我可以写点什么:
model.add_loss(custom_loss(input1, input2, output1, output2))
Run Code Online (Sandbox Code Playgroud)
自定义损失定义为:
def custom_loss(input1, input2, output1, output2):
return loss
Run Code Online (Sandbox Code Playgroud) 我将ML模型应用于实验设置,以优化驱动信号。驱动信号本身就是最优化的东西,但是其质量是间接评估的(将其应用于实验装置以产生不同的信号)。
我可以通过python中的函数运行并从实验中收集数据。
我想使用自定义损失函数建立ML模型,该函数使用优化的信号调用实验驱动程序函数,以获取用于反向传播的误差。
我已经研究过使用keras,但是必须专门使用keras后端函数的限制意味着我无法在该函数中调用驱动程序函数。
我想知道是否可以在没有keras前端的情况下使用张量流以及是否有其他ML API允许这样做吗?
谢谢。
loss-function ×10
keras ×8
python ×6
tensorflow ×6
autoencoder ×1
evaluation ×1
lstm ×1
predict ×1
pytorch ×1
ranking ×1