keras-gcn 拟合模型 ValueError
keras-gcn fit model ValueError
我正在使用 this library 创建模型来学习图形。这是代码(来自存储库):
import numpy as np
from keras_gcn.backend import keras
from keras_gcn import GraphConv
# feature matrix
input_data = np.array([[[0, 1, 2],
[2, 3, 4],
[4, 5, 6],
[7, 7, 8]]])
# adjacency matrix
input_edge = np.array([[[1, 1, 1, 0],
[1, 1, 0, 0],
[1, 0, 1, 0],
[0, 0, 0, 1]]])
labels = np.array([[[1],
[0],
[1],
[0]]])
data_layer = keras.layers.Input(shape=(None, 3), name='Input-Data')
edge_layer = keras.layers.Input(shape=(None, None), dtype='int32', name='Input-Edge')
conv_layer = GraphConv(units=4, step_num=1, kernel_initializer='ones',
bias_initializer='ones', name='GraphConv')([data_layer, edge_layer])
model = keras.models.Model(inputs=[data_layer, edge_layer], outputs=conv_layer)
model.compile(optimizer='adam', loss='mae', metrics=['mae'])
model.fit([input_data, input_edge], labels)
但是,当我 运行 代码时,出现以下错误:
ValueError: Error when checking target: expected GraphConv to have 3 dimensions, but got array with shape (4, 1)
而标签的形状是 (1, 4, 1)
我认为问题是您的 edge_layer 和 data_layer 的形状不匹配。
当你使用函数 keras.layers.Input
时,你给 data_layer 一个 shape=(None, 3)
的形状,然后你给 edge_layer
一个 shape=(None, None)
的形状]
匹配形状,让我知道结果如何。
您应该使用 onehot-encoder 对您的标签进行编码,如下所示:
lables = np.array([[[0, 1],
[1, 0],
[0, 1],
[1, 0]]])
此外,GraphConv
层中的单元数应等于唯一标签的数量,在您的情况下为 2。
我正在使用 this library 创建模型来学习图形。这是代码(来自存储库):
import numpy as np
from keras_gcn.backend import keras
from keras_gcn import GraphConv
# feature matrix
input_data = np.array([[[0, 1, 2],
[2, 3, 4],
[4, 5, 6],
[7, 7, 8]]])
# adjacency matrix
input_edge = np.array([[[1, 1, 1, 0],
[1, 1, 0, 0],
[1, 0, 1, 0],
[0, 0, 0, 1]]])
labels = np.array([[[1],
[0],
[1],
[0]]])
data_layer = keras.layers.Input(shape=(None, 3), name='Input-Data')
edge_layer = keras.layers.Input(shape=(None, None), dtype='int32', name='Input-Edge')
conv_layer = GraphConv(units=4, step_num=1, kernel_initializer='ones',
bias_initializer='ones', name='GraphConv')([data_layer, edge_layer])
model = keras.models.Model(inputs=[data_layer, edge_layer], outputs=conv_layer)
model.compile(optimizer='adam', loss='mae', metrics=['mae'])
model.fit([input_data, input_edge], labels)
但是,当我 运行 代码时,出现以下错误:
ValueError: Error when checking target: expected GraphConv to have 3 dimensions, but got array with shape (4, 1)
而标签的形状是 (1, 4, 1)
我认为问题是您的 edge_layer 和 data_layer 的形状不匹配。
当你使用函数 keras.layers.Input
时,你给 data_layer 一个 shape=(None, 3)
的形状,然后你给 edge_layer
一个 shape=(None, None)
的形状]
匹配形状,让我知道结果如何。
您应该使用 onehot-encoder 对您的标签进行编码,如下所示:
lables = np.array([[[0, 1],
[1, 0],
[0, 1],
[1, 0]]])
此外,GraphConv
层中的单元数应等于唯一标签的数量,在您的情况下为 2。