In [ ]:
#@title Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

Σύνοψη Keras

Note: Η κοινότητα του TensorFlow έχει μεταφράσει αυτά τα έγγραφα. Καθότι οι μεταφράσεις αυτές αποτελούν την καλύτερη δυνατή προσπάθεια , δεν υπάρχει εγγύηση ότι θα παραμείνουν ενημερωμένες σε σχέση με τα επίσημα Αγγλικά έγγραφα. Αν έχετε υποδείξεις για βελτίωση των αρχείων αυτών , δημιουργήστε ένα pull request στο tensorflow/docs GitHub repository . Για να συμμετέχετε στη σύνταξη ή στην αναθεώρηση των μεταφράσεων της κοινότητας , επικοινωνήστε με το docs@tensorflow.org list.

Ο οδήγός αυτός προσφέρει τα βασικά ώστε να ξεκινήσετε να χρησιμοποιείτε το Keras. Η διάρκεια ανάγνωσης του είναι περίπου 10 λεπτά.

Εισαγωγή tf.keras

tf.keras . Πρόκειται για την υλοποίησης Διασύνδεσης Προγραμματισμού Εφαρμογών (API) του Keras. Είναι ένα API υψηλού επιπέδου που μπορεί να δημιουργήσει και να εκπαιδεύσει μοντέλα τα οποία θα υποστηρίζουν άμεσα τις υπόλοιπες λειτουργίες του TensorFlow , όπως η "ενθουσιώδης" εκτέλεση , tf.data αγωγοί , και Εκτιμητές

Το tf.keras καθιστά το TensorFlow ευκολότερο στη χρήση , χωρίς να θυσιάζει σε προσαρμοστικότητα και απόδοση

Για να ξεκινήσετε , εισάγετε το tf.keras ως μέρος του προγράμματος TensorFlow σας :


In [ ]:
import tensorflow as tf

from tensorflow import keras

Το tf.keras μπορέι να τρέξει οποιοδήποτε κομμάτι συμβατού κώδικα Keras , ωστόσο να έχετε υπόψιν σας τα εξής :

  • Η έκδοση tf.keras της τελευταίας έκδοσης του TensorFlow μπορεί να μην ταυτίζεται με την τελευταία έκδοση keras από το PyPI. Ελέγξτε το tf.keras.__version__.
  • Όταν το tf.keras θα προεπιλέγει την . Θέτοντας save_format='h5' χρησιμοποιείται η μορφοποίηση HDF5 (εναλλακτικά, ορίστε την επέκταση του αρχείου σε .h5)

Δημιουργία απλού μοντέλου

Σειριακό μοντέλο

Στο Keras , συναθροίζοντας στρώματα(layers) δημιουργούνται τα μοντελα (models). Ένα μοντέλο είναι (συνήθως) ένα γράφημα στρωμάτων. Ο πιο συνηθισμένος τύπος μοντέλου είναι η στοίβα (stack) στρωμάτων : το tf.keras.Sequential μοντέλο

Για την κατασκευή ενός απλού, πλήρως συνδεδεμένου (νευρωνικού) δικτύου (για παράδειγμα : πολυεπίπεδο perceptron):


In [ ]:
from tensorflow.keras import layers

model = tf.keras.Sequential()
# Adds a densely-connected layer with 64 units to the model:
model.add(layers.Dense(64, activation='relu'))
# Add another:
model.add(layers.Dense(64, activation='relu'))
# Add a softmax layer with 10 output units:
model.add(layers.Dense(10, activation='softmax'))

Μπορείτε να βρείτε ένα ολοκληρωμένο και σύντομο παράδειγμα για το πώς χρησιμοποιούνται τα σειριακά μοντέλα εδώ

Για να μάθετε να δημιουργείτε πιο προχωρημένα μοντέλα από τα σειριακά , δέιτε τα εξής :

  • *

Διαμόρφωση των επιπέδων

Υπάρχουν πολλά επίπεδα tf.keras.layers διαθέσιμα. Τα περισσότερα από αυτά έχουν συνήθη ορίσματα στον κατασκευαστή :

  • activation : Θέτει τη συνάρτηση ενεργοποίησης το επίπεδο. Η παράμετρος αυτή διασαφηνίζεται από το όνομα μίας προεγκατεστημένης συνάρτησης , διαφορετικά ως ένα προς κλήση αντικείμενο. Ως προεπιλογή , δεν εφαρμόζεται activation
  • kernel_initializer και bias_initializer : Τα σχέδια αρχικοποίησης που δημιουργούν τα βάρη του επιπέδου (kernel και bias). Η παράμετρος αυτή είναι είτε όνομα είτε αντικείμενο που μπορεί να κληθεί . Αρχικοποιείται , ως προεπιλογή , στον "Glorot uniform" αρχικοποιητή.
  • kernel_regularizer και bias_regularizer : Τα σχέδια ρύθμισης που εφαρμόζουν τα βάρη του επιπέδου (kernel και bias), όπως για παράδειγμα οι L1 or L2 regularization (L1 ή L2 ρυθμίσεις). Ως προεπιλογή , δεν εφαρμόζεται regularization

Ο ακόλουθος κώδικας δίνει υπόσταση στα tf.keras.layers.Dense επίπεδα με τη χρήση ορισμάτων σε κατασκευαστές :


In [ ]:
# Create a sigmoid layer:
layers.Dense(64, activation='sigmoid')
# Or:
layers.Dense(64, activation=tf.keras.activations.sigmoid)

# A linear layer with L1 regularization of factor 0.01 applied to the kernel matrix:
layers.Dense(64, kernel_regularizer=tf.keras.regularizers.l1(0.01))

# A linear layer with L2 regularization of factor 0.01 applied to the bias vector:
layers.Dense(64, bias_regularizer=tf.keras.regularizers.l2(0.01))

# A linear layer with a kernel initialized to a random orthogonal matrix:
layers.Dense(64, kernel_initializer='orthogonal')

# A linear layer with a bias vector initialized to 2.0s:
layers.Dense(64, bias_initializer=tf.keras.initializers.Constant(2.0))

Μάθηση και αξιολόγηση

Στήνοντας την μάθηση

Αφότου έχει κατασκευαστεί το μοντέλο, ορίστε την διαδικασία μάθησης καλώντας την μέθοδο compile:


In [ ]:
model = tf.keras.Sequential([
# Adds a densely-connected layer with 64 units to the model:
layers.Dense(64, activation='relu', input_shape=(32,)),
# Add another:
layers.Dense(64, activation='relu'),
# Add a softmax layer with 10 output units:
layers.Dense(10, activation='softmax')])

model.compile(optimizer=tf.keras.optimizers.Adam(0.01),
              loss='categorical_crossentropy',
              metrics=['accuracy'])

Η μέθοδος tf.keras.Model.compile δέχεται 3 σημαντικά ορίσματα :

  • optimizer : Το αντικείμενο αυτό προσδιορίζει την διαδικασία μάθησης. Περάστε στιγμιότυπα βελτιστοποίησης (optimizer instances) από το άρθρωμα (module) tf.keras.optimizers , όπως tf.keras.optimizers.Adam ή tf.keras.optimizers.SGD. Αν θέλετε να χρησιμοποιήσετε τις προεπιλεγμένες παραμέτρους , μπορείτε να προσδιορίσετε βελτιστοποιητές μέσω συμβολοσειρών(strings) , όπως adam ή sgd.
  • loss : Η συνάρτηση που πρέπει να ελαχιστοποιείται κατά τη βελτιστοποίηση. Συνήθεις επιλογές είναι η μέση τετραγωνική απόκλιση(mse) ,categorical_crossentropy, και binary_crossentropy. Oι loss functions προσδιορίζονται μέσω του ονόματος ή παιρνώντας ένα αντικείμενο από το άρθρωμα tf.keras.losses.
  • metrics: Χρησιμοποιείται για την παρακολούθηση της διαδικασίας. Πρόκειται για συμβολοσειρές ή για προς κλήση αντικείμενα από το άρθρωμα tf.keras.metrics
  • Επιπρόσθετα , για να βεβαιωθείτε ότι το μοντέλο μαθαίνει και αξιολογεί eagerly("ενθουσιωδώς"), μπορείτε να θέσετε run_eagerly=True ως παράμετρο κατά την μεταγλώττιση

Ο ακόλουθος κώδικας υλοποιεί μερικά παραδείγματα παραμετροποίησης μοντέλου για μάθηση :


In [ ]:
# Configure a model for mean-squared error regression.
model.compile(optimizer=tf.keras.optimizers.Adam(0.01),
              loss='mse',       # mean squared error
              metrics=['mae'])  # mean absolute error

# Configure a model for categorical classification.
model.compile(optimizer=tf.keras.optimizers.RMSprop(0.01),
              loss=tf.keras.losses.CategoricalCrossentropy(),
              metrics=[tf.keras.metrics.CategoricalAccuracy()])

Μάθηση από NumPy δεδομένα

Σε μικρό όγκο δεδομένων,συνιστάται η χρήση των in-memory πινάκων NumPy για την μάθηση και την αξιολόγηση ενός μοντέλου. Το μοντέλο "ταιριάζει" στα δεδομένα εκμάθησης μέσω της μεθόδου fit :


In [ ]:
import numpy as np

data = np.random.random((1000, 32))
labels = np.random.random((1000, 10))

model.fit(data, labels, epochs=10, batch_size=32)

Η μέθοδος tf.keras.Model.fit δέχεται 3 ορίσματα :

  • epochs : Η μάθηση οργανώνεται σε εποχές (epochs). Εποχή είναι μία επανάληψη σε όλο τον όγκο των δεδομένων εισόδου(αυτό γίνεται πρώτα σε μικρότερες "δεσμίδες" δεδομένων)
  • batch_size : Όταν περνάνε τα δεδομένα NumPy , το μοντέλο τα τεμαχίζει σε (μικρότερες) "δεσμίδες" και εκτελεί επαναλήψεις πάνω σε αυτές κατά την εκμάθηση.
  • validation_data : Όταν δημιουργείτε ένα πρωτότυπο ενός μοντέλους , θα ήταν επιθυμητό να παρακολουθείτε με ευκολία την απόδοσή του σε μερικά δεδομένα επαλήθευσης (validation data). Περνώντας αυτό το όρισμα -μία πλειάδα εισόδων και "ετικετών"- επιτρέπετε στο μοντέλο να δείχνει την απώλεια και τις μετρήσεις σε "συμπερασματική" λειτουργία (inference mode) για τα εισαγώμενα δεδομένα, στο τέλος κάθε εποχής

Ακολουθεί παράδειγμα με την χρήση της validation_data :


In [ ]:
import numpy as np

data = np.random.random((1000, 32))
labels = np.random.random((1000, 10))

val_data = np.random.random((100, 32))
val_labels = np.random.random((100, 10))

model.fit(data, labels, epochs=10, batch_size=32,
          validation_data=(val_data, val_labels))

Μάθηση από σύνολα δεδομένων(datasets) tf.data

Χρησιμοποιείστε τo για να κλιμακώσετε μεγάλα σύνολα δεδομένων ή μάθηση σε πολλές συσκευές. Περάστε ένα tf.data.Dataset στιγμιότυπο στην μέθοδο fit :


In [ ]:
# Instantiates a toy dataset instance:
dataset = tf.data.Dataset.from_tensor_slices((data, labels))
dataset = dataset.batch(32)

model.fit(dataset, epochs=10)

Από τη στιγμή που το Dataset παράγει "δεσμίδες" δεδομένων , αυτό το απόσπασμα δεν απαίτει το batch_size.

Τα σύνολα δεδομένων μπορούν να χρησιμοποιηθούν και για επιβεβαίωση :


In [ ]:
dataset = tf.data.Dataset.from_tensor_slices((data, labels))
dataset = dataset.batch(32)

val_dataset = tf.data.Dataset.from_tensor_slices((val_data, val_labels))
val_dataset = val_dataset.batch(32)

model.fit(dataset, epochs=10,
          validation_data=val_dataset)

Αξιολόγηση και πρόβλεψη

Οι tf.keras.Model.evaluate και tf.keras.Model.predict μέθοδοι μπορούν να χρησιμοποιήσουν δεδομένα NumPy και ένα tf.data.Dataset.

Ακολουθεί ο τρόπος αξιολόγησης "συμπερασματικής" λειτουργίας των απωλειών και των μετρήσεων για τα παρεχόμενα δεδομένα :


In [ ]:
# With Numpy arrays
data = np.random.random((1000, 32))
labels = np.random.random((1000, 10))

model.evaluate(data, labels, batch_size=32)

# With a Dataset
dataset = tf.data.Dataset.from_tensor_slices((data, labels))
dataset = dataset.batch(32)

model.evaluate(dataset)

Με αυτό το απόσπασμα μπορείτε να προβλέψετε την έξοδο του τελευταίου επιπέδου σε inference για τα παρεχόμενα δεδομένα , ως έναν πίνακα NumPy :


In [ ]:
result = model.predict(data, batch_size=32)
print(result.shape)

Για έναν ολοκληρωμένο οδηγό στην εκμάθηση και την αξιολόγηση , ο οποίος περιλαμβάνει και οδηγίες για συγγραφή προσαρμοσμένων loops μαθήσεως από το μηδέν , δείτε τον οδηγό .

Δημιουργία σύνθετων μοντέλων

To Functional API

Το μοντέλο tf.keras.Sequential είναι μία απλή στοίβα επιπέδων η οποία δεν μπορεί να εκπροσωπήσει αυθαίρετα μοντέλα . Με τη χρήση του μπορείτε να φτιάξετε σύνθετες τοπολογίες μοντέλων όπως :

  • Μοντέλα πολλαπλών εισόδων,
  • Μοντέλα πολλαπλών εξόδων,
  • Μοντέλα με κοινόχρηστα επίπεδα (το ίδιο επίπεδο να καλείται πολλαπλές φορές),
  • Μοντέλα με μη σειριακή ροή δεδομένων (π.χ residual connections)

H δημιουργία μοντέλων με το functional API ακολουθεί το εξής :

  1. Ένα στιγμιότυπο ενός επιπέδου καλείται και επιστρέφει έναν τανυστή(tensor).
  2. Τανυστές εισόδου και εξόδου χρησιμοποιούνται για να ορίσουν μία κατάσταση της tf.keras.Model.
  3. Το μοντέλο μαθαίνει κατά τον ίδιο τρόπο με το Σειριακό μοντέλο.

Το ακόλουθο παράδειγμα χρησιμοποιεί το functional API για να φτιάξει ένα απλό, πλήρως συνδεδεμένο (νευρωνικό) δίκτυο :


In [ ]:
inputs = tf.keras.Input(shape=(32,))  # Returns an input placeholder

# A layer instance is callable on a tensor, and returns a tensor.
x = layers.Dense(64, activation='relu')(inputs)
x = layers.Dense(64, activation='relu')(x)
predictions = layers.Dense(10, activation='softmax')(x)

Δώστε υπόσταση στο μοντέλο με είσοδο και έξοδο:


In [ ]:
model = tf.keras.Model(inputs=inputs, outputs=predictions)

# The compile step specifies the training configuration.
model.compile(optimizer=tf.keras.optimizers.RMSprop(0.001),
              loss='categorical_crossentropy',
              metrics=['accuracy'])

# Trains for 5 epochs
model.fit(data, labels, batch_size=32, epochs=5)

Υποκατηγοριοποίηση στα μοντέλα

Φτιάξτε ένα πλήρως παραμετροποιήσιμο μοντέλο υποκατηγοριοποιώντας την tf.keras.Model και ορίζοντας το δικό σας "προς τα εμπρος πέρασμα"(forward pass,κοινώς διαδικασία υπολογισμού η οποία ξεκινάει από το 1ο προς το τελευταίο επίπεδο). Κατασκευάστε επίπεδα στην μέθοδο __init__ και θέστε τα ως ιδιότητες της κλάσης . Ορίστε έπειτα το "προς τα εμπρος πέρασμα"(forward pass)στην μέθοδο call.

Η υποκατηγοριοποίηση στα μοντέλα είναι ιδιαίτερα χρήσιμη όταν η είναι ενεργοποιημένη ,καθώς επιτρέπει το "προς τα εμπρος πέρασμα"(forward pass) να εγγράφεται αναγκαστικά.

Σημείωση: αν το μοντέλο σας χρειάζεται να τρέχει πάντα αναγκαστικά, μπορείτε να θέσετε dynamic=True όταν καλείται ο super κατασκευαστής.

Σημείο κλειδί : Χρησιμοποιήστε το σωστό , ανάλογα με την δουλειά , API . Παρόλο που η χρήση της υποκατηγοριοποίηση προσφέρει ευελιξία , κοστίζει σε πολυπλοκότητα και σε μεγαλύτερα περιθώρια για σφάλματα χρήστη. Αν είναι εφικ΄το , προτιμήστε το functional API.

Το ακόλουθο παράδειγμα δείχνει μια υποκλάση tf.keras.Model που χρησιμοποιεί "προς τα εμπρός πέρασμα" το οποίο δεν χρειάζεται να εκτελείται αναγκαστικά:


In [ ]:
class MyModel(tf.keras.Model):

  def __init__(self, num_classes=10):
    super(MyModel, self).__init__(name='my_model')
    self.num_classes = num_classes
    # Define your layers here.
    self.dense_1 = layers.Dense(32, activation='relu')
    self.dense_2 = layers.Dense(num_classes, activation='sigmoid')

  def call(self, inputs):
    # Define your forward pass here,
    # using layers you previously defined (in `__init__`).
    x = self.dense_1(inputs)
    return self.dense_2(x)

Η νέα κλάση model λαμβάνει υπόσταση :


In [ ]:
model = MyModel(num_classes=10)

# The compile step specifies the training configuration.
model.compile(optimizer=tf.keras.optimizers.RMSprop(0.001),
              loss='categorical_crossentropy',
              metrics=['accuracy'])

# Trains for 5 epochs.
model.fit(data, labels, batch_size=32, epochs=5)

Παραμετροποιήσιμα επίπεδα

Δημιουργήστε ένα παραμετροποιήσιμο επίπεδο υποκατηγοριοποιώντας την tf.keras.layers.Layer και υλοποιώντας τις παρακάτω μεθόδους :

  • __init__ : (Προαιρετικά) ορίστε τα υποεπίπεδα που θα χρησιμοποιηθούν από το επίπεδο
  • build : Δημιουργεί τα βάρη του επιπέδου. Προσθέστε βάρη με την μέθοδο add_weight.
  • call : Ορίστε το "προς τα εμπρός πέρασμα"
  • Προαιρετικά, ένα επίπεδο μπορεί να σειριοποιηθεί με την υλοποίηση της μεθόδου get_config και της μεθόδου κλάσης from_config.

Ακολουθεί παράδειγμα ενός παραμετροποιήσιμου επιπέδου το οποίο υλοποιεί ένα matmul με ορίσματα μία είσοδο και έναν kernel (πυρήνα)


In [ ]:
class MyLayer(layers.Layer):

  def __init__(self, output_dim, **kwargs):
    self.output_dim = output_dim
    super(MyLayer, self).__init__(**kwargs)

  def build(self, input_shape):
    # Create a trainable weight variable for this layer.
    self.kernel = self.add_weight(name='kernel',
                                  shape=(input_shape[1], self.output_dim),
                                  initializer='uniform',
                                  trainable=True)

  def call(self, inputs):
    return tf.matmul(inputs, self.kernel)

  def get_config(self):
    base_config = super(MyLayer, self).get_config()
    base_config['output_dim'] = self.output_dim
    return base_config

  @classmethod
  def from_config(cls, config):
    return cls(**config)

Δημιουργήστε ένα μοντέλο χρησιμοποιώντας το δικό σας επίπεδο :


In [ ]:
model = tf.keras.Sequential([
    MyLayer(10),
    layers.Activation('softmax')])

# The compile step specifies the training configuration
model.compile(optimizer=tf.keras.optimizers.RMSprop(0.001),
              loss='categorical_crossentropy',
              metrics=['accuracy'])

# Trains for 5 epochs.
model.fit(data, labels, batch_size=32, epochs=5)

Επανακλήσεις

Μία επανάκληση(callback) είναι ένα αντικείμενο το οποίο περνάει σε ένα μοντέλο για να τροποποιήσει και να επεκτείνει τη συμπεριφορά του κατά την διάρκεια της μάθησης. Μπορείτε να γράψετε τις δικές σας επανακλήσεις ή να χρησιμοποιήσετε την tf.keras.callbacks η οποία περιλαμβάνει :

  • tf.keras.callbacks.ModelCheckpoint: Αποθηκεύστε το μοντέλο σας ανά τακτά διαστήματα.
  • tf.keras.callbacks.LearningRateScheduler: Δυναμικά, αλλάξτε τον ρυθμό μάθησης.
  • tf.keras.callbacks.EarlyStopping: Διακόψτε την εκμάθηση όταν η απόδοση επαλήθευσης (validation performance) έχει σταματήσει να βελτιώνεται.
  • tf.keras.callbacks.TensorBoard: Παρακολουθήστε την συμπεριφορά του μοντέλου με τη χρήση του TensorBoard.

Για να χρησιμοποιήσετε την tf.keras.callbacks.Callback , περάστε την στην μέθοδο fit του μοντέλου :


In [ ]:
callbacks = [
  # Interrupt training if `val_loss` stops improving for over 2 epochs
  tf.keras.callbacks.EarlyStopping(patience=2, monitor='val_loss'),
  # Write TensorBoard logs to `./logs` directory
  tf.keras.callbacks.TensorBoard(log_dir='./logs')
]
model.fit(data, labels, batch_size=32, epochs=5, callbacks=callbacks,
          validation_data=(val_data, val_labels))

Αποθήκευση και επαναφορά

Αποθήκευση μόνο των τιμών των βαρών

Αποθηκεύστε και φορτώστε τα βάρη ενός μοντέλου με τη χρήση της tf.keras.Model.save_weights:


In [ ]:
model = tf.keras.Sequential([
layers.Dense(64, activation='relu', input_shape=(32,)),
layers.Dense(10, activation='softmax')])

model.compile(optimizer=tf.keras.optimizers.Adam(0.001),
              loss='categorical_crossentropy',
              metrics=['accuracy'])

In [ ]:
# Save weights to a TensorFlow Checkpoint file
model.save_weights('./weights/my_model')

# Restore the model's state,
# this requires a model with the same architecture.
model.load_weights('./weights/my_model')

Ως προεπιλογή , το παραπάνω αποθηκεύει τα βάρη του μοντέλου σε μορφοποίηση TensorFlow checkpoint. Εναλλακτικά , μπορούν να αποθηκευτούν χρησιμοποιώντας την μορφοποιήση Keras HDF5(η προεπιλογή για την υλοποίηση του συστήματος υποστήριξης του Keras):


In [ ]:
# Save weights to a HDF5 file
model.save_weights('my_model.h5', save_format='h5')

# Restore the model's state
model.load_weights('my_model.h5')

Αποθήκευση μόνο των ρυθμίσεων του μοντέλου

Οι ρυθμίσεις ενός μοντέλου μπορούν να αποθηκευτούν-αυτό σειριοποιεί την αρχιτεκτονική του μοντέλου χωρίς βάρη. Οι αποθηκευμένες ρυθμίσεις μπορόυν να αναπαράγουν και να αρχικοποιήσουν το ίδιο μοντέλο, ακόμη και χωρίς τον κώδικα που όρισε το πρότυπο μοντέλο. To Keras υποστηρίζει τα JSON και YAML ως μορφές σειριοποίησης:


In [ ]:
# Serialize a model to JSON format
json_string = model.to_json()
json_string

In [ ]:
import json
import pprint
pprint.pprint(json.loads(json_string))

Αναπαραγωγή του μοντέλου(νεότερα αρχικοποιήθεντος) από το JSON :


In [ ]:
fresh_model = tf.keras.models.model_from_json(json_string)

Η σειριοποίηση μοντέλου σε μορφή YAML απαιτεί την εγκατάσταση της pyyaml πριν γίνει είσοδος της TensorFlow:


In [ ]:
yaml_string = model.to_yaml()
print(yaml_string)

Αναπαραγωγή του μοντέλου από το YAML :


In [ ]:
fresh_model = tf.keras.models.model_from_yaml(yaml_string)

Προσοχή : Μοντέλα ως υποκλάσεις δεν σειριοποιούνται διότι η αρχιτεκτονική τους ορίζεται από τον κώδικα Python στο σώμα τις μεθόδου call.

Αποθήκευση ολόκληρου του μοντέλου σε ένα αρχείο

Ολόκληρο το μοντέλο μπορεί να αποθηκευτεί σε ένα μόνο αρχείο το οποίο περιέχει τα βάρη , τις ρυθμίσεις του μοντέλου , ακόμη και τις ρυθμίσεις του βελτιστοποιητή. Έτσι , μπορείτε να θέσετε ένα σημείο ελέγχου σε ένα μοντέλο και να συνεχίσετε την εκμάθηση αργότερα - από την ακριβώς ίδια κατάσταση - χωρίς πρόσβαση στον πρωταρχικό κώδικα :


In [ ]:
# Create a simple model
model = tf.keras.Sequential([
  layers.Dense(10, activation='softmax', input_shape=(32,)),
  layers.Dense(10, activation='softmax')
])
model.compile(optimizer='rmsprop',
              loss='categorical_crossentropy',
              metrics=['accuracy'])
model.fit(data, labels, batch_size=32, epochs=5)


# Save entire model to a HDF5 file
model.save('my_model.h5')

# Recreate the exact same model, including weights and optimizer.
model = tf.keras.models.load_model('my_model.h5')

Για να μάθετε περισσότερα για την αποθήκευση και την σειριοποίηση , πατήστε εδώ.

"Ενθουσιώδης" εκτέλεση(Eager execution)

H "Ενθουσιώδης" εκτέλεση είναι ένα (επιτακτικό) περιβάλλον προγραμματισμού το οποίο αξιολογεί λειτουργίες αμέσως. Αυτό δεν απαιτείται από το Keras , ωστόσο η tf.keras παρέχει υποστήριξη και χρησιμεύει για την επιθεώρηση και την εκσφαλμάτωση του προγράμματος.

Όλα τα API της tf.keras για την κατασκευή μοντέλων είναι συμβατά με την "ενθουσιώδη εκτέλεση". Και καθώς τα Σειριακά και τα λειτουργικά (functional) API μπορούν να χρησιμοποιηθούν, η "ενθουσιώδης" εκτέλεση επωφελεί ιδιαίτερα την υποκατηγοριοποίηση μοντέλων και την κατασκευή παραμετροποιήσιμων επιπέδων-τα ΑPI's που σας προτρέπουν να γράψετε το "προς τα εμπρος πέρασμα" ως κώδικα (σε αντίθεση με τα API's που δημιουργούν μοντέλα μέσω της σύνθεσης των ήδη υπάρχοντων επιπέδων)

Δείτε τον οδηγό αυτό για παραδείγματα χρήσης μοντέλων Keras με custom training looops και την tf.GradientTape. Ακόμη , μπορείτε να δείτε ένα ολοκληρωμένο και σύντομο παράδειγμα εδώ.

Διανομή

Τα μοντέλα της tf.keras μπορούν να εκτελεστούν σε πολλαπλές GPUs ,με την χρήση της tf.distribute.Strategy. Το API αυτό κατανείμει την μάθηση σε πολλαπλές κάρτες γραφικών με σχεδόν καθόλου αλλαγές στον υπάρχον κώδικα.

Επί του παρόντος, η tf.distribute.MirroredStrategy αποτελεί την μόνη στρατηγική κατανομής που υποστηρίζεται. Η MirroredStrategy πραγματοποιεί in-graph replication μαζί με συγχρονισμένη μάθηση, χρησιμοποιώντας all-reduce σε ένα μηχάνημα. Για να χρησιμοποιήσετε τη distribute.Strategy, εμφωλεύστε την αρχικοποίηση του βελτιστοποιητή, τον κατασκευαστή του μοντέλου, και το compile σε ένα μπλοκ κώδικα Strategy.scope(). Έπειτα , προχωρήστε στην εκμάθηση του μοντέλου.

Το ακόλουθο παράδειγμα κατανείμει ένα tf.keras.Model σε πολλαπλές κάρτες γραφικών σε ένα μηχάνημα. Πρώτα , ορίζεται ένα μοντέλο εντός της distribute.Strategy:


In [ ]:
strategy = tf.distribute.MirroredStrategy()

with strategy.scope():
  model = tf.keras.Sequential()
  model.add(layers.Dense(16, activation='relu', input_shape=(10,)))
  model.add(layers.Dense(1, activation='sigmoid'))

  optimizer = tf.keras.optimizers.SGD(0.2)

  model.compile(loss='binary_crossentropy', optimizer=optimizer)

model.summary()

Στη συνέχεια , εξασκείστε το μοντέλο πάνω σε δεδομένα κατά τα γνωστά :


In [ ]:
x = np.random.random((1024, 10))
y = np.random.randint(2, size=(1024, 1))
x = tf.cast(x, tf.float32)
dataset = tf.data.Dataset.from_tensor_slices((x, y))
dataset = dataset.shuffle(buffer_size=1024).batch(32)

model.fit(dataset, epochs=1)

Για περισσότερες πληροφορίες , δείτε τον πλήρη οδηγό για την Κατανεμημένη Μάθηση με TensorFlow.