Weil Dense(...)
eine aufrufbar (im Grunde eine Funktion) zurückgibt, so kann es wiederum aufgerufen werden. Hier ist ein einfaches Beispiel:
def make_adder(a):
def the_adder(b):
return a + b
return the_adder
add_three = make_adder(3)
add_three(5)
# => 8
make_adder(3)(5)
# => 8
Hier make_adder(3)
gibt die Funktion, die als
def the_adder(b)
return 3 + b
dann diese Funktion aufrufen mit dem Argument definiert ist 5
kehrt 8
. Wenn Sie den Schritt der Zuweisung des Rückgabewerts make_adder(3)
an eine separate Variable überspringen, erhalten Sie das Formular, über das Sie gefragt haben: make_adder(3)(5)
ist das gleiche wie Dense(64, activation='relu')(inputs)
aus Ihrer Frage.
EDIT: Technisch Dense
ist nicht als eine Funktion in Python klassifiziert, sondern als eine Klasse; Dense(...)
ist somit ein Aufruf eines Konstruktors. Die betreffende Klasse definiert die __call__
-Methode, die Objekte dieser Klasse "abrufbar" macht. Sowohl Funktionen als auch aufrufbare Objekte können aufgerufen werden, indem sie mit einer Argumentliste aufgerufen werden, und der Unterschied zwischen den beiden wirkt sich nicht auf die Erklärung aus. Doch hier ist ein Beispiel für eine einfache aufrufbar, die engen Parallelen Dense
:
class Adder:
def __init__(self, a):
self.a = a
def __call__(self, b):
return self.a + b
adder_of_three = Adder(3)
adder_of_three(5)
# => 8
Adder(3)(5)
# => 8
Mögliches Duplikat [? Was ist ‚Currying‘] (http://stackoverflow.com/questions/36314/what-is- currying) –