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

2024-09-22 16:35:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图使用最后一层的每个神经元的输出来定制一个损失函数。函数可能不是线性的。以下是我正在进行的工作:

## 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, activation = "sigmoid", name = "dense12")(dense1)
dense13 = Dense(1, activation = "sigmoid", name = "dense13")(dense1)
dense14 = Dense(1, activation = "sigmoid", 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_序列是n*1(n是样本大小)

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

但代码一直不起作用。我认为这是由于lambda_层或自定义_层功能。我还试图定义一个新的损失函数(这样就不会有“lambda_层”),但它也不起作用。我不知道它怎么了。(头痛!)

任何想法或建议都将不胜感激!!谢谢!(我正在使用Python3.7和Tensorflow版本2.0.0)


解决了,谢谢


Tags: lambda函数namelayeractivationdensetensor损失