Обучение модели регрессии GCN, но получение плохих результатов точности и прогноза

Я пытаюсь построить модель, которая может считывать данные моего графика и использовать функции узла со взвешенными данными смежности для прогнозирования конкретных целей. Я начал с 21 выборочного узла, каждый из которых имел набор из 16801 функций, их индексы для определения узлов обучения, проверки и тестирования посредством обучения, а также смежность, определяющую соответствующие взвешенные значения ребер.

      x_features #shape=(1, 21, 16801) dtype=float32
x_indices #shape=(1, None) dtype=int32
x_adjacency #shape=(1, 21, 21) dtype=float32

Цели прогнозирования сохраняются в отдельных списках целей:

      y_train = np.expand_dims(train_targets, 0).astype(np.float32)
y_val = np.expand_dims(val_targets, 0).astype(np.float32)
y_test = np.expand_dims(test_targets, 0).astype(np.float32)

y_train #array([[[32.],[31.],[27.],[29.],[28.],[35.],[35.],[27.],[33.],[26.]]], dtype=float32)

Модель выглядит следующим образом:

      x = Dropout(0.5)(x_features)
x = GraphConvolution(32, activation='relu', 
                     use_bias=True,
                     kernel_initializer=kernel_initializer,
                     bias_initializer=bias_initializer)([x, x_adjacency])
x = Dropout(0.5)(x)
x = GraphConvolution(16, activation='relu', 
                     use_bias=True,
                     kernel_initializer=kernel_initializer,
                     bias_initializer=bias_initializer)([x, x_adjacency])

x = GatherIndices(batch_dims=1)([x, x_indices])
output = Dense(1, activation='linear')(x)
model = Model(inputs=[x_features, x_indices, x_adjacency], outputs=output)
model.summary()

Краткое описание модели

      model.compile(
    optimizer=SGD(learning_rate=0.1, momentum=0.9),
    loss='mean_squared_error',
    metrics=["acc"],
)
history = model.fit(
    x = [features_input, train_indices, A_input], #features_input.shape:(1, 21, 16801). train_indices.shape:(1,10). A_input.shape:(1, 21, 21)
    y = y_train, #y_train.shape:(1, 10, 1)
    batch_size = 32,
    epochs=200,
    validation_data=([features_input, val_indices, A_input], y_val),
    verbose=1,
    shuffle=False,
)

Я достигаю последней эпохи с помощью:
Epoch 200/200 1/1 [=============================] - 0s 31ms/step - loss: nan - acc: 0.0000e+00 - val_loss: nan - val_acc: 0.0000e+00

      test_preds = model.predict([features_input, test_indices, A_input])
print('test_preds:\n' , test_preds,'\n\n y_test:\n',  y_test)

выходы:

      test_preds: [ [ [nan][nan][nan][nan][nan][nan] ] ]         
y_test: [ [ [28.][32.][30.][34.][32.][35.] ] ]

0 ответов

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