问题描述
我正在尝试使用最后一层的每个神经元的输出来自定义损失函数。并且该函数可能不是线性的。这是我正在从事的工作:
## 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 (将#修改为@)