我试图使用最后一层的每个神经元的输出来定制一个损失函数。函数可能不是线性的。以下是我正在进行的工作:
## 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)
解决了,谢谢
目前没有回答
相关问题 更多 >
编程相关推荐