微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用每个神经元的输出的Keras自定义损失函数

如何解决使用每个神经元的输出的Keras自定义损失函数

我正在尝试使用最后一层的每个神经元的输出自定义损失函数。并且该函数可能不是线性的。这是我正在从事的工作:

## some prevIoUs layers##
## my last dense layer##
dense1 = Dense(4,activation="relu",name="dense_layer1")(prevIoUs layer)


dense11 = Dense(1,activation = "sigmoid",name = "dense11")(dense1)
dense12 = Dense(1,name = "dense12")(dense1)
dense13 = Dense(1,name = "dense13")(dense1)
dense14 = Dense(1,name = "dense14")(dense1)


## custom loss function ##

def custom_layer(tensor):
    return tensor[1]*2+tensor[2]+tensor[3]/(tensor[4]*2)  #some nonlinear function like this


lambda_layer = Lambda(custom_layer,name="lambda_layer")([dense11,dense12,dense13,dense14])

model = Model(inputs=Input,outputs=lambda_layer)  # "Input" are in prevIoUs layers,not shown here

model.compile(loss='mse',optimizer='adam')
model.fit(X_train,Y_train,epochs=2,batch_size=512,verbose=1)


我的Y_train是n * 1(n是样本大小)。

所以我基本上是对最后四个神经元的输出进行非线性变换,这等效于构造一个新的损失函数。转换后,y hat也应该是n * 1向量。

但是代码仍然无法正常工作。我认为这是由于lambda_layer或custom_layer函数造成的。我还尝试定义了一个新的损失函数(那时将没有“ lambda_layer”),但是它也不起作用。我不知道这是怎么回事。 (头疼!)

任何想法或建议都值得赞赏!!非常感谢! (我在Tensorflow 2.0.0版中使用python3.7


解决了,谢谢!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。