0

我尝试在图中找到属于特定结构(例如集团)的节点。因此,我必须在输出上有一个向量[0,0,1,0,1,1,0 .......],其中 1 表示属于派系的节点。

我的输入是图,其中图的每个节点都由嵌入向量表示,输入采用以下形式:

[[-1.548624, 2.6481668, 0.21574, -0.324527 ........]
[.....] ...[.....]].

问题是我的模型只学习两个类中的一个,(1)或(0)取决于数据集中的更大存在。在进行数据重新平衡后,结果的准确度约为 0.5。

我尝试了数据重新平衡,改变嵌入方法,但结果保持不变。

有谁知道是什么导致了这个问题?这是代码:

def model(input_shape):
    model = Sequential()
    model.add(Conv1D(30,3,input_shape=input_shape,activation="sigmoid"))
    model.add(MaxPool1D(9))
    model.add(LSTM(50,return_sequences=True))
    model.add(Flatten())
    model.add(Dense(889,activation="sigmoid"))
    #model.summary()
    opt = tf.keras.optimizers.SGD(learning_rate=0.01)
    model.compile(loss='mse',optimizer='sgd',metrics=['binary_accuracy'])
    return model

train_x,train_y,test_x,test_y,val_x,val_y = load_data()
model=model((889,64))
model.fit(train_x,train_y,validation_data=(val_x,val_y),epochs=500,batch_size=4)

我不确定我的(激活函数、损失、度量),即使给出的最佳结果是这样。

120/120 [==============================] - 4s 13ms/step - loss: 0.7967 - binary_accuracy: 0.3721 - val_loss: 0.4342 - val_binary_accuracy: 0.3979
Epoch 2/8
120/120 [==============================] - 1s 8ms/step - loss: 0.3795 - binary_accuracy: 0.4164 - val_loss: 0.2758 - val_binary_accuracy: 0.4871
Epoch 3/8
120/120 [==============================] - 1s 8ms/step - loss: 0.2594 - binary_accuracy: 0.5262 - val_loss: 0.2304 - val_binary_accuracy: 0.6379
Epoch 4/8
120/120 [==============================] - 1s 8ms/step - loss: 0.2255 - binary_accuracy: 0.6643 - val_loss: 0.2181 - val_binary_accuracy: 0.6910
Epoch 5/8
120/120 [==============================] - 1s 8ms/step - loss: 0.2161 - binary_accuracy: 0.6914 - val_loss: 0.2148 - val_binary_accuracy: 0.6921
Epoch 6/8
120/120 [==============================] - 1s 8ms/step - loss: 0.2136 - binary_accuracy: 0.6922 - val_loss: 0.2139 - val_binary_accuracy: 0.6921
Epoch 7/8
120/120 [==============================] - 1s 8ms/step - loss: 0.2132 - binary_accuracy: 0.6917 - val_loss: 0.2137 - val_binary_accuracy: 0.6921
Epoch 8/8
120/120 [==============================] - 1s 8ms/step - loss: 0.2129 - binary_accuracy: 0.6919 - val_loss: 0.2136 - val_binary_accuracy: 0.6921
5/5 [==============================] - 0s 11ms/step - loss: 0.2137 - binary_accuracy: 0.6915
[0.21371755003929138, 0.6915410757064819]

提前感谢您的反馈;)。

4

1 回答 1

0

首先,1D convs 与 2D convs 有很大不同。对于 2D convs,您希望将内核大小保持在较低水平,因为计算数量与内核大小 C*K^2 的平方成比例(对于 3d convs,它会被立方!),但对于 1D,它是线性缩放的。你真的想增加那个内核大小。

其次,您需要对某些 ​​ML 方法的输入进行标准化,神经网络就是其中之一。

最后,我有点担心 CNN 无论如何都是错误的方法。最重要的是,您有一个 LSTM,我并没有真正遵循。也许从几个密集层作为一个好的基线开始。

一个调试技巧,制作一个非常小的数据集,并确保你可以过拟合,即记住训练集。

于 2021-03-23T17:28:01.860 回答