我是深度学习的新手,并且使用带有tensorflow后端的keras。
无论如何,我有一个带有 N 输入和输出( x_i,y_i )的训练集。我的模型首先构造一个神经网络,称为 F ,然后使用函数 g 获得 y 。换句话说, y = g(F(x))其中, F 是一个神经网络,而 g 是一个函数,可能是不可逆的。
是否有一种使用keras构造这种模型的方法?为简化起见,让 y = 3xF(x)+ x 。我想训练这种模型而无需更改训练输出,例如(y_i-x_i)/(3x_i)。
答案 0 :(得分:1)
是的,您可以使用Keras功能API定义模型,并使用Keras后端调用函数以倍增张量。确保x和F(x)具有相同的形状,以便可以将它们相乘。您可能会定义Lambda图层,以确保您的输出是Keras图层。
例如,假设我们的函数F(x)= Sin((x-1)^ 2);我们要计算x * F(x)+ x
定义:
from keras.layers import Input,Lambda
from keras.models import Model
import keras.backend as K
def custom_function(x):
return K.sin((x-1)*(x-1))+x
def create_model(shape=(10,10,10)):
x=Input(shape)
logits=Lambda(custom_function)(x)
logits= keras.layers.multiply([x,logits])
logits = keras.layers.add([logits,x])
model = Model(inputs=x, outputs=logits)
return model
您需要做的就是确保形状一致,以便我们可以相加并相乘。
有关功能API的更多信息,请参见:https://keras.io/models/model/