torch_geometric – Pooling Layers

global_add_pool

通过在节点维度上添加节点特征来返回批量图级输出,因此对于单个图
它的输出由下式计算

from torch_geometric.nn import global_mean_pool, global_max_pool, global_add_pool
import torch as thf = [[1,2,3,4,5], [6,7,8,9,10], [0,0,1,1,1],[2,2,2,0,0],[3,0,3,0,3]]
batch = [0, 0, 0, 1, 1]f_t = th.tensor(f)
batch_t = th.tensor(batch)result_add = global_add_pool(f_t, batch_t)
print(result_add)
-----------------------------------
tensor([[ 7,  9, 12, 14, 16],[ 5,  2,  5,  0,  3]])

global_mean_pool

通过在节点维度上平均节点特征返回批量图级输出,因此对于单个图
它的输出由下式计算

from torch_geometric.nn import global_mean_pool, global_max_pool, global_add_pool
import torch as thf = [[1,2,3,4,5], [6,7,8,9,10], [0,0,1,1,1],[2,2,2,0,0],[3,0,3,0,3]]
batch = [0, 0, 0, 1, 1]f_t = th.tensor(f)
batch_t = th.tensor(batch)result_mean = global_mean_pool(f_t, batch_t)
print(result_mean)
------------------------------
tensor([[2, 3, 4, 4, 5],[2, 1, 2, 0, 1]])

global_max_pool

通过在节点维度上获取通道方面的最大值来返回批处理图级输出,因此对于单个图
它的输出由下式计算

from torch_geometric.nn import global_mean_pool, global_max_pool, global_add_pool
import torch as thf = [[1,2,3,4,5], [6,7,8,9,10], [0,0,1,1,1],[2,2,2,0,0],[3,0,3,0,3]]
batch = [0, 0, 0, 1, 1]f_t = th.tensor(f)
batch_t = th.tensor(batch)result_max = global_max_pool(f_t, batch_t)
print(result_max)
-------------------------------------------
tensor([[ 6,  7,  8,  9, 10],[ 3,  2,  3,  0,  3]])

TopKPooling

来自“Graph U-Nets”、“Towards Sparse Hierarchical Graph Classifiers”和“Understanding Attention and Generalization in Graph Neural Networks”论文的 pooling operator

from torch_geometric.nn import TopKPooling
import torch as thf = [[1,2,3,4,5], [6,7,8,9,10], [0,0,1,1,1], [2,2,2,0,0], [3,0,3,0,3]]
edge_index = [[0,1],[2,0],[3,4]]
batch = [0, 0, 0, 1, 1]edge_index_t = th.tensor(edge_index)
f_t = th.tensor(f)
batch_t = th.tensor(batch)topkp = TopKPooling(in_channels=5)
reslut = topkp(x = f_t, edge_index=edge_index_t, batch=batch_t)
print(reslut)
------------------------------------------------------------------
(tensor([[5.9999, 6.9998, 7.9998, 8.9998, 9.9998],[0.9965, 1.9930, 2.9895, 3.9860, 4.9825],[2.9566, 0.0000, 2.9566, 0.0000, 2.9566]], grad_fn=<MulBackward0>), tensor([[0],[1]]), None, tensor([0, 0, 1]), tensor([1, 0, 4]), tensor([1.0000, 0.9965, 0.9855], grad_fn=<IndexBackward0>))

SAGPooling

来自“Self-Attention Graph Pooling”和“Understanding Attention and Generalization in Graph Neural Networks”论文的self-attention pooling算子

参数

  • in_channels (int) – 每个输入样本的大小
  • ratio (float or int) – 图池比率,用于计算k比率,或k本身的值,取决于比率的类型是float还是int。如果min score不是None,则忽略此值。(默认值:0.5)
  • GNN (torch.nn.Module, optional) – 用于计算投影分数的图神经网络层(convc.graphconv, convc.gcnconv, convc.gatconvconvc.sageconv之一)。(默认值:conv.GraphConv)
  • min_score (float, optional) – 最小节点分数a~\tilde{a}a~用于计算池中节点i=yi>a~i=y_i>\tilde{a}i=yi​>a~的索引。当该值不为None时,将忽略ratio参数。(默认值:无)
  • multiplier (float, optional) – 池化后特征相乘的系数。这对于大型图形和使用min_score被使用。(默认值:1)
  • nonlinearity (str or callable, optional) – 要用到的非线性。(默认:“tanh”)

方法

  • reset_parameters()

forward

  • x(torch.Tensor) – 节点特征矩阵。
  • edge_index (torch.Tensor) – 边索引
  • edge_attr (torch.Tensor, optional) – 边缘特征。(默认值:None)
  • batch (torch.Tensor, optional) – 批处理向量b∈{0,...,B−1}Nb \in \{0,...,B-1\}^Nb∈{0,...,B−1}N,它将每个节点分配给一个特定的例子。(默认值:None)
  • attn (torch.Tensor, optional) – 可选的节点级矩阵用于计算注意力得分,而不是使用节点特征矩阵xxx。
class SAGPooling(torch.nn.Module):def __init__(self, in_channels: int, ratio: Union[float, int] = 0.5,GNN: Callable = GraphConv, min_score: Optional[float] = None,multiplier: float = 1.0, nonlinearity: Callable = torch.tanh,**kwargs):super().__init__()self.in_channels = in_channelsself.ratio = ratioself.gnn = GNN(in_channels, 1, **kwargs)self.min_score = min_scoreself.multiplier = multiplierself.nonlinearity = nonlinearitydef forward(self, x, edge_index, edge_attr=None, batch=None, attn=None):""""""if batch is None:batch = edge_index.new_zeros(x.size(0))attn = x if attn is None else attnattn = attn.unsqueeze(-1) if attn.dim() == 1 else attnscore = self.gnn(attn, edge_index).view(-1)if self.min_score is None:score = self.nonlinearity(score)else:score = softmax(score, batch)perm = topk(score, self.ratio, batch, self.min_score)x = x[perm] * score[perm].view(-1, 1)x = self.multiplier * x if self.multiplier != 1 else xbatch = batch[perm]edge_index, edge_attr = filter_adj(edge_index, edge_attr, perm,num_nodes=score.size(0))return x, edge_index, edge_attr, batch, perm, score[perm]from torch_geometric.nn import SAGPooling
import torch as thf = [[1,2,3,4,5], [6,7,8,9,10], [0,0,1,1,1], [2,2,2,0,0], [3,0,3,0,3]]
edge_index = [[0,1],[2,0],[3,4]]
edge_index_change = [[0, 2, 3],[1, 0, 4]]
batch = [0, 0, 0, 1, 1]edge_index_t = th.tensor(edge_index)
edge_index_change_t = th.tensor(edge_index_change, dtype=th.long)
f_t = th.tensor(f, dtype=th.float32)
batch_t = th.tensor(batch, dtype=th.long)# 初始化输入 in_channel
model = SAGPooling(in_channels=5)
result = model(x=f_t, edge_index=edge_index_change_t, batch=batch_t)
print(result)

EdgePooling

“Towards Graph Pooling by Edge Contraction”和“Edge Contraction Pooling for Graph Neural Networks”论文中的边池运算符。

参数

  • in_channels (int) – 每个输入样本的大小
  • edge_score_method (callable, optional) – 应用于从原始边缘分数计算边缘分数的函数。默认情况下,这是每个节点所有入边的软最大值。这个函数接受一个形状为[num nodes]的原始边缘分数张量,一个边缘索引张量和节点数量为num_nodes,并生成一个与原始边缘分数相同大小的新张量,用于描述标准化边缘分数。包含的函数有EdgePooling.compute edge score softmax()EdgePooling.compute edge score tanh()EdgePooling.compute edge score sigmoid()。(默认值:EdgePooling.compute edge score softmax())
  • dropout (float, optional) – 训练期间降低边缘得分的概率。(默认:0.0)
  • add_to_edge_score (float, optional) – 要添加到每个计算边缘分数的值。添加这一点极大地帮助了解池的稳定性。(默认值:0.5)

forward

  • x (torch.Tensor) – 节点特性。
  • edge_index (torch.Tensor) – 边索引
  • batch (torch.Tensor, optional) – 批处理向量b∈{0,...,B−1}Nb \in \{0,...,B-1\}^Nb∈{0,...,B−1}N,它将每个节点分配给一个特定的例子。(默认值:None)
from torch_geometric.nn import EdgePooling
import torch as thf = [[1,2,3,4,5], [6,7,8,9,10], [0,0,1,1,1], [2,2,2,0,0], [3,0,3,0,3]]
edge_index = [[0,1],[2,0],[3,4]]
edge_index_change = [[0, 2, 3],[1, 0, 4]]
batch = [0, 0, 0, 1, 1]edge_index_t = th.tensor(edge_index)
edge_index_change_t = th.tensor(edge_index_change, dtype=th.long)
f_t = th.tensor(f, dtype=th.float32)
batch_t = th.tensor(batch, dtype=th.long)model = EdgePooling(in_channels=5)x, edge_index, batch, unpool_info = model(x= f_t, edge_index=edge_index_change_t, batch=batch_t)
print(x)

ASAPooling

“ASAP:Adaptive Structure Aware Pooling for Learning Hierarchical Graph Representations”论文中的 Adaptive Structure Aware Pooling 运算符。

参数

  • in_channels (int) –
  • ratio (float or int) –
  • GNN (torch.nn.Module, optional) –
  • dropout (float, optional) –
  • negative_slope (float, optional) –
  • add_self_loops (bool, optional) –

forward

  • x (torch.Tensor) –
  • edge_index (torch.Tensor) –
  • edge_weight (torch.Tensor, optional) –
  • batch (torch.Tensor, optional) –
from torch_geometric.nn import ASAPooling
from torch_geometric.nn import GCNConv
import torch as thf = [[1,2,3,4,5], [6,7,8,9,10], [0,0,1,1,1], [2,2,2,0,0], [3,0,3,0,3]]
edge_index = [[0,1],[2,0],[3,4]]
edge_index_change = [[0, 2, 3],[1, 0, 4]]
batch = [0, 0, 0, 1, 1]edge_index_t = th.tensor(edge_index)
edge_index_change_t = th.tensor(edge_index_change, dtype=th.long)
f_t = th.tensor(f, dtype=th.float32)
batch_t = th.tensor(batch, dtype=th.long)model = ASAPooling(in_channels=5, GNN=GCNConv)x, edge_index, edge_weight, batch, perm = model(x=f_t, edge_index=edge_index_change_t)
print(x)

PANPooling

“Path Integral Based Convolution and Pooling for Graph Neural Networks”论文中的基于路径积分的池化算子。

参数

  • in_channels (int) –
  • ratio (float) –
  • min_score (float, optional) –
  • multiplier (float, optional) – 池化后特征相乘的系数。这对于大型图表和使用min_score非常有用。
  • nonlinearity (str or callable, optional) –

forward

  • x (torch.Tensor) –
  • M (SparseTensor) – MET矩阵
  • batch (torch.Tensor, optional) –
from torch_geometric.nn import PANPooling
import torch as th
from torch_sparse import SparseTensormodel = PANPooling(in_channels=5)f = [[1,2,3,4,5], [6,7,8,9,10], [0,0,1,1,1], [2,2,2,0,0], [3,0,3,0,3]]
edge_index = [[0,1],[2,0],[3,4]]
edge_index_change = [[0, 2, 3],[1, 0, 4]]
batch = [0, 0, 0, 1, 1]edge_index_t = th.tensor(edge_index)
edge_index_change_t = th.tensor(edge_index_change, dtype=th.long)
f_t = th.tensor(f, dtype=th.float32)
batch_t = th.tensor(batch, dtype=th.long)
edge_attr = th.tensor([1, 2, 3]) # 其实就是权重
M = SparseTensor.from_edge_index(edge_index=edge_index_change_t, edge_attr=edge_attr)x, edge_index, edge_attr, batch, perm, score = model(f_t, M)
print(x)

MemPooling

来自“Memory-Based Graph Networks”论文的基于内存的池化层,它学习基于软聚类分配的粗化图表示

参数

  • in_channels (int) –
  • out_channels (int) –
  • heads (int) – 头
  • num_clusters (int) – 簇
  • tau (int, optional) – 温度

forward

  • x (torch.Tensor) –
  • batch (torch.Tensor, optional) –
  • mask (torch.Tensor, optional) –
from torch_geometric.nn import MemPooling
import torch as thx = th.randn(5,6,6)
# batch = th.tensor([0, 0, 0, 1, 1])
model = MemPooling(in_channels=6, out_channels=3, heads=2, num_clusters=2, tau=0.5)result = model(x)
print(result)
## -------------------------
x = th.randn(2,6,6)
batch = th.tensor([0, 0, 0, 1, 1])result = model(x, batch=batch)
print(result)

max_pool

torch_geometric.data.Data根据 中定义的聚类,汇集并粗化对象给出的图cluster。

  • cluster (torch.Tensor) – The cluster vector c∈{0,...,N−1}Nc \in \{0,...,N-1\}^Nc∈{0,...,N−1}N, which assigns each node to a specific cluster.
  • data (Data) – Graph data object.
  • transform (callable, optional) – A function/transform that takes in the coarsened and pooled Data object and returns a transformed version. (default: None)

avg_pool

torch_geometric.data.Data根据 中定义的聚类,汇集并粗化对象给出的图cluster。

  • cluster (torch.Tensor) – The cluster vector c∈{0,...,N−1}Nc \in \{0,...,N-1\}^Nc∈{0,...,N−1}N, which assigns each node to a specific cluster.
  • data (Data) – Graph data object.
  • transform (callable, optional) – A function/transform that takes in the coarsened and pooled Data object and returns a transformed version. (default: None)

max_pool_x

Max-Pools 节点特征根据中定义的聚类cluster。

  • cluster (torch.Tensor) – The cluster vector c∈{0,...,N−1}Nc \in \{0,...,N-1\}^Nc∈{0,...,N−1}N, which assigns each node to a specific cluster.
  • x (Tensor) – The node feature matrix.
  • batch (torch.Tensor) – The batch vector b∈{0,...,B−1}Nb \in \{0,...,B-1\}^Nb∈{0,...,B−1}N, which assigns each node to a specific example.
  • size (int, optional) – The maximum number of clusters in a single example. This property is useful to obtain a batch-wise dense representation, e.g. for applying FC layers, but should only be used if the size of the maximum number of clusters per example is known in advance. (default: None)

max_pool_neighbor_x

最大池化相邻节点特征,其中每个特征data.x都被中心节点及其邻居中具有最大值的特征值替换。

avg_pool_x

平均池节点特征根据中定义的聚类cluster。

  • cluster (torch.Tensor) – The cluster vector c∈{0,...,N−1}Nc \in \{0,...,N-1\}^Nc∈{0,...,N−1}N, which assigns each node to a specific cluster.
  • x (Tensor) – The node feature matrix. batch (torch.Tensor) – The batch vector b∈{0,...,B−1}Nb \in \{0,...,B-1\}^Nb∈{0,...,B−1}N, which assigns each node to a specific example.
  • size (int, optional) – The maximum number of clusters in a single example. (default: None)

avg_pool_neighbor_x

平均汇集相邻节点特征,其中每个特征data.x都被中心节点及其邻居的平均特征值替换。

graclus

来自“没有特征向量的加权图切割:多级方法”论文中的一种贪婪聚类算法,该算法选择一个未标记的顶点并将其与其未标记的邻居之一匹配(最大化其边缘权重)。

  • edge_index (torch.Tensor) – The edge indices.
  • weight (torch.Tensor, optional) – One-dimensional edge weights. (default: None)
  • num_nodes (int, optional) – The number of nodes, i.e. max_val + 1 of edge_index. (default: None)

voxel_grid

来自Graphs论文 Dynamic Edge-Conditioned Filters in Convolutional Networks on Graphs,它在点云上覆盖用户定义大小的规则网格,并将所有点聚集在同一体素内。

  • pos (torch.Tensor) – Node position matrix X∈R{N1+...+NB}×NX \in R^{\{N_1+...+N_B\}\times N}X∈R{N1​+...+NB​}×N.
  • size (float or [float] or Tensor) – Size of a voxel (in each dimension).
  • batch (torch.Tensor, optional) – Batch vector b∈{0,..,B−1}Nb \in \{0,..,B-1\}^Nb∈{0,..,B−1}N, which assigns each node to a specific example. (default: None)
  • start (float or [float] or Tensor, optional) – Start coordinates of the grid (in each dimension). If set to None, will be set to the minimum coordinates found in pos. (default: None)
  • end (float or [float] or Tensor, optional) – End coordinates of the grid (in each dimension). If set to None, will be set to the maximum coordinates found in pos. (default: None)

fps

“PointNet++: Deep Hierarchical Feature Learning on Point Sets in a Metric Space”论文中的一种采样算法,该算法针对其余点迭代采样最远的点。

  • x (torch.Tensor) – Node feature matrix X∈RN×FX \in R^{N \times F}X∈RN×F.
  • batch (torch.Tensor, optional) – Batch vector b∈{0,b−1}Nb \in \{0, b-1\}^Nb∈{0,b−1}N, which assigns each node to a specific example. (default: None)
  • ratio (float, optional) – Sampling ratio. (default: 0.5)
  • random_start (bool, optional) – If set to False, use the first node in XXX as starting node. (default: obj:True)
import torch
from torch_geometric.nn import fpsx = torch.Tensor([[-1, -1], [-1, 1], [1, -1], [1, 1]])
batch = torch.tensor([0, 0, 0, 0])
index = fps(x, batch, ratio=0.5)

knn

求y中的每个元素在x中的k个最近点。

参数

  • x (torch.Tensor) – Node feature matrix X∈RN×FX \in R^{N \times F}X∈RN×F.
  • y (torch.Tensor) – Node feature matrix X∈RN×FX \in R^{N \times F}X∈RN×F.
  • k (int) – The number of neighbors.
  • batch_x (torch.Tensor, optional) – Batch vector b∈{0,...B−1}Nb \in \{0,...B-1\}^Nb∈{0,...B−1}N, which assigns each node to a specific example. (default: None)
  • batch_y (torch.Tensor, optional) – Batch vector b∈{0,...B−1}Nb \in \{0,...B-1\}^Nb∈{0,...B−1}N, which assigns each node to a specific example. (default: None)
  • cosine (bool, optional) – If True, will use the cosine distance instead of euclidean distance to find nearest neighbors. (default: False)
  • num_workers (int, optional) – Number of workers to use for computation. Has no effect in case batch_x or batch_y is not None, or the input lies on the GPU. (default: 1)
import torch
from torch_geometric.nn import knnx = torch.Tensor([[-1, -1], [-1, 1], [1, -1], [1, 1]])
batch_x = torch.tensor([0, 0, 0, 0])
y = torch.Tensor([[-1, 0], [1, 0]])
batch_y = torch.tensor([0, 0])
assign_index = knn(x, y, 2, batch_x, batch_y)
print(assign_index)

knn_graph

计算图边最近的k个点。

  • x (torch.Tensor) – Node feature matrix X∈RN×FX \in R^{N \times F}X∈RN×F.
  • k (int) – The number of neighbors.
  • batch (torch.Tensor, optional) – Batch vector b∈{0,...B−1}Nb \in \{0,...B-1\}^Nb∈{0,...B−1}N, which assigns each node to a specific example. (default: None)
  • loop (bool, optional) – If True, the graph will contain self-loops. (default: False)
  • flow (str, optional) – The flow direction when using in combination with message passing (“source_to_target” or “target_to_source”). (default: “source_to_target”)
  • cosine (bool, optional) – If True, will use the cosine distance instead of euclidean distance to find nearest neighbors. (default: False)
  • num_workers (int, optional) – Number of workers to use for computation. Has no effect in case batch is not None, or the input lies on the GPU. (default: 1)

radius

求出y中的每个元素在距离r内x中的所有点。

  • x (torch.Tensor) – Node feature matrix
  • y (torch.Tensor) – Node feature matrix
  • r (float) – The radius.
  • batch_x (torch.Tensor, optional) – Batch vector , which assigns each node to a specific example. (default: None)
  • batch_y (torch.Tensor, optional) – Batch vector, which assigns each node to a specific example. (default: None)
  • max_num_neighbors (int, optional) – The maximum number of neighbors to return for each element in y. (default: 32)
  • num_workers (int, optional) – Number of workers to use for computation. Has no effect in case batch_x or batch_y is not None, or the input lies on the GPU. (default: 1)
import torch
from torch_geometric.nn import radiusx = torch.Tensor([[-1, -1], [-1, 1], [1, -1], [1, 1]])
batch_x = torch.tensor([0, 0, 0, 0])
y = torch.Tensor([[-1, 0], [1, 0]])
batch_y = torch.tensor([0, 0])
assign_index = radius(x, y, 1.5, batch_x, batch_y)
print(assign_index)

radius_graph

计算给定距离内所有点的图边。

PARAMETERS

  • x (torch.Tensor) – Node feature matrix .
  • r (float) – The radius.
  • batch (torch.Tensor, optional) – Batch vector , which assigns each node to a specific example. (default: None)
  • loop (bool, optional) – If True, the graph will contain self-loops. (default: False)
  • max_num_neighbors (int, optional) – The maximum number of neighbors to return for each element in y. (default: 32)
  • flow (str, optional) – The flow direction when using in combination with message passing (“source_to_target” or “target_to_source”). (default: “source_to_target”)
  • num_workers (int, optional) – Number of workers to use for computation. Has no effect in case batch is not None, or the input lies on the GPU. (default: 1)
import torch
from torch_geometric.nn import radius_graphx = torch.Tensor([[-1, -1], [-1, 1], [1, -1], [1, 0]])
batch = torch.tensor([0, 0, 0, 0])
edge_index = radius_graph(x, r=1.5, batch=batch, loop=False)
print(edge_index)

nearest

在y中的每个元素找出在x中最近的k个点。

  • x (torch.Tensor) – Node feature matrix
  • y (torch.Tensor) – Node feature matrix
  • batch_x (torch.Tensor, optional) – Batch vector, which assigns each node to a specific example. (default: None)
  • batch_y (torch.Tensor, optional) – Batch vector , which assigns each node to a specific example. (default: None)
import torch
from torch_geometric.nn import nearestx = torch.Tensor([[-1, -1], [-1, 1], [1, -1], [1, 1]])
batch_x = torch.tensor([0, 0, 0, 0])
y = torch.Tensor([[-1, 0], [1, 0]])
batch_y = torch.tensor([0, 0])
cluster = nearest(x, y, batch_x, batch_y)
print(cluster)

torch_geometric -- Pooling Layers相关推荐

  1. PyTorch学习笔记-Convolution Layers与Pooling Layers

    1. Convolution Layers 由于图像是二维的,因此基本上最常用到的就是二维的卷积类:torch.nn.Conv2d,官方文档:torch.nn.Conv2d. Conv2d 的主要参数 ...

  2. torch_geometric--Convolutional Layers

    torch_geometric–Convolutional Layers 卷积层 MessagePassing 式中口口口表示可微的排列不变函数,例如: sum, mean, min, max 或者 ...

  3. 阅读Hierarchical Graph Representation Learning with Differentiable Pooling(NeurIPS 2018)

      最近关注graph pooling,Hierarchical Graph Representation Learning with Differentiable Pooling(NeurIPS 2 ...

  4. 基于图神经网络的图表征学习方法

    图表征学习是指将整个图表示成低维.实值.稠密的向量形式,用来对整个图结构进行分析,包括图分类.图之间的相似性计算等. 相比之前的图节点,图的表征学习更加复杂,但构建的方法是建立在图节点表征的基础之上. ...

  5. Pytorch和CNN图像分类

    Pytorch和CNN图像分类 PyTorch是一个基于Torch的Python开源机器学习库,用于自然语言处理等应用程序.它主要由Facebookd的人工智能小组开发,不仅能够实现强大的GPU加速, ...

  6. 3D目标检测论文阅读摘要

    3D目标检测论文阅读摘要 2D Object Detection 的研究已经非常成熟了,代表作品有RPN系列的FasterRCNN,One Shot系列的YOLOv1-YOLOv3,这里推荐一个2D ...

  7. 优达学城《DeepLearning》2-1:卷积神经网络

    本次由3部分组成: 可视化卷积神经网络. 设计和训练一个CNN来对MNIST手写数字分类. 设计并训练一个CNN来对CIFAR10数据集中的图像进行分类. 本次遇到的深度学习核心概念: SGD优化器: ...

  8. CornerNet的配置、训练与测试

    CornerNet的配置.训练与测试 文章目录 CornerNet的配置.训练与测试 一.前言 二.配置.训练.测试 三.遇到的问题 一.前言 论文地址:https://arxiv.org/abs/1 ...

  9. 深入卷积神经网络背后的数学原理 | 技术头条

    参加「CTA 核心技术及应用峰会」,请扫码报名 ↑↑↑ 作者 | Piotr Skalski 译者 | Monanfei 编辑 | 十月Rachel.Jane 出品 | AI科技大本营(id:rgzn ...

最新文章

  1. wiki----为用户设置管理员权限
  2. 鹿晗都有AI粉了,为什么AI换脸剧的效果还这么渣?
  3. 基于phash和汉明距离找出相似图片
  4. 3、JSON相关基础知识点总结(3)
  5. 百度热力图和高德热力图对比
  6. Java之打印指定月份日历
  7. 100套法律合同范本,赶快收藏以后签合同心里就有谱了
  8. 基金业绩的python分析_Python与量化多因子——聊聊Brinson业绩归因
  9. 杀毒辅助工具冰刃IceSword详细介绍
  10. 京东商品爬虫实战笔记
  11. 吴恩达 - 卷积神经网络 学习笔记(一)
  12. 百事起诉可口可乐广告不当
  13. python利用有道翻译做一个实时翻译软件
  14. 抓取检测之 End-to-end Trainable Deep Neural Network for Robotic Grasp Detection and Semantic Segmentation
  15. slax linux安装到硬盘,在硬盘上完美运行SLAX/FanX
  16. 关于计算机设备自检自查报告,小学计算机室自检自查报告.docx
  17. Django框架介绍及配置
  18. php input 乱码,PHP中文乱码解决方案
  19. Altium Designer(AD)多边形铺铜
  20. Java 实现单点登录功能

热门文章

  1. react将前端Blob类型文件传到后台
  2. IT十年人生过客-六-带团队
  3. 六、爆炸效果的产生及销毁(雷霆战机)
  4. java word上传下载_java poi 上传与下载word文件
  5. 可牛免费杀毒1.5beta2 全新自我保护支持64位系统
  6. objection 使用方法
  7. java web服装商城系统
  8. delphi安装dpk控件
  9. delphi 安装.dpk;package
  10. 物联网技术应用在智慧农业气象站