Построить график KNN по некоторому подмножеству функций узла
У меня есть облако точек, в котором я хочу использовать графическую нейронную сеть. Каждая точка в облаке точек характеризуется своими координатами положения, а также цветом. Итак, один узел
(X, Y, Z, C)
.
Теперь я хочу применить к этому краю свертку (как описано в примере DGL Edge-Conv, и для этого я должен построить граф ближайших соседей на
(X, Y, Z)
(И не на C), а затем использовать все 4 свойства в качестве функций для моей нейронной сети.
Что было бы чистым и эффективным способом сделать это? (У меня много данных, поэтому я хочу хорошо сгруппировать и сопоставить)
1 ответ
Предположим, у вас есть тензор
pc
формы
(NUM_POINTS, 4)
где каждая строка
(X, Y, Z, C)
, тогда вы можете использовать
sklearn
следующим образом:
from sklearn.neighbors import NearestNeighbors
import dgl
k = 3 # number of neighbours you want
neigh = NearestNeighbors(n_neighbors=k)
neigh.fit(pc[:, :3].numpy()) # selects only (X, Y, Z)
knn = neigh.kneighbors_graph()
graph = dgl.from_scipy(knn)
graph.ndata['x'] = pc
Я бы рекомендовал сохранять эти графики на диск, чтобы они не вычислялись каждый раз, когда вы тренируетесь и т. Д.