赞
踩
loss是model.compile编译时所需的参数之一,可以用损失函数名或者 TensorFlow
符号函数:
- #损失函数名
- model.compile(loss='mean_squared_error', optimizer='sgd')
- #符号函数
- model.compile(loss=losses.mean_squared_error, optimizer='sgd')
自定义损失函数时参数必须并且只有两个,一个是y_true
,一个是y_pred
,并且y_true
参数放在y_pred
的前面(Keras自动会检测到y_true和 y_pred):
- def myself_loss(y_true, y_pred):
- losses = y_true - y_pred
- return losses
- model.compile(loss=myself_loss, optimizer='sgd')
Keras教学(12):使用Keras自定义神经网络的损失函数,你学废了吗_是猪哥不是诸葛的博客-CSDN博客_keras自定义损失函数
model = Model(inputs=inputs, outputs=[x1, x2, x3])
Keras会为Model的每一个输出out构建一个loss,这些loss之间无法交互。且loss_weights对应每个loss的权重,最后输出loss的和。
model.compile(optimizer=opt, loss='myself_loss', loss_weights=[1, 1, 1])
同时,Model中每一个outut都必须在fit()有对应的y_ture。
model.fit([trainX], [trainY1, trainY2, trainY3], epochs=600, batch_size=batchsize1, verbose=2, callbacks=callback)
loss 对应的关系是x1和trainY1算‘myself_loss’,x2和trainY2算‘myself_loss’, x3和trainY3算‘myself_loss’,而模型的输入是trainX
“让Keras更酷一些!”:随意的输出和灵活的归一化 - 科学空间|Scientific Spaces
在自己编写的代码文件中直接使用自定义的loss,在训练和验证的时候是行得通的;但是在测试时,是行不通的,因为在Keras库中的loss.py没有定义这个myloss()函数,故而在评估的时候不能应用myloss()来加以评估。
通过以下方法解决这个问题的:
**打开Keras库中的loss.py文件,添加你刚才自定义的函数,即复制—>粘贴**。
Keras中自定义复杂的loss函数 - 科学空间|Scientific Spaces 双输出模型
compile
的时候并没有传入loss,而是在compile
之前通过另外的方式定义loss,然后通过add_loss
加入到模型中,这样可以随意写足够灵活的loss,比如这个loss可以跟中间层的某个输出有关、跟输入有关
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。