#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: []
Мой список функций выглядит следующим образом:
- сообщение — текст
- описание — текст
- has_errors — int представляет значение bool
- has_panics — int представляет значение bool
- has_images — int представляет значение bool
- группы коммиттеров — категориальные входные данные
- группа репортеров — категориальные входные данные — 6 возможных значений в целом
Я пытался перейти по ссылке ниже: https://www.pyimagesearch.com/2019/02/04/keras-multiple-inputs-and-mixed-data/
итак, 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
ошибка вызвана наличием переопределенных имен в программе.