[PYTHON] Differenz- und Kompatibilitätsprüfung zwischen Keras und tf.keras # 1

Ende der Entwicklung von Keras

Es ist schon eine Weile her, seit ich es gepostet habe. Wie Sie auf Github sehen können, scheint das Multi-Backend-Keras die Entwicklung im April 2020 beendet zu haben. Es wird in Zukunft durch Keras in Tensorflow ersetzt. keras-team (Der Einfachheit halber wird das Multi-Backend-Keras als mb-keras und das Tensorflow-Keras als tf-keras bezeichnet.) Ich möchte mb-keras und tf-keras in diesem Artikel vergleichen und verifizieren.

Informationen zur Tensorflow-Unterstützung für MB-Keras

Wie in dem oben erwähnten Github erwähnt, scheint es bis zu Tensorflow 2.0 zu unterstützen. Ab dem 4. Mai 2020, zum Zeitpunkt des Schreibens dieses Artikels, ist der neueste Stabilisator von Tensorflow 2.1.0.

Umgebung

Beim Schreiben dieses Artikels habe ich Tensorflow von CUDA usw. neu installiert, aber eine schlechte Umgebung geschaffen. mb-keras unterstützt bis zu Python 3.6 ... (Tensorflow unterstützt bis zu Python 3.7) mb-keras 2.3.1 unterstützt bis zu Tensorflow 2.0, das ist also gut so.

python -V
3.7.6
>>> import keras
>>> keras.__version__
'2.3.1'
>>> import tensorflow
>>> tensorflow.__version__
'2.0.0'

alias

Es ist im Grunde das gleiche, nur ein Tensorfluss am Anfang.

mb-keras


from keras.layers import Dense, Conv2D

tf-keras


from tensorflow.keras.layers import Dense, Conv2D

Objektkompatibilität

Wahrscheinlich nicht **. Kompatibilität ist jedoch nicht erforderlich ... Überprüfen Sie mit dem Code unten.

Über Modell und Ebene

def mb_layers():
    from keras.layers import Input, Dense, Activation
    input_l = Input(shape=(64,))
    hidden = Dense(10)(input_l)
    output_l = Activation('softmax')(hidden)
    return input_l, output_l
def tf_layers():
    from tensorflow.keras.layers import Input, Dense, Activation
    input_l = Input(shape=(64,))
    hidden = Dense(10)(input_l)
    output_l = Activation('softmax')(hidden)
    return input_l, output_l

if __name__ == '__main__':
    mb_i, mb_o = mb_layers()
    tf_i, tf_o = tf_layers()
    
    from keras.models import Model as mbModel
    from tensorflow.keras.models import Model as tfModel
    
    # mb_in_tf = mbModel(tf_i, tf_o) #---- ※1
    # tf_in_mb = tfModel(mb_i, mb_o) #---- ※2
    mb_in_mb = mbModel(mb_i, mb_o)
    mb_in_mb.summary()               #---- ※3
    tf_in_tf = tfModel(tf_i, tf_o)
    tf_in_tf.summary()               #---- ※4

stdout


Model: "model_7"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
input_23 (InputLayer)        (None, 64)                0         
_________________________________________________________________
dense_14 (Dense)             (None, 10)                650       
_________________________________________________________________
activation_12 (Activation)   (None, 10)                0         
=================================================================
Total params: 650
Trainable params: 650
Non-trainable params: 0
_________________________________________________________________

stdout


Model: "model_2"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
input_24 (InputLayer)        [(None, 64)]              0         
_________________________________________________________________
dense_14 (Dense)             (None, 10)                650       
_________________________________________________________________
activation_11 (Activation)   (None, 10)                0         
=================================================================
Total params: 650
Trainable params: 650
Non-trainable params: 0
_________________________________________________________________

Die Ausgabeform des InputLayer ist unterschiedlich, kann sie jedoch als dieselbe Architektur implementiert werden? Ich möchte es ab dem nächsten Mal überprüfen. Derzeit scheint es, dass die Erstellung von Layer zwischen mb-keras und tf-keras unterschiedlich ist, so dass es sicher ist, dass es nicht in Model geworfen werden kann.

Über Optimizer

Optimizer kann tf-keras Optimizer für Modelle verwenden, die mit mb-keras erstellt wurden.

model.compile


    from keras.optimizers import Adam as mbAdam
    from tensorflow.keras.optimizers import Adam as tfAdam
    mb_in_mb.compile(tfAdam(), 'mse')    #----※1
    tf_in_tf.compile(mbAdam(), 'mse')    #----※2

Über verwendbare Schichten

Das scheint ganz anders zu sein. ○ ist implementiert, × ist nicht implementiert. Beachten Sie, dass nicht alle Ebenen sind, da wir die von dir () herausgenommenen Ebenen fast so angeordnet haben, wie sie sind. Wenn man den Unterschied in der Aufmerksamkeit betrachtet, ist tf-keras in Bezug auf Revision und Abschaffung weiter fortgeschritten? (Die Überschreibungsmethode und alle Kleinbuchstaben sind funktionsähnlich, daher habe ich sie aus der Liste entfernt.)

Layer mb-keras tf-keras
AbstractRNNCell ×
Activation
ActivityRegularization
Add
AdditiveAttention ×
AlphaDropout
AtrousConvolution1D ×
AtrousConvolution2D ×
Attention ×
Average
AveragePooling1D
AveragePooling2D
AveragePooling3D
AvgPool1D
AvgPool2D
AvgPool3D
BatchNormalization
Bidirectional
Concatenate
Conv1D
Conv2D
Conv2DTranspose
Conv3D
Conv3DTranspose
ConvLSTM2D
ConvLSTM2DCell ×
ConvRecurrent2D ×
Convolution1D
Convolution2D ×
Convolution2D ×
Convolution3D
Convolution3DTranspose ×
Cropping1D
Cropping2D
Cropping3D
CuDNNGRU ×
CuDNNLSTM ×
Deconvolution2D ×
Deconvolution3D ×
Dense
DenseFeatures ×
DepthwiseConv2D
Dot
Dropout
ELU
Embedding
Flatten
GRU
GRUCell
GaussianDropout
GaussianNoise
GlobalAveragePooling1D
GlobalAveragePooling2D
GlobalAveragePooling3D
GlobalAvgPool1D
GlobalAvgPool2D
GlobalAvgPool3D
GlobalMaxPool1D
GlobalMaxPool2D
GlobalMaxPool3D
GlobalMaxPooling1D
GlobalMaxPooling2D
GlobalMaxPooling3D
Highway ×
Input
InputLayer
InputSpec
LSTM
LSTMCell
Lambda
Layer
LayerNormalization ×
LeakyReLU
LocallyConnected1D
LocallyConnected2D
Masking
MaxPool1D
MaxPool2D
MaxPool3D
MaxPooling1D
MaxPooling2D
MaxPooling3D
Maximum
MaxoutDense ×
Minimum
Multiply
PReLU
Permute
RNN
ReLU
Recurrent ×
RepeatVector
Reshape
SeparableConv1D
SeparableConv2D
SeparableConvolution1D ×
SeparableConvolution2D ×
SimpleRNN
SimpleRNNCell
Softmax
SpatialDropout1D
SpatialDropout2D
SpatialDropout3D
StackedRNNCells
Subtract
ThresholdedReLU
TimeDistributed
UpSampling1D
UpSampling2D
UpSampling3D
Wrapper ※ ×
ZeroPadding1D
ZeroPadding2D
ZeroPadding3D

Diese Zusammenfassung

Es stellt sich heraus, dass mb-keras und tf-keras fast inkompatibel sind. Ich habe jedoch kein Bedürfnis.

Als ein Fall, der ein Problem zu sein scheint, unterstützt mb-keras bis zu Python 3.6, so dass es auch dann nicht unterstützt wird, wenn Python in Zukunft aktualisiert wird. Andererseits wird die Entwicklung von tf-keras auch in Zukunft fortgesetzt. Wenn Sie ein KI-System erstellt haben, das mb-keras verwendet, sind Sie möglicherweise von der Zeit überfordert. Sie sollten daher sofort in Betracht ziehen, es durch tf-keras zu ersetzen. Als konkretes Beispiel, das zuerst in den Sinn kommt, ** Kann ein mit mb-keras erstelltes trainiertes Modell mit tf-keras geladen und abgeleitet werden? ** Toka Toka ··· (Ich weiß nicht, wann es # 2 oder später sein wird.)

Eigentlich habe ich gerade ein internes KI-System mit MB-Keras vor GW gebaut ... Wenn Sie der Meinung sind, dass Keras in letzter Zeit nicht aktualisiert wurde, ist dies der richtige Ort. Ich hab es geschafft ...

Recommended Posts

Differenz- und Kompatibilitätsprüfung zwischen Keras und tf.keras # 1
Unterschied zwischen Prozess und Job
Unterschied zwischen "categoryical_crossentropy" und "sparse_categorical_crossentropy"
Unterschied zwischen Regression und Klassifikation
Unterschied zwischen np.array und np.arange
Unterschied zwischen MicroPython und CPython
Unterschied zwischen ps a und ps -a
Unterschied zwischen Return und Print-Python
Unterschied zwischen Ruby und Python Split
Unterschied zwischen Java und Python (Memo)
Unterschied zwischen list () und [] in Python
Unterschied zwischen SQLAlchemy filter () und filter_by ()
Memorandum (Unterschied zwischen csv.reader und csv.dictreader)
(Hinweis) Unterschied zwischen Gateway und Standard-Gateway
Unterschied zwischen Numpys Randint und Randoms Randint
Unterschied zwischen sortiert und sortiert (Denkmal)
Unterschied zwischen der Python2-Serie und der Python3-Serie dict.keys ()
Python - Unterschied zwischen exec und eval
[Python] Unterschied zwischen randrange () und randint ()
[Python] Unterschied zwischen sortiert und sortiert (Colaboratory)
[Xg Boost] Unterschied zwischen Softmax und Softprob
Unterschied zwischen Anweisungen (Anweisungen) und Ausdrücken (Ausdrücken) in Python
[Django ORM] Unterschied zwischen Werten () und nur ()
Unterschied zwischen @classmethod und @staticmethod in Python
Unterschied zwischen Anhängen und + = in der Python-Liste
Unterschied zwischen nicht lokal und global in Python
Unterschied zwischen linearer Regression, Ridge-Regression und Lasso-Regression
Unterschied zwischen Docker-Compose-Datei env_file und .env-Datei
[Python Iroha] Unterschied zwischen Liste und Tupel
[Python] Unterschied zwischen Rand- und Randn-Ausgabe
Geschwindigkeitsunterschied zwischen wsgi, Flasche und Flasche
Unterschied zwischen ls -l und cat Befehl
Was ist der Unterschied zwischen "pip" und "conda"?
Unterschied zwischen Verwendung und Import in der Schildsprache
Unterschied zwischen Variablen und Selbst. Variablen in der [Python] -Klasse
Über den Unterschied zwischen "==" und "is" in Python
Über den Unterschied zwischen PostgreSQL su und sudo
Was ist der Unterschied zwischen Unix und Linux?
Berücksichtigung des Unterschieds zwischen ROC-Kurve und PR-Kurve
Grober Unterschied zwischen Unicode und UTF-8 (und seinen Begleitern)
Untersuchen Sie die Beziehung zwischen TensorFlow und Keras in der Übergangszeit
Kann BERT den Unterschied zwischen "Ame (Süßigkeiten)" und "Ame (Regen)" verstehen?
Unterschied zwischen Ruby und Python in Bezug auf Variablen
Was ist der Unterschied zwischen usleep, nanosleep und clock_nanosleep?
Unterschied zwischen Numpy (n,) und (n, 1) Notation [Unterschied zwischen horizontalem Vektor und vertikalem Vektor]
Unterschied zwischen return, return None und no return description in Python
Wie man Argparse benutzt und den Unterschied zwischen Optparse
Optuna, Keras und Titanic
Zwischen parametrisch und nicht parametrisch
Was ist der Unterschied zwischen symbolischen und harten Links?
Python-Modul num2words Verhaltensunterschied zwischen Englisch und Russisch
Python> Unterschied zwischen Inpbt- und Print-Ausgabe (Inpbt)> [1. 2. 3.] / Array ([1., 2., 3.], dtype = float32)
Verstehen Sie den Unterschied zwischen der kumulativen Zuordnung zu Variablen und der kumulativen Zuordnung zu Objekten
Listenverkettungsmethode in Python, Unterschied zwischen list.extend () und dem Operator "+"
Unterschied zwischen SQL Alchemy back_populated und backref und wenn keiner verwendet wird
Unterschied zwischen Vordergrundprozess und Hintergrundprozess, prinzipiell verstanden