Cargando el modelo KERAS FRE-FORMING, y fusionando con el modelo de ramificación para crear multi-entrada -- keras campo con lstm camp Relacionados El problema

Loading pre-trained Keras model, and merging with branching model to create multi-input


0
vote

problema

Español

Tengo un modelo secuencial pre-capacitado utilizando la API Fuctal KERAS.

Ahora, necesito cargar el modelo, retirar la parte superior y concatenarla con un modelo lateral de ramificación y entrenar el nuevo modelo completo.

Estoy interesado en retener las primeras capas pre-entrenadas del modelo principal.

Creo que el problema es configurar las entradas y salidas correctas para que el modelo se conecte correctamente y se compila. Creo que actualmente hay una desconexión entre la nueva capa de entrada del modelo principal y el resto del modelo principal.

El número de capas en el modelo pre-entrenado es dinámico. Esta es la motivación para cargar el modelo y cambiarlo en lugar de usar la configuración y los pesos para volver a configurar las capas pre-capacitadas en el modelo completo. No he encontrado una forma de trabajo de codificar la configuración del modelo completo con configuración y pesas que funciona con el cambio de número de capas pre-entrenadas.

Actualización: Para que sea más claro cuál es el problema, necesito configurar un gráfico conectado. El mensaje de error es 'ValueError: Gráfico desconectado: no se puede obtener valor para tensor tensor ("pretrain_input: 0", shape = (?, 4, 105), dttype = float32) en la capa "Pretrain_input". Se accedió a las siguientes capas anteriores sin problemas: [] '

  ##### MAIN MODEL #####  # loading pretrained model main_model = load_model('models/main_model.h5')   # saving the output layer for reconstruction later config_output_layer = main_model.layers[-1].get_config() weights_output_layer = main_model.layers[-1].get_weights()   # removing the first and last layer (not sure if I need to remove the first layer, but I do this as I need an explicit 'entry point' for later concatenation with branching model later and re-compiling ) main_model.layers.pop(0) main_model.layers.pop(-1)   # new first layer, for input later main_input = Input(     shape=(x_train_main.shape[1], x_train_main.shape[2]),     name='Main_input')   # reconstructing last layer main_output = Dense.from_config(config_last_layer)(main_model.output)   # re-defining the main model new_main_model = Model(inputs=main_input, outputs=main_output)    ##### BRANCHING MODEL #####      branch_visible = Input(     shape=(x_train_branch.shape[1], x_train_branch.shape[2]),     name='Branch_input')   branch_hidden_0 = LSTM(     units=units_lstm_layer,     return_sequences=True,     name='Branch_hidden_0' )(branch_visible)   branch_dense = Dense(     units=units_dense_layer,     name='Branch_dense' )(branch_hidden_0)   ##### CONCAT THE MAIN AND THE BRANCH #####  concatenated_output = Concatenate(axis=-1)([main_output, branch_dense])   activation_layer = Dense(     units=units_activation_layer,     activation=activation,     name='Activation' )(concatenated_output)   final_model = Model(inputs=[main_visible, branch_visible], outputs=activation_layer)   
Original en ingles

I have pre-trained a sequential model using the Keras fuctional API.

Now, I need to load the model, remove the top and concatenate it with a branching side model, and train the new full model.

I am interested in retaining the first pre-trained layers of the main model.

I believe the issue is to set up the right inputs and outputs so that the model connects correctly and compiles. I think there is currently a disconnect between the new input layer of the main model, and the rest of the main model.

The number of layers in the pre-trained model is dynamic. This is the motivation for loading the model and change it rather than using config and weights to re-configure the pre-trained layers in the complete model. I have not found a working way of hardcoding the configuration of the complete model with config and weights that works with changing number of pre-trained layers.

UPDATE: To make it clearer what the issue is, I need to set up a connected graph. The error message is 'ValueError: Graph disconnected: cannot obtain value for tensor Tensor("Pretrain_input:0", shape=(?, 4, 105), dtype=float32) at layer "Pretrain_input". The following previous layers were accessed without issue: []'

##### MAIN MODEL #####  # loading pretrained model main_model = load_model('models/main_model.h5')   # saving the output layer for reconstruction later config_output_layer = main_model.layers[-1].get_config() weights_output_layer = main_model.layers[-1].get_weights()   # removing the first and last layer (not sure if I need to remove the first layer, but I do this as I need an explicit 'entry point' for later concatenation with branching model later and re-compiling ) main_model.layers.pop(0) main_model.layers.pop(-1)   # new first layer, for input later main_input = Input(     shape=(x_train_main.shape[1], x_train_main.shape[2]),     name='Main_input')   # reconstructing last layer main_output = Dense.from_config(config_last_layer)(main_model.output)   # re-defining the main model new_main_model = Model(inputs=main_input, outputs=main_output)    ##### BRANCHING MODEL #####      branch_visible = Input(     shape=(x_train_branch.shape[1], x_train_branch.shape[2]),     name='Branch_input')   branch_hidden_0 = LSTM(     units=units_lstm_layer,     return_sequences=True,     name='Branch_hidden_0' )(branch_visible)   branch_dense = Dense(     units=units_dense_layer,     name='Branch_dense' )(branch_hidden_0)   ##### CONCAT THE MAIN AND THE BRANCH #####  concatenated_output = Concatenate(axis=-1)([main_output, branch_dense])   activation_layer = Dense(     units=units_activation_layer,     activation=activation,     name='Activation' )(concatenated_output)   final_model = Model(inputs=[main_visible, branch_visible], outputs=activation_layer) 
     
       
       

Lista de respuestas


Relacionados problema

1  Predicciones futuras LSTM  ( Future predictions lstm ) 
Tengo un conjunto de datos de 1400 longitud. Hice todas las operaciones y entrené un modelo <dom-module id="x-el"> <p class="special-paragraph">first par...

2  Formato de datos de entrada para RNN  ( Input data format for rnn ) 
Estoy confundido con la que exactamente codificar una secuencia de datos como una entrada a un LSTM RNN. En una vainilla DNN, hay una entrada para cada etiq...

3  Extraer el estado celular LSTM KERAS  ( Extract cell state lstm keras ) 
Me preguntaba si sería posible extraer el último estado celular de una LSTM en KERAS después de entrenar el modelo. Por ejemplo, en este simple modelo LSTM: ...

0  ERROR TENSORFLOW 2.3.0: La variable fue ininigializada. El contenedor localhost no existe  ( Error tensorflow 2 3 0 the variable was uninitialized container localhost doe ) 
i M usando TensorFlow 2.3.0 y Tengo el siguiente error ErrorPreciónContondicionError: Error al leer la variable de recursos RNN / MULTI_RNN_CELL / CELL_1 / ...

0  LTM TENSORFLOW Modelo que no toma en cuenta las secuencias  ( Lstm tensorflow model not taking sequences into account ) 
¡He estado luchando con este problema de mascotas por un tiempo ahora, por lo que cualquier ayuda sería apreciada! Tengo un archivo CSV, con algunas columna...

0  Uso de lstm / gru y aplanden lanza error de incompatibilidad dimensional  ( Usage of lstm gru and flatten throws dimensional incompatibility error ) 
Quiero hacer uso de un NN prometedor que encontré en HACIDO DESPIENCIA PARA MI ESTUDIO DE CASO. Las formas de datos que tengo son: nthreads == 30 Aquí...

0  ¿Los logés y etiquetas de ValueError deben tener la misma forma (?, 10) vs (2,2,?, 10)  ( Valueerror logits and labels must have the same shape 10 vs 2 2 10 ) 
Quiero actualizar una red neuronal simple usando 2 células LSTM. Arquitectura antigua (que funcionó): entrada = & gt; Rnn = & gt; Producción Nueva arquitectur...

0  Salida constante de un modelo de LSTM  ( Constant output of an lstm model ) 
He construido un modelo de LSTM. El conjunto de datos original contiene más de 2000 días de datos (los financieros) con 28 características. Utilicé 20 días pa...

0  No se pueden decidir las entradas para LSTM  ( Unable to decide inputs for lstm ) 
Tengo una entrada x_train de la forma (600000,2381). El código: def RNN(): inputs=Input(name='inputs',shape=(600000,2381,)) layer = LSTM(64,activat...

8  ¿Cómo alimentarse en LSTM con entrada 4 dimensional?  ( How to feed into lstm with 4 dimensional input ) 
Tengo una entrada de secuencia en esta forma: location: https://login.somehost.com/siteminderagent/nocert/1309460767/smgetcre d.scc?TYPE=16777217&REALM=-SM-D...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos