python - 使用 GCN-LSTM 为图表示的场景生成描述
问题描述
给定一个场景,我使用对象检测器检索其中包含的对象。接下来,我通过为每个一元关系指定最可能的属性(例如Cat
,具有属性的对象,"Sitting"
这意味着"The cat is sitting"
每个二元关系最可能的谓词(例如,[Cup - Table]
带有谓词的一对对象"On"
,这意味着"The cup is on the table"
)。
所有这些定义的关系都由一个有向图建模,其形式为:
- 每个节点代表场景的一个对象(带有它的 id)。
- 每个定义的一元关系(属性)都由一个循环(一个箭头,从节点到自身,具有相应的属性)建模。
- 每个定义的二元关系都由一个箭头建模,从一个节点(关系的左侧)到另一个节点(关系的右侧),并带有相应的谓词。
下图显示了从场景构建关系图的示例。后者包含四个对象:"cup 1"
、"cup 2"
和"cat"
a "table"
。定义的关系是:
- 一元关系(只有一个):对于
"cat"
对象("standing"
)。 - 二元关系(5 个关系):三个带有谓词
"on"
([Cat - Table]
,[Cup 1 - Table]
,[Cup 2 - Table]
),两个带有谓词"next to"
([Cat - Cup 1]
,[Cat - Cup 2]
)。
目标是训练GCN-LSTM
接收(输入)前一个图并返回(输出)描述(对应于该图,因此对应于初始场景)的 a。
对此的训练GCN-LSTM
是通过为每个训练场景创建它的图形(输入)和输出是它的描述(一段)来完成的。例如,对于上图,描述(用于训练)是:"The cat standing on the table is next to a couple of cups"
。上一个示例的过程如下图所示。
我寻找了类似问题的实现示例GCN-LSTM
(特别是在 的文档中StellarGraph
),但我一无所获。所以,我想知道,有没有办法使用 构建这样的模型StellarGraph
?如果是,如何?否则,哪个工具可以帮助我建立这个模型?
解决方案
GCN-LSTM 设计用于对具有节点特征的图进行编码,这些节点特征是序列,并对这些序列进行预测。在这种情况下,看起来您可能正在尝试对具有固定特征的图进行编码,然后使用该编码来生成句子。
为此,合适的模型是使用图分类模型,例如GCNSupervisedGraphClassification
或DeepGraphCNN
。这些可用于将图形编码为向量,以输入到单独的 LSTM 解码器中。
值得注意的是,这些模型不能轻易地结合边缘特征/类型,因此必须调整//建模on
的某些方面;例如作为特征并入节点中。next to
standing
例如,可以替换https://stellargraph.readthedocs.io/en/stable/demos/graph-classification/gcn-supervised-graph-classification.html#Create-theDense(units=1, activation="sigmoid")
中的最后一层(或更多Dense
层)-Keras-graph-classification-model具有更复杂的解码器模型(即 LSTM)。
(这个答案是从我对 StellarGraph 社区论坛上提出的一个非常相似(相同?)的问题的回答中复制而来的:original,archive。)
推荐阅读
- java - 如何在左端设置水平滚动窗格的起始位置?
- reactjs - 如何在不刷新客户端的情况下动态指示另一个用户正在编辑记录
- python - 我们如何构建一个节点 api,它将向用户发送邮件并生成 otp 以访问我的 python 微服务
- react-native - 在一行中渲染两个图像反应原生
- python - 当我在 python 中使用列表类型变量时,我不明白逻辑。为什么它以这种方式工作?
- javascript - 将线性渐变应用于 CanvasPattern (Canvas API)
- powershell - 使用哪个 cmdlet 在 DNS 服务器上的主区域下创建域(文件夹)?
- kubernetes - 如何在对 Kubernetes 服务的请求上使用 Session Affinity?
- kubernetes - Rancher 使用自托管和云提供商?
- laravel-5 - 根据多态关系中的模型类型获取所有记录