Несовместимые формы в Stellargraph

Я пытаюсь реализовать небольшой прототип модели GCN, используя библиотеку Stellargraph. У меня готов объект графика StellarGraph, я пытаюсь решить проблему классификации нескольких классов с несколькими метками. Это означает, что я пытаюсь предсказать более одного столбца (точно 19), каждый столбец закодирован либо в 0, либо в 1.

Вот что я сделал:

      from sklearn.model_selection import train_test_split
from stellargraph.mapper import FullBatchNodeGenerator

train_subjects, test_subjects = train_test_split(nodelist, test_size = .25)
generator = FullBatchNodeGenerator(graph, method="gcn")
      from stellargraph.layer import GCN

train_gen = generator.flow(train_subjects['ID'], train_subjects.drop(['ID'], axis = 1))
gcn = GCN(layer_sizes=[16, 16], activations=["relu", "relu"], generator=generator, dropout=0.5)
      from tensorflow.keras import layers, optimizers, losses, metrics, Model

x_inp, x_out = gcn.in_out_tensors()
predictions = layers.Dense(units = 1, activation="sigmoid")(x_out)
      from tensorflow.keras.metrics import Precision as Precision
​
model = Model(inputs=x_inp, outputs=predictions)
model.compile(
    optimizer=optimizers.Adam(learning_rate = 0.01),
    loss=losses.categorical_crossentropy,
    metrics= [Precision()])

val_gen = generator.flow(test_subjects['ID'], test_subjects.drop(['ID'], axis = 1))
      from tensorflow.keras.callbacks import EarlyStopping

es_callback = EarlyStopping(monitor="val_precision", patience=200, restore_best_weights=True)

history = model.fit(
    train_gen,
    epochs=200,
    validation_data=val_gen,
    verbose=2,
    shuffle=False,  
    callbacks=[es_callback])

Всего у меня 271045 ребер и 16354 узла, включая 12265 обучающих узлов. Проблема, которую я получаю, - это несоответствие формы от Кераса. В нем говорится следующее. Я подозреваю, что это связано с вставкой нескольких столбцов в качестве целевых столбцов. Я пробовал модель, используя только один столбец (класс), и она работала отлично.

      InvalidArgumentError:  Incompatible shapes: [1,12265] vs. [1,233035]
     [[node LogicalAnd_1 (defined at tmp/ipykernel_52/2745570431.py:7) ]] [Op:__inference_train_function_1405]

Стоит отметить, что 233035 = 12265 (количество узлов поезда) умножить на 19 (количество классов). Любая идея о том, что здесь происходит не так?

1 ответ

Я понял проблему.

Это была ошибка новичка, я инициализировал слой Dense Classification с 1 единицей вместо 19 (количество классов).

Мне просто нужно было исправить эту строку:

      predictions = layers.Dense(units = 19, activation="sigmoid")(x_out)

Хорошего дня!

Другие вопросы по тегам