使用每个神经元的输出的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 (将#修改为@)