繁体   English   中英

Keras:使用模型的一阶和二阶导数之和作为最终输出

[英]Keras: using the sum of the first and second derivatives of a model as final output

假设我使用Keras创建了这个模型:

model = Sequential()
model.add(Dense(32, activation='tanh', input_dim=1))
model.add(Dense(10, activation='tanh'))
model.add(Dense(1, activation='linear'))

这个模型的输入和输出维度都是1.现在,假设我想再添加一个层,它是上述模型的一阶导数和二阶导数(相对于输入)的总和,并将其用作我的新输出图层。 在Keras有可能吗? 我做了很多谷歌搜索,但找不到任何东西。

您可以使用tf.gradients计算TENSorflow中的渐变,使用tf.gradients计算tf.gradients中的K.gradients

first = K.gradients(model.outputs, model.inputs)
second = K.gradients(first, model.inputs)

以下是计算模型中渐变的代码:

from tensorflow.python.keras import Model, Input
from tensorflow.python.keras import backend as K
from tensorflow.python.keras.layers import Dense, Lambda

def deriative(inps):
    i, o = inps[0], inps[1]
    grad1 = K.gradients(o, i)[0]
    grad2 = K.gradients(grad1, i)[0]
    return K.concatenate([grad1, grad2])


inps = Input(shape=(1,))
dense1 = Dense(32, activation='tanh')(inps)
dense2 = Dense(10, activation='tanh')(dense1)
dense3 = Dense(1, activation='linear')(dense2)

output = Lambda(deriative)([inps, dense3])

new_model = Model(inputs=inps, outputs=output)
new_model.compile('adam', 'mse')
print(new_model.summary())

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM