代码链接:https://github.com/ICDM-UESTC/TrustGeo
└── TrustGeo
├── datasets # 包含3个大规模的真实街道IP地理位置数据集。
│ |── New_York # 从纽约市收集的街道级IP地理定位数据集,包括91,808个IP地址。
│ |── Los_Angeles # 从洛杉矶收集的街道级IP地理定位数据集,包括92,804个IP地址。
│ |── Shanghai # 收集自上海的街道级IP地理定位数据集,包括126,258个IP地址。
├── lib # 包含模型(model)实现文件
│ |── layers.py # 注意力机制的代码。
│ |── model.py # TrustGeo的核心源代码。
│ |── sublayers.py # layer.py的支持文件。
│ |── utils.py # 辅助函数,包括视图融合的代码
├── asset # 包含运行模型时保存的检查点和日志
│ |── log # 包含运行模型时保存的日志
│ |── model # 包含运行模型时保存的检查点
├── preprocess.py # 预处理数据集并为模型运行执行IP聚类
├── main.py # 运行模型进行训练和测试
├── test.py #加载检查点,然后测试
└── README.md
一、导入模块
import torch.nn as nn
import torch
from .sublayers import MultiHeadAttention, PositionwiseFeedForward
import numpy as np
import torch.functional as F
这段代码是一个自定义的神经网络模块,其中使用了 PyTorch 库。
该部分实现与RIPGeo完全一致
RIPGeo代码理解(三)layers.py(注意力机制的代码)-CSDN博客
二、SimpleAttention类定义(NN模型)
class SimpleAttention(nn.Module):
''' Just follow GraphGeo '''
def __init__(self, temperature, attn_dropout=0.1, d_q_in=32, d_q_out=32, d_k_in=32, d_k_out=32, d_v_in=32,
d_v_out=32, dropout=0.1, drop_last_layer=False):
super().__init__()
self.temperature = temperature
self.dropout = nn.Dropout(attn_dropout)
self.q_w = nn.Linear(d_q_in, d_q_out)
self.k_w = nn.Linear(d_k_in, d_k_out)
if not drop_last_layer:
self.v_w = nn.Linear(d_v_in, d_v_out)
self.drop_last_layer = drop_last_layer
# se