Keras Backend Modeling Issue

Tengo un problema al declarar mi modelo. Mis entradas son x_input y y_input, y mis salidas son predicciones. Como sigue:

model = Model(inputs = [x_input, y_input], outputs = predictions ) 

Mis entradas (x, y) están integradas, luego MatMult juntas. Como sigue:

 # Build X Branch x_input = Input(shape = (maxlen_x,), dtype = 'int32' ) x_embed = Embedding( maxvocab_x + 1, 16, input_length = maxlen_x ) XE = x_embed(x_input) # Result: Tensor("embedding_1/Gather:0", shape=(?, 31, 16), dtype=float32) # Where 31 happens to be my maxlen_x 

Del mismo modo para la twig y …

 # Build Y Branch y_input = Input(shape = (maxlen_y,), dtype = 'int32' ) y_embed = Embedding( maxvocab_y + 1, 16, input_length = maxlen_y ) YE = y_embed(y_input) # Result: Tensor("embedding_1/Gather:0", shape=(?, 13, 16), dtype=float32) # Where 13 happens to be my maxlen_y 

Entonces hago un punto por lotes entre los dos. (Simplemente punteando los datos de cada instancia)

 from keras import backend as K dot_merged = K.batch_dot(XE, YE, axes=[2,2] ) # Choose the 2nd component of both inputs to Dot, using batch_dot # Result: Tensor("MatMul:0", shape=(?, 31, 13), dtype=float32)` 

Luego aplané las dos últimas dimensiones del tensor.

 dim = np.prod(list(dot_merged.shape)[1:]) flattened= K.reshape(dot_merged, (-1,int(dim)) ) 

En última instancia, introduje estos datos aplanados en un regresor logístico simple.

 predictions = Dense(1,activation='sigmoid')(flattened) 

Y, mis predicciones son, por supuesto, mi salida para el modelo.

Enumeraré la salida de cada capa por la forma de salida del tensor.

 Tensor("embedding_1/Gather:0", shape=(?, 31, 16), dtype=float32) Tensor("embedding_2/Gather:0", shape=(?, 13, 16), dtype=float32) Tensor("MatMul:0", shape=(?, 31, 13), dtype=float32) Tensor("Reshape:0", shape=(?, 403), dtype=float32) Tensor("dense_1/Sigmoid:0", shape=(?, 1), dtype=float32) 

Me sale el siguiente error, específicamente.

  Traceback (most recent call last): File "Model.py", line 53, in  model = Model(inputs = [dx_input, rx_input], outputs = [predictions] ) File "/Users/jiangq/tensorflow/lib/python3.6/site-packages/keras/legacy/interfaces.py", line 88, in wrapper return func(*args, **kwargs) File "/Users/jiangq/tensorflow/lib/python3.6/site-packages/keras/engine/topology.py", line 1705, in __init__ build_map_of_graph(x, finished_nodes, nodes_in_progress) File "/Users/jiangq/tensorflow/lib/python3.6/site-packages/keras/engine/topology.py", line 1695, in build_map_of_graph layer, node_index, tensor_index) File "/Users/jiangq/tensorflow/lib/python3.6/site-packages/keras/engine/topology.py", line 1665, in build_map_of_graph layer, node_index, tensor_index = tensor._keras_history AttributeError: 'Tensor' object has no attribute '_keras_history' 

Volia ¿Qué hice mal? Gracias por cualquier ayuda antes de tiempo!

-Antonio

¿Intentaste envolver las funciones de backend en una capa Lambda ? Creo que hay algunas operaciones necesarias dentro del __call__() de una capa de Keras para que un Model Keras se construya correctamente, que no se ejecutará si llama directamente a las funciones de backend.