Inicializar espaço reservado keras como entrada em uma camada personalizada
Quero manipular as ativações da camada anterior com uma camada keras personalizada. A camada abaixo simplesmente multiplica um número com as ativações da camada anterior.
class myLayer(Layer):
def __init__(self, **kwargs):
super(myLayer, self).__init__(**kwargs)
def build(self, input_shape):
self.output_dim = input_shape[0][1]
super(myLayer, self).build(input_shape)
def call(self, inputs, **kwargs):
if not isinstance(inputs, list):
raise ValueError('This layer should be called on a list of inputs.')
mainInput = inputs[0]
nInput = inputs[1]
changed = tf.multiply(mainInput,nInput)
forTest = changed
forTrain = inputs[0]
return K.in_train_phase(forTrain, forTest)
def compute_output_shape(self, input_shape):
print(input_shape)
return (input_shape[0][0], self.output_dim)
Estou criando o modelo como
inputTensor = Input((5,))
out = Dense(units, input_shape=(5,),activation='relu')(inputTensor)
n = K.placeholder(shape=(1,))
auxInput = Input(tensor=n)
out = myLayer()([out, auxInput])
out = Dense(units, activation='relu')(out)
out = Dense(3, activation='softmax')(out)
model = Model(inputs=[inputTensor, auxInput], outputs=out)
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics='acc'])
Eu recebo esse erro quando tento usar
model.fit(X_train, Y_train, epochs=epochs, verbose=1)
Erro
InvalidArgumentError: You must feed a value for placeholder tensor 'Placeholder_3' with dtype float and shape [1]
E quando tento atribuir valor ao espaço reservado como
model.fit([X_train, np.array([3])], Y_train, epochs=epochs, verbose=1)
Eu recebo:
ValueError: Error when checking model input: the list of Numpy arrays that you are passing to your model is not the size the model expected. Expected to see 1 arrays but instead got the following list of 2 arrays:
Como devo inicializar este espaço reservado? Meu objetivo é usar model.evaluate para testar o efeito de diferentes valores do modelo durante a inferência. Obrigado.