Потому что Dense(...)
возвращает вызываемый (в основном, функцию), поэтому его можно вызвать по очереди. Вот простой пример:
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
Здесь make_adder(3)
возвращает функцию, которая определяется как
def the_adder(b)
return 3 + b
затем вызвать эту функцию с аргументом 5
возвращает 8
. Если вы пропустите шаг присвоения возвращаемого значения make_adder(3)
отдельной переменной, вы получите форму, о которой вы спрашивали: make_adder(3)(5)
- это то же самое, что и Dense(64, activation='relu')(inputs)
с вашего вопроса.
EDIT: Технически Dense
не классифицируется как функция в Python, а как класс; Таким образом, Dense(...)
является вызовом конструктора. В рассматриваемом классе определяется метод __call__
, который делает объекты этого класса «вызываемыми». Обе функции и вызываемые объекты можно вызвать, вызвав их списком аргументов, и разница между ними не влияет на объяснение вообще. Тем не менее, вот пример простой отозваны, что более тесно параллелен 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
Возможный дубликат [Что такое «Карринг»] (http://stackoverflow.com/questions/36314/what-is- currying) –