керас — график отключен: не удается получить значение для тензора керастенсора

#python #tensorflow #keras #text-classification

Вопрос:

Я пытался создать модель из 7 столбцов (функций) с помощью функционального API Keras и сопоставить ее с выводом 6 классов.

 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)
 

К сожалению, это привело к следующей ошибке:

 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: []
 

Мой список функций выглядит следующим образом:

  1. сообщение — текст
  2. описание — текст
  3. has_errors — int представляет значение bool
  4. has_panics — int представляет значение bool
  5. has_images — int представляет значение bool
  6. группы коммиттеров — категориальные входные данные
  7. группа репортеров — категориальные входные данные — 6 возможных значений в целом

Я пытался перейти по ссылке ниже: https://www.pyimagesearch.com/2019/02/04/keras-multiple-inputs-and-mixed-data/

итак, 2 вопроса:

  1. что приводит к вышеуказанной ошибке?
  2. Разве я не должен применить какое-то встраивание для текста?

Заранее спасибо

Ответ №1:

Почему вы создаете так много моделей, когда на самом деле хотите одну?

 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)
 

Я не запускал его, но мне кажется, что это может сработать.

Комментарии:

1. Так много моделей? есть только 1. Поскольку у меня 7 функций/столбцов, я создаю входные данные для каждого

Ответ №2:

Возможно, вам захочется взглянуть на имена переменных, которые у вас есть. Обычно GraphDisconnected ошибка вызвана наличием переопределенных имен в программе.