Sowohl Python als auch Keras sind Anfänger. Es ist ein Memorandum für mich.
Mit der Keras-Funktions-API können Sie komplexere neuronale Netze als mit der Keras Sequential-API verwenden.
Hier kommt der folgende Schreibstil heraus.
001.py
import keras
from keras import layers
inputs = layers.Input(shape=(784,))
dense_hoge = layers.Dense(64, activation='relu')
x = dense_hoge(inputs)#Dies!
dens_hoge ist eine Instanz der Klasse keras.layers.core.Dense, aber auf den Instanznamen folgen Klammern und der Variablenname inputs wird darin geschrieben.
Darüber hinaus sind die letzten beiden Zeilen
002.py
x = layers.Dense(64, activation='relu')(inputs)
Sie können auch schreiben. Ich habe noch nie gesehen, wie Variablenname 1 (Variablenname 2) geschrieben wird.
Was zum Teufel macht das und wie?
Es wurde gesagt, dass die in der Klasse definierte Funktion \ _ \ _ call \ _ \ _ verarbeitet wird.
Schreiben wir eine einfache Klasse.
003.py
class A:
def __init__(self):
print("ClassA __init__")
def __call__(self):
print ("ClassA __call__")
Erstellen Sie ein Objekt der Klasse A und speichern Sie es in einem.
003.py
a = A()
#ClassA __init__
Versuchen Sie, die Instanz a mit () aufzurufen.
003.py
a()
#ClassA __call__
Daher habe ich festgestellt, dass das Hinzufügen von () zum Instanznamen den in \ _ \ _ call \ _ \ _ definierten Prozess ausführt.
Was ist mit Klassen, in denen \ _ \ _ call \ _ \ _ nicht definiert ist?
004.py
class B:
def __init__(self):
print("ClassB __init__")
b = B()
#ClassB __init__
b() #Ich erhalte den folgenden Fehler
#Traceback (most recent call last):
# File "<stdin>", line 1, in <module>
#TypeError: 'B' object is not callable
Das 'B'-Objekt wurde als nicht aufrufbar angezeigt. Es wird gesagt, dass callable () verwendet werden kann, um zu überprüfen, ob es aufrufbar ist, also habe ich es versucht.
004.py
callable(a)
#True
callable(b)
#False
Klasse B, die \ _ \ _call \ _ \ _ nicht definiert, ist jetzt False.
Die Angabe einer Klasse anstelle einer Instanz führte sowohl für Klasse A als auch für Klasse B zu true.
005.py
callable(A)
#True
callable(B)
#True
\ _ \ _ Call \ _ \ _ war, dass das Objekt der Rückgabewert sein könnte. Wenn also \ _ \ _ call \ _ \ _ ein aufrufbares Objekt zurückgibt, können wir dann den nächsten \ _ \ _ call \ _ \ _ nacheinander aufrufen? Die folgende Klasse C gibt eine Instanz der Klasse A zurück. Eine Instanz der Klasse A kann aufgerufen werden, und das Aufrufen von \ _ \ _ call \ _ \ _ sollte Klasse A \ _ \ _ call \ _ \ _ zurückgeben.
006.py
class C:
def __init__(self):
print("ClassC __init__")
def __call__(self):
print ("ClassC __call__")
return A()
c = C()
c()()
#ClassC __call__
#ClassA __init__ #der Klasse C.__call__Ausgabe, wenn Klasse A instanziiert wird
#ClassA __call__
.... ich konnte nacheinander anrufen. Ich denke nicht, dass es viel verwendet werden sollte, da der Code verwirrend sein wird, aber ich fand, dass es kontinuierlich funktioniert.
Ich fand, dass ich den Variablennamen () schreiben konnte. In Python kann sogar die als Funktionsname verwendete Zeichenfolge als Variablenname verwendet werden. Der Variablenname lautet beispielsweise print. Wenn print () verwendet wird, heißt es \ _ \ _ call \ _ \ _? Oder ist es eine normale Druckfunktion?
007.py
print = A()
print('123') #Die folgende Fehleranzeige
#Traceback (most recent call last):
# File "<stdin>", line 1, in <module>
#TypeError: __call__() takes 1 positional argument but 2 were given
\ _ \ _ Call \ _ \ _ wurde aufgerufen.
Ich fand, dass ich den Variablennamen () schreiben konnte.
Was ist der Unterschied zwischen dem Definieren und Verwenden von \ _ \ _ call \ _ \ _ in einer Klasse und dem Definieren und Verwenden der Funktion hoge ()? Was ist der Unterschied zwischen einem Variablennamen (Argument) und einem Variablennamen.hoge (Argument)?
Als Nachteil beim Schreiben von variable ()
Es gibt zwei mögliche Punkte. Gibt es einen Vorteil bei der Verwendung von \ _ \ _ call \ _ \ _?
Methoden wie \ _ \ _ call \ _ \ _ scheinen spezielle Methoden zu sein. Es scheint, dass es auf verschiedene Arten verwendet werden kann, aber es scheint, dass es viele Erklärungsseiten gibt, deshalb möchte ich hier enden.
Recommended Posts