Il passaggio dagli stimatori di TensorFlow ai modelli Keras rappresenta un'evoluzione significativa nel flusso di lavoro e nel paradigma di creazione, addestramento e distribuzione di modelli di machine learning, in particolare all'interno degli ecosistemi TensorFlow e Google Cloud. Questo cambiamento non rappresenta semplicemente un cambiamento nelle preferenze delle API, ma riflette tendenze più ampie in termini di accessibilità, flessibilità e integrazione delle moderne pratiche di deep learning.
Contesto: stimatori TensorFlow
Gli stimatori TensorFlow sono stati introdotti per standardizzare il processo di addestramento, valutazione e distribuzione di modelli di machine learning. L'API degli stimatori ha fornito un'astrazione di alto livello per l'addestramento distribuito, una facile distribuzione su diverse piattaforme (inclusa Google Cloud AI Platform) e il supporto integrato per una varietà di attività di machine learning come classificazione, regressione e persino modellazione personalizzata.
Il flusso di lavoro dell'Estimatore in genere prevede:
– Definizione di una funzione di input per leggere i dati.
– Scrivere un `model_fn` per incapsulare la logica del modello, le perdite e gli ottimizzatori.
– Creazione di un oggetto `Estimator`.
– Chiamata di metodi quali `.train()`, `.evaluate()` e `.predict()`.
Gli stimatori fornivano una netta separazione tra input dei dati, costruzione del modello ed esecuzione, il che si è rivelato particolarmente utile per l'addestramento e il servizio scalabili. Gestivano inoltre gran parte del codice boilerplate necessario per l'addestramento distribuito e la gestione dei checkpoint.
Tuttavia, l'API Estimator presentava diverse limitazioni:
– Era meno intuitivo per i principianti, soprattutto per chi era alle prime armi con il deep learning.
– La personalizzazione dei modelli (soprattutto per le architetture dinamiche) era macchinosa.
– L’integrazione con le nuove funzionalità (come livelli personalizzati o perdite) introdotte nella comunità del deep learning è stata più lenta e complessa.
L'ascesa dei modelli Keras
Keras è stato originariamente sviluppato come una libreria di reti neurali indipendente e intuitiva. Si concentrava sulla semplicità e sulla rapida prototipazione tramite un'API concisa e coerente. Quando TensorFlow ha adottato Keras come API ufficiale di alto livello con il rilascio di TensorFlow 2.x, ha segnalato il riconoscimento del valore che Keras ha apportato alla community.
Vantaggi principali dei modelli Keras
1. Semplicità e leggibilità:I modelli Keras sono generalmente più facili da comprendere e scrivere, riducendo il carico cognitivo per professionisti e ricercatori.
2. Flessibilità:Le API funzionali e di sottoclassamento di Keras consentono la costruzione di modelli complessi e dinamici, come quelli richiesti per la modellazione di sequenze, meccanismi di attenzione o modelli generativi.
3. Integrazione con l'ecosistema moderno di Deep Learning:I modelli Keras possono facilmente incorporare livelli, metriche, perdite e callback personalizzati, semplificando l'integrazione dei più recenti progressi della ricerca.
4. Flussi di lavoro end-to-end:Con Keras, la pre-elaborazione dei dati, la creazione del modello, la formazione, la valutazione e l'implementazione sono strettamente integrate.
5. Supporto nativo in TensorFlow 2.x:Con l'esecuzione Eager come impostazione predefinita, il debug e l'ispezione del modello risultano più semplici.
Keras come API di alto livello predefinita in TensorFlow
A partire da TensorFlow 2.x, Keras (`tf.keras`) è l'API di alto livello preferita e consigliata per la definizione e l'addestramento dei modelli. Questo cambiamento si riflette nella documentazione, nel supporto della community e nello sviluppo continuo delle funzionalità. Sebbene gli stimatori siano ancora supportati per compatibilità con le versioni precedenti e per determinati casi d'uso, nuove funzionalità e miglioramenti si concentrano sull'API Keras.
Esempio: Classificazione semplice con stimatore vs. Keras
Utilizzo di Estimator:
python import tensorflow as tf def model_fn(features, labels, mode): net = tf.layers.dense(features['x'], 10, activation=tf.nn.relu) logits = tf.layers.dense(net, 3, activation=None) predicted_classes = tf.argmax(logits, 1) if mode == tf.estimator.ModeKeys.PREDICT: predictions = { 'class_ids': predicted_classes[:, tf.newaxis], 'probabilities': tf.nn.softmax(logits), 'logits': logits, } return tf.estimator.EstimatorSpec(mode, predictions=predictions) loss = tf.losses.sparse_softmax_cross_entropy(labels=labels, logits=logits) if mode == tf.estimator.ModeKeys.TRAIN: optimizer = tf.train.AdamOptimizer() train_op = optimizer.minimize(loss, global_step=tf.train.get_global_step()) return tf.estimator.EstimatorSpec(mode, loss=loss, train_op=train_op) eval_metric_ops = { 'accuracy': tf.metrics.accuracy(labels=labels, predictions=predicted_classes) } return tf.estimator.EstimatorSpec( mode, loss=loss, eval_metric_ops=eval_metric_ops) estimator = tf.estimator.Estimator(model_fn=model_fn) # Data input functions omitted for brevity.
Utilizzo di Keras:
python import tensorflow as tf from tensorflow import keras model = keras.Sequential([ keras.layers.Dense(10, activation='relu', input_shape=(input_dim,)), keras.layers.Dense(3, activation='softmax') ]) model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy']) model.fit(x_train, y_train, epochs=5, batch_size=32)
Come visto sopra, il codice Keras è più conciso e accessibile e supporta iterazioni e sperimentazioni rapide.
Come Keras sostituisce gli stimatori nei flussi di lavoro di apprendimento automatico di Google Cloud
1. Formazione e distribuzione
Su Google Cloud AI Platform (ora Vertex AI), gli utenti hanno storicamente sfruttato gli Estimators per l'addestramento e l'erogazione distribuiti. Con l'adozione di Keras come standard, la piattaforma supporta pienamente i modelli Keras sia per l'addestramento che per il deployment:
- Formazione distribuita: I modelli Keras possono essere addestrati su più GPU o TPU utilizzando l'API `tf.distribute`. Questa funzionalità è pienamente compatibile con l'infrastruttura distribuita di Google Cloud.
- Esportazione e distribuzione del modello:I modelli Keras possono essere salvati nel formato TensorFlow SavedModel, che è lo standard per la distribuzione dei modelli su Google Cloud.
- Sintonia iperparametro:I modelli Keras si integrano con i servizi di ottimizzazione degli iperparametri di Google Cloud, consentendo agli utenti di ottimizzare i propri modelli in modo efficiente.
2. Pipeline di input dati
Keras si integra perfettamente con le pipeline `tf.data`, facilitando il caricamento, la pre-elaborazione e l'aumento dei dati in modo scalabile ed efficiente. Ciò consente ai professionisti di gestire grandi set di dati e complesse fasi di pre-elaborazione con un codice minimo.
3. Architetture di modelli personalizzati
Mentre la creazione di livelli personalizzati, perdite e cicli di formazione nell'API Estimator potrebbe risultare macchinosa, Keras fornisce meccanismi intuitivi per la sottoclassificazione di modelli e livelli, consentendo ai team di ricerca e produzione di implementare architetture all'avanguardia con maggiore facilità.
4. Monitoraggio e richiamate
Keras supporta un'ampia gamma di callback, strumenti che consentono il monitoraggio della formazione, la regolazione dei tassi di apprendimento, il salvataggio dei checkpoint, l'arresto anticipato e l'integrazione con TensorBoard.
5. Integrazione della comunità e dell'ecosistema
Molti set di dati popolari, modelli pre-addestrati e contributi di ricerca sono ora distribuiti come codice compatibile con Keras. Questo semplifica l'integrazione della ricerca all'avanguardia nei flussi di lavoro degli utenti di Google Cloud.
Migrazione dagli stimatori a Keras: considerazioni
Le organizzazioni o gli individui con basi di codice esistenti basate su Estimators possono passare a Keras con diversi gradi di impegno, a seconda della complessità del modello e del codice personalizzato. TensorFlow fornisce guide e strumenti per la migrazione per facilitare questo processo.
- Logica del modello personalizzato: La logica `model_fn` personalizzata negli Estimators si traduce spesso in classi di modelli Keras personalizzate.
- Strategie di formazione distribuita:La formazione distribuita con Keras utilizza l'API `tf.distribute`, che è più flessibile e potente rispetto alle strategie di distribuzione di Estimator.
- Servizio ed esportazione:I modelli Keras salvati nel formato SavedModel possono essere serviti con TensorFlow Serving o distribuiti su Vertex AI senza ulteriori modifiche.
Esempio: distribuzione di un modello Keras su Google Cloud Vertex AI
1. Definire e addestrare il modello
python import tensorflow as tf from tensorflow import keras model = keras.Sequential([ keras.layers.Dense(64, activation='relu', input_shape=(32,)), keras.layers.Dense(10, activation='softmax') ]) model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy']) model.fit(x_train, y_train, epochs=10, batch_size=32)
2. Esporta il modello
python model.save('saved_model/')
3. Carica su Google Cloud Storage
gsutil cp -r saved_model gs://my-bucket/path/to/model/
4. Distribuisci su Vertex AI
Utilizzando la Google Cloud Console o la CLI `gcloud`, il modello può essere distribuito per i servizi di previsione.
Questo flusso di lavoro evidenzia la natura semplificata dell'utilizzo di Keras nelle moderne pipeline di apprendimento automatico.
Affrontare le limitazioni e garantire la compatibilità con le versioni precedenti
Sebbene Keras soddisfi un'ampia gamma di esigenze di machine learning, alcuni flussi di lavoro legacy o requisiti specifici (ad esempio, alcune funzionalità di training distribuite di basso livello) potrebbero comunque richiedere l'utilizzo di Estimator. Tuttavia, lo sviluppo continuo di TensorFlow e dell'ecosistema di machine learning di Google Cloud è orientato a migliorare ulteriormente le capacità di Keras, garantendo la parità delle funzionalità e supportando la migrazione.
Valore didattico e impatto educativo
Questo passaggio verso Keras ha profonde implicazioni per l'insegnamento e l'apprendimento dell'apprendimento automatico:
- Barriera di ingresso abbassata:La sintassi chiara e concisa di Keras consente agli studenti e ai nuovi arrivati di concentrarsi sui concetti fondamentali anziché sul codice standard.
- Prototipazione rapida e sperimentazione:La capacità di modificare rapidamente architetture e parametri di formazione supporta l'apprendimento esperienziale.
- Allineamento agli standard di settore:Keras è ampiamente utilizzato sia nella ricerca accademica che nelle applicazioni industriali, quindi impararlo prepara gli utenti ad affrontare attività del mondo reale.
- Progressione continua:Gli studenti possono iniziare con semplici modelli sequenziali e passare progressivamente a sottoclassi personalizzate più avanzate senza cambiare framework.
Ecosistema e direzioni future
L'ecosistema TensorFlow più ampio (che comprende TensorFlow Hub, TensorFlow Lite, TensorFlow Extended e TensorFlow Serving) ha adottato Keras come interfaccia modello primaria, garantendo che i modelli creati con Keras siano trasferibili su diverse piattaforme: cloud, dispositivi mobili, web e edge.
Strumenti di ricerca, tutorial e contenuti didattici sono ora in gran parte incentrati su Keras, rafforzando ulteriormente il suo status di strumento predefinito per i nuovi progetti.
Esempi che illustrano le caratteristiche principali di Keras
Cicli di allenamento personalizzati
Keras supporta sia il metodo di alto livello `.fit()` sia i cicli di addestramento personalizzati utilizzando `tf.GradientTape`:
python class MyModel(tf.keras.Model): def __init__(self): super(MyModel, self).__init__() self.dense1 = tf.keras.layers.Dense(64, activation='relu') self.dense2 = tf.keras.layers.Dense(10, activation='softmax') def call(self, inputs): x = self.dense1(inputs) return self.dense2(x) model = MyModel() optimizer = tf.keras.optimizers.Adam() loss_fn = tf.keras.losses.CategoricalCrossentropy() for epoch in range(epochs): for x_batch, y_batch in train_dataset: with tf.GradientTape() as tape: logits = model(x_batch) loss = loss_fn(y_batch, logits) gradients = tape.gradient(loss, model.trainable_weights) optimizer.apply_gradients(zip(gradients, model.trainable_weights))
Con gli Estimators è stato difficile raggiungere questo livello di flessibilità.
Integrazione con tf.data
È possibile realizzare pipeline di dati efficienti come segue:
python train_dataset = tf.data.Dataset.from_tensor_slices((x_train, y_train)) train_dataset = train_dataset.shuffle(buffer_size=1024).batch(32) model.fit(train_dataset, epochs=5)
Questa integrazione supporta l'elaborazione e l'aumento dei dati su larga scala.
Serializzazione e portabilità del modello
I modelli Keras possono essere esportati nel formato SavedModel, consentendo:
– Distribuzione con TensorFlow Serving
– Conversione a TensorFlow Lite per dispositivi mobili e embedded
– Condivisione con TensorFlow Hub o Model Garden
Sintonia iperparametro
I modelli Keras si integrano direttamente con strumenti di ottimizzazione automatizzata degli iperparametri, come Keras Tuner e Vertex AI Vizier di Google Cloud.
{{EJS15}}Differenze chiave: Estimator vs. Keras nella pratica
caratteristica | Stimatore del flusso tensoriale | Modello Keras (tf.keras) |
---|---|---|
Stile API | Funzionale tramite `model_fn`, spesso prolisso | Orientato agli oggetti, conciso |
Personalizzazione | Limitato, tramite logica model_fn personalizzata | Alto, tramite funzionale e sottoclassificazione |
Inserimento dati | Richiede funzioni di input personalizzate | Integrato con `tf.data` |
Formazione distribuita | Integrato, ma meno flessibile | Flessibile tramite `tf.distribute` |
Esportazione del modello | SavedModel, spesso più passaggi | SavedModel, salvataggio su una riga |
Integrazione con l'ecosistema | Un po' isolato | Piena integrazione |
Supporto alla comunità e alla ricerca | Diminuzione | Diffuso |
Debug | Grafici statici, meno intuitivi | Esecuzione più rapida, debug più semplice |
FAQ: Domande relative alla transizione
I vecchi modelli Estimator possono essere utilizzati con Keras?
Sebbene i modelli Estimator e Keras siano distinti, TensorFlow fornisce utility per convertire o integrare i modelli Estimator nei flussi di lavoro. Tuttavia, per i nuovi sviluppi, si consiglia Keras.
Ci sono casi d'uso in cui gli stimatori sono preferibili?
In rari casi che coinvolgono flussi di lavoro di formazione distribuiti legacy o requisiti specializzati, gli Estimator possono comunque essere utilizzati. Tuttavia, questi scenari stanno diventando sempre più rari con l'espansione delle funzionalità di Keras.
In che modo Keras supporta carichi di lavoro di produzione su larga scala?
Keras si integra con le funzionalità di prestazioni di TensorFlow, tra cui training a precisione mista, strategie di distribuzione e pipeline di input ottimizzate, rendendolo adatto ai casi d'uso aziendali.
Keras supporta modelli di reti non neurali?
Keras è progettato principalmente per le reti neurali. Per alcuni algoritmi di machine learning classici (ad esempio, random forest e boosting), sono preferibili altre librerie (come scikit-learn o TensorFlow Decision Forests).
Raccomandazione didattica
Sia per i principianti che per i professionisti, investire tempo nell'apprendimento di Keras è altamente consigliato. Tutorial, libri di testo e MOOC ora utilizzano Keras come standard per la formazione sul deep learning. La comprensione dell'API di Keras garantisce la compatibilità con le migliori pratiche moderne di machine learning e implementazione cloud.
Altre domande e risposte recenti riguardanti EITC/AI/GCML Google Cloud Machine Learning:
- Quali sono alcuni algoritmi AI/ML comuni da utilizzare sui dati elaborati?
- Come configurare uno specifico ambiente Python con Jupyter Notebook?
- Come utilizzare TensorFlow Serving?
- Che cos'è Classifier.export_saved_model e come utilizzarlo?
- Perché la regressione viene spesso utilizzata come predittore?
- I moltiplicatori di Lagrange e le tecniche di programmazione quadratica sono rilevanti per l'apprendimento automatico?
- È possibile applicare più di un modello durante il processo di apprendimento automatico?
- Il Machine Learning può adattare l'algoritmo da utilizzare a seconda dello scenario?
- Qual è il percorso più semplice per un principiante assoluto senza alcuna formazione di programmazione, per l'addestramento e l'implementazione di modelli di intelligenza artificiale di base su Google AI Platform utilizzando una versione di prova/livello gratuito e una console GUI in modo graduale?
- Come addestrare e distribuire in modo pratico un semplice modello di intelligenza artificiale in Google Cloud AI Platform tramite l'interfaccia GUI della console GCP in un tutorial passo passo?
Visualizza altre domande e risposte in EITC/AI/GCML Google Cloud Machine Learning