PyTorch torch.scatter_reduce Funktion
PyTorch torch-Referenzhandbuch
torch.scatter_reduceEs ist eine Funktion in PyTorch, die verwendet wird, um die Werte eines Quell-Tensors auf angegebene Positionen auf eine bestimmte Weise zu aggregieren. Sie unterstützt mehrere Aggregationsmethoden, wie z. B. sum, product, max, min, usw.
Funktionsdefinition
torch.scatter_reduce(input, dim, index, src, reduce='sum', *, include_self=True)
Parameters:
input(Tensor): Der Eingabe-Tensor.dim(int): Die Dimension, entlang der aggregiert wird.index(Tensor): Der Index-Tensor, der angibt, wo die Werte von src in input aggregiert werden.src(Tensor): Der Quell-Tensor, die zu aggregierenden Werte.reduce(str): Die Aggregationsmethode. Optionen sind 'sum', 'prod', 'mean', 'amax', 'amin', 'multiply'. Standard ist 'sum'.include_self(bool, optional): Ob der ursprüngliche Wert an der Indexposition selbst in die Aggregation einbezogen werden soll. Standard ist True.
Rückgabewert:
torch.Tensor: Gibt den aggregierten Tensor zurück.
Anwendungsbeispiele
Beispiel
# Eingabe-Tensor erstellen
input = torch.ones(3, 5)
# Index und source erstellen
index = torch.tensor([[0, 1, 2, 0, 0],
[1, 2, 0, 1, 2],
[2, 0, 1, 2, 0]])
src = torch.tensor([[1, 1, 1, 1, 1],
[2, 2, 2, 2, 2],
[3, 3, 3, 3, 3]])
# Summenaggregation verwenden
output = torch.scatter_reduce(input, dim=0, index=index, src=src, reduce='sum')
print("Eingabe:")
print(input)
print("nAggregationsmethode: sum")
print("Ergebnis:")
print(output)
Das Ausgabeergebnis ist:
输入:
tensor([[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.]])
聚合方式: sum
结果:
tensor([[4., 2., 3., 4., 4.],
[2., 2., 2., 2., 2.],
[3., 3., 2., 3., 3.]])
Beispiel
# Verschiedene Aggregationsmethoden testen
input = torch.zeros(3, 3)
index = torch.tensor([[0, 0, 0],
[1, 1, 1],
[2, 2, 2]])
src = torch.tensor([[2, 3, 4],
[5, 6, 7],
[8, 9, 10]])
# prod (Produkt) verwenden
output_prod = torch.scatter_reduce(input, 0, index, src, reduce='prod')
print("prod-Aggregation:")
print(output_prod)
# amax (Maximum) verwenden
output_max = torch.scatter_reduce(input, 0, index, src, reduce='amax')
print("namax-Aggregation:")
print(output_max)
# amin (Minimum) verwenden
output_min = torch.scatter_reduce(input, 0, index, src, reduce='amin')
print("namin-Aggregation:")
print(output_min)
Das Ausgabeergebnis ist:
prod 聚合:
tensor([[ 2., 3., 4.],
[ 5., 6., 7.],
[ 8., 9., 10.]])
amax 聚合:
tensor([[ 2., 3., 4.],
[ 5., 6., 7.],
[ 8., 9., 10.]])
amin 聚合:
tensor([[ 2., 3., 4.],
[ 5., 6., 7.],
[ 8., 9., 10.]])
Beispiel
# Verwenden Sie den Parameter include_self
input = torch.tensor([1.0, 2.0, 3.0])
index = torch.tensor([0, 0, 0])
src = torch.tensor([10.0, 20.0, 30.0])
# Eigenen Wert einbeziehen (Standard)
output1 = torch.scatter_reduce(input, 0, index, src, reduce='sum', include_self=True)
print("include_self=True:", output1)
# Eigenen Wert ausschließen
output2 = torch.scatter_reduce(input, 0, index, src, reduce='sum', include_self=False)
print("include_self=False:", output2)
Das Ausgabeergebnis ist:
include_self=True: tensor([66., 2., 3.]) include_self=False: tensor([60., 2., 3.])
Hinweis:torch.scatter_reduceEs ändert den ursprünglichen Eingabe-Tensor nicht, sondern gibt einen neuen Tensor zurück. Mehrere Indizes können auf dieselbe Position zeigen, und die Werte werden gemäß der angegebenen Aggregationsmethode aggregiert.include_self=FalseEs ist in einigen Szenarien nützlich, beispielsweise um die wiederholte Berechnung der eigenen Merkmale eines Knotens in Graph-Neuronalen Netzen zu vermeiden.
Andere Erweiterungen