keras - Graph disconnected: cannot obtain value for tensor KerasTensor

Viewed 2584

I've been trying to create a 7 columns (features) model with Keras functional API and map it to the a 6 classes output.

import tensorflow as tf
from tensorflow.keras import Model
from tensorflow.keras.layers import Input, Dense, Concatenate

input_message = Input(shape=(128,))
x = Dense(64, activation="relu")(input_message)
x = Dense(32, activation="relu")(x)
x = Dense(4, activation="relu")(x)
model_message = Model(inputs=input_message, outputs=x)

input_description = Input(shape=(128,))
x = Dense(64, activation="relu")(input_description)
x = Dense(32, activation="relu")(x)
x = Dense(4, activation="relu")(x)
model_description = Model(inputs=input_description, outputs=x)

input_errors = Input(shape=(2,))
x = Dense(1, activation="relu")(input_errors)
model_errors = Model(inputs=input_errors, outputs=x)

input_panics = Input(shape=(2,))
x = Dense(1, activation="relu")(input_panics)
model_panics = Model(inputs=input_panics, outputs=x)

input_images = Input(shape=(2,))
x = Dense(1, activation="relu")(input_images)
model_images = Model(inputs=input_images, outputs=x)

input_committer = Input(shape=(16,))
x = Dense(4, activation="relu")(input_description)
model_committer = Model(inputs=input_committer, outputs=x)

input_reporter = Input(shape=(6,))
x = Dense(1, activation="relu")(input_reporter)
model_reporter = Model(inputs=input_reporter, outputs=x)

combined = Concatenate()([model_message.output, model_description.output, model_errors.output, 
                         model_panics.output, model_images.output, model_committer.output, model_reporter.output])

z = Dense(6, activation='softmax')(combined)
model = Model(inputs=[model_message.input, model_description.input, model_errors.input, 
                     model_panics.input, model_images.input, model_committer.input, model_reporter.input], 
              outputs=z)

Sadly it was resulted in the below error:

ValueError: Graph disconnected: cannot obtain value for tensor KerasTensor(type_spec=TensorSpec(shape=(None, 128), dtype=tf.float32, name='input_23'), name='input_23', description="created by layer 'input_23'") at layer "dense_74". The following previous layers were accessed without issue: []

My feature list is as follows:

  1. message - text
  2. description - text
  3. has_errors - int represents a bool value
  4. has_panics - int represents a bool value
  5. has_images - int represents a bool value
  6. committer groups - categorical inputs
  7. reporter group - categorical inputs - 6 possible values overall

I've been trying to follow the below link: https://www.pyimagesearch.com/2019/02/04/keras-multiple-inputs-and-mixed-data/

so 2 questions:

  1. what yields the above error?
  2. Shouldn't I apply some kind of embedding for the text?

Thanks in advance

2 Answers

You may want to look at the variable names that you have. Usually the GraphDisconnected error is caused by having overriding names in the program.

Why are you creating so many models when you actually want one?

import tensorflow as tf
from tensorflow.keras import Model
from tensorflow.keras.layers import Input, Dense, Concatenate

input_message = Input(shape=(128,))
x = Dense(64, activation="relu")(input_message)
x = Dense(32, activation="relu")(x)
x1 = Dense(4, activation="relu")(x)

input_description = Input(shape=(128,))
x = Dense(64, activation="relu")(input_description)
x = Dense(32, activation="relu")(x)
x2 = Dense(4, activation="relu")(x)

input_errors = Input(shape=(2,))
x3 = Dense(1, activation="relu")(input_errors)

input_panics = Input(shape=(2,))
x4 = Dense(1, activation="relu")(input_panics)

input_images = Input(shape=(2,))
x5 = Dense(1, activation="relu")(input_images)

input_committer = Input(shape=(16,))
x6 = Dense(4, activation="relu")(input_description)

input_reporter = Input(shape=(6,))
x7 = Dense(1, activation="relu")(input_reporter)

combined = Concatenate()([x1,x2,x3,x4,x5,x6,x7])

z = Dense(6, activation='softmax')(combined)
model = Model(inputs=[input_message,input_description,input_errors,input_panics,input_images,input_committer,input_reporter ], 
              outputs=z)

I haven't run it but this seems like it could work to me.

Related