常见的图embedding的方法

参考代码:

https://github.com/keras-team/keras/blob/master/examples/pretrained_word_embeddings.py

转:https://blog.youkuaiyun.com/k284213498/article/details/83474972

keras.layers.embeddings.Embedding(input_dim, output_dim, embeddings_initializer='uniform', embeddings_regularizer=None, activity_regularizer=None, embeddings_constraint=None, mask_zero=False, input_length=None)

嵌入层将正整数(下标)转换为具有固定大小的向量,如[[4],[20]]->[[0.25,0.1],[0.6,-0.2]]

Embedding层只能作为模型的第一层

参数

  • input_dim:大或等于0的整数,字典长度,即输入数据最大下标+1

  • output_dim:大于0的整数,代表全连接嵌入的维度

  • embeddings_initializer: 嵌入矩阵的初始化方法,为预定义初始化方法名的字符串,或用于初始化权重的初始化器。参考initializers

  • embeddings_regularizer: 嵌入矩阵的正则项,为Regularizer对象

  • embeddings_constraint: 嵌入矩阵的约束项,为Constraints对象

  • mask_zero:布尔值,确定是否将输入中的‘0’看作是应该被忽略的‘填充’(padding)值,该参数在使用递归层处理变长输入时有用。设置为True的话,模型中后续的层必须都支持masking,否则会抛出异常。如果该值为True,则下标0在字典中不可用,input_dim应设置为|vocabulary| + 1。

  • input_length:当输入序列的长度固定时,该值为其长度。如果要在该层后接Flatten层,然后接Dense层,则必须指定该参数,否则Dense层的输出维度无法自动推断。

输入shape

形如(samples,sequence_length)的2D张量

输出shape

形如(samples, sequence_length, output_dim)的3D张量

转处:https://blog.youkuaiyun.com/ckqsars/article/details/78184834

在图计算中,如何把图中的结点进行嵌入变成可计算的值或者向量一直是现在研究所关注的问题,初次学习,记录常用的embedding的方法。 

主流方法主要有三大类: 
1)factorization methods 
2) random walk techniques 
3) deep learning 
本文主要介绍第一类和第二类中比较知名的算法,若有不足欢迎补充。 
1)factorization methods 
此类方法主要是通过用矩阵的方式去描述形成的网络,并通过矩阵分解来得到每个结点的嵌入。 
1.1) 
Locally Linear Embedding 
假设:每个网络的结点的embedding的值是和其所连接结点的线性组合,则可以表达为式(1) 
Yi≈∑jWijYj∀i∈V(1)(1)Yi≈∑jWijYj∀i∈V

因此我们可以通过(2)式得到我们想要的每个一个结点的embedding。 
ϕ(Y)=∑i|Yi−∑jWijYj|(2)(2)ϕ(Y)=∑i|Yi−∑jWijYj|

为了防止退化的基可行解(degenerate solution)<并不知道这是个什么东西,知道的人可以在评论解释下> 
进行了以下约束

 

s.t.1NYTY=I∑iYi=0s.t.1NYTY=I∑iYi=0

 

1.2) 
Laplacian Eigenmaps 
假设:如果两个结点它们之间的连边对应的权重越大,则表明这两个节点越相近,因此在embedding之后对应的值应该越相近。 因此可以得到一下最优化目标: 

ϕ(Y)=12∑i,j(Yi−Yj)2Wij=YTLYϕ(Y)=12∑i,j(Yi−Yj)2Wij=YTLY

 

其中L是对应的网络的拉布拉斯矩阵。即L=D−AL=D−A。DD 是度矩阵,AA是邻接矩阵。这个解可以被看为特征向量对应于标准化的拉布拉斯矩阵的d最小的特征值,标准拉布拉斯矩阵如下:Lnorm=D−1/2LD−1/2Lnorm=D−1/2LD−1/2

1.3)

Graph Factorization 
假设两个结点所代表的变量之积与两节点之间的变等价,因此构造目标函数如下: 

ϕ(Y,λ)=12∑(i,j)∈E(Wij−<Yi,Yj>)2+λ2∑i||Yi||2ϕ(Y,λ)=12∑(i,j)∈E(Wij−<Yi,Yj>)2+λ2∑i||Yi||2

 

1.4)

GraRep 
这个跟HOPE很相近所以直接介绍HOPE。

HOPE 
目标函数: 

|S−YsYTt||2F|S−YsYtT||F2

 

其中,S是相似度矩阵,具体见文章Asymmetric transitivity preserving graph embedding

2)random walk techniques

(未完待续)

参考文献Graph Embedding Techniques,Applications, and Performance: A Survey

### Embedding 技术详解 #### 实现方法 片嵌入(Embedding)是指将像转换成固定长度的向量表示形式,这些向量能够捕捉原始像的关键特征并保留其语义信息。这一过程通常依赖于深度神经网络中的卷积层来提取空间结构化特性[^1]。 对于具体的实现方式,可以采用预训练好的模型如ResNet、VGG等作为基础框架,并通过微调适应特定任务需求。下面是一个简单的例子展示如何利用PyTorch加载一个预训练过的ResNet50模型来进行片编码: ```python import torch from torchvision import models, transforms from PIL import Image def get_image_embedding(image_path): model = models.resnet50(pretrained=True) preprocess = transforms.Compose([ transforms.Resize(256), transforms.CenterCrop(224), transforms.ToTensor(), transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]), ]) img = Image.open(image_path) input_tensor = preprocess(img).unsqueeze(0) with torch.no_grad(): output = model(input_tensor) return output.flatten().numpy() ``` 这段代码展示了怎样使用Python和PyTorch库获取给定片的低维向量表达。这里选择了ResNet50作为一个强大的特征抽取器;输入片经过一系列变换操作调整大小后送入网络中得到最终的结果——即该片对应的embeddings。 #### 应用场景 embedding广泛应用于多个领域,尤其是在涉及大规模数据分析的任务里表现突出。以下是几个典型的应用实例: - **相似性检索**:基于计算不同对象间距离度量的方式快速定位数据库中最接近查询样本的数据项; - **分类识别**:当面对多类别标注问题时,可以通过监督学习算法训练出区分各类别的决策边界; - **聚类分析**:无标签情况下自动发现潜在模式或群体关系,帮助理解复杂数据集内部结构; - **推荐系统**:结合用户行为日志挖掘偏好趋势,从而提供个性化服务建议。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值