h_dst = h[str(edge_type)][block.dstdata[dgl.NID]]
时间: 2023-06-25 19:02:45 浏览: 184
这行代码是使用字符串类型的 edge_type 作为字典 h 的键,获取目标节点的特征向量。具体来说,block 是一个 DGL 的子图对象,它包含了当前处理的这一层图中的所有节点和边。block.dstdata[dgl.NID] 返回当前子图中所有目标节点的 ID,这些 ID 会被用作字典 h 的键的索引。因此,h[str(edge_type)][block.dstdata[dgl.NID]] 返回了一个形状为 (num_dst_nodes, hidden_size) 的张量,表示当前处理的这一层图中所有目标节点的特征向量。
相关问题
class GraphSAGE(nn.Module): def __init__(self, in_feats, hidden_feats, out_feats, num_layers, activation): super(GraphSAGE, self).__init__() self.num_layers = num_layers self.conv1 = SAGEConv(in_feats, hidden_feats, aggregator_type='mean') self.convs = nn.ModuleList() for i in range(num_layers - 2): self.convs.append(SAGEConv(hidden_feats, hidden_feats, aggregator_type='mean')) self.conv_last = SAGEConv(hidden_feats, out_feats, aggregator_type='mean') self.activation = activation def forward(self, blocks, x): h = x for i, block in enumerate(blocks): h_dst = h[:block.number_of_dst_nodes()] h = self.convs[i](block, (h, h_dst)) if i != self.num_layers - 2: h = self.activation(h) h = self.conv_last(blocks[-1], (h, h_dst)) return h改写一下,让它适用于异质图
class GraphSAGE(nn.Module):
def __init__(self, in_feats, hidden_feats, out_feats, num_layers, activation):
super(GraphSAGE, self).__init__()
self.num_layers = num_layers
self.conv1 = SAGEConv(in_feats, hidden_feats, aggregator_type='mean')
self.convs = nn.ModuleList()
for i in range(num_layers - 2):
self.convs.append(SAGEConv(hidden_feats, hidden_feats, aggregator_type='mean'))
self.conv_last = SAGEConv(hidden_feats, out_feats, aggregator_type='mean')
self.activation = activation
def forward(self, blocks, x_dict):
h = {k: v for k, v in x_dict.items()}
for i, block in enumerate(blocks):
edge_type = block.edata['type']
h_dst = h[str(edge_type)][block.dstdata[dgl.NID]]
h = self.convs[i](block, (h, h_dst))
if i != self.num_layers - 2:
h = self.activation(h)
h_dst = h[str(edge_type)][blocks[-1].dstdata[dgl.NID]]
h = self.conv_last(blocks[-1], (h, h_dst))
return h
gray_fft = np.fft.fft2(gray) gray_fftshift = np.fft.fftshift(gray_fft) dst_fftshift = np.zeros_like(gray_fftshift) M, N = np.meshgrid(np.arange(-cols // 2, cols // 2), np.arange(-rows // 2, rows // 2)) D = np.sqrt(M ** 2 + N ** 2) Z = (rh - r1) * (1 - np.exp(-c * (D ** 2 / d0 ** 2))) + r1 dst_fftshift = Z * gray_fftshift dst_fftshift = (h - l) * dst_fftshift + l dst_ifftshift = np.fft.ifftshift(dst_fftshift) dst_ifft = np.fft.ifft2(dst_ifftshift) dst = np.real(dst_ifft) dst = np.uint8(np.clip(dst, 0, 255)) return dst
在这个函数中,首先使用np.fft.fft2函数将输入图像进行二维傅里叶变换,然后使用np.fft.fftshift函数将变换结果进行中心化处理。接下来,创建一个与输入图像大小相同的全零数组dst_fftshift,并计算出输入图像的行数和列数。
函数接着使用np.meshgrid函数生成网格坐标,并根据频率域滤波器的公式计算出增益系数Z。然后,将增益系数Z乘以中心化的傅里叶变换结果gray_fftshift,得到增益后的频率域图像dst_fftshift。
接着,将增益后的频率域图像dst_fftshift乘以(h - l),再加上l,得到最终的频率域图像。然后,使用np.fft.ifftshift函数将频率域图像逆中心化,并使用np.fft.ifft2函数将其转换回空间域。最后,将输出图像进行限幅处理,转换为8位无符号整数类型,然后返回输出图像。
阅读全文