Logo Zephyrnet

Trasferisci l'apprendimento per il riconoscimento delle immagini e l'elaborazione del linguaggio naturale

Data:

Se hai avuto la possibilità di leggere la Parte 1 di questo articolo, ricorderai che Transfer Learning è un metodo di apprendimento automatico in cui l'applicazione delle conoscenze ottenute da un modello utilizzato in un compito, può essere riutilizzata come punto di partenza per un altro compito.

Se non ne hai avuto l'occasione e non hai una grande comprensione di Transfer Learning, dargli una lettura ti aiuterà a capire molto meglio questo articolo. 

Riconoscimento dell'immagine

 
Quindi esaminiamo prima cosa è il riconoscimento delle immagini. Il riconoscimento delle immagini è il compito assegnato alla tecnologia informatica per essere in grado di rilevare e analizzare un oggetto o una caratteristica in un'immagine o in un video. È l'area principale in cui le reti neurali profonde fanno la loro magia poiché sono progettate per riconoscere i modelli. 

Se vuoi vedere come le reti neurali analizzano e afferrano la loro comprensione delle immagini, dai un'occhiata qui. Questo mostra come i livelli di livello inferiore si concentrano sull'apprendimento di funzionalità di basso livello e come i livelli di livello superiore si adattano per apprendere funzionalità di livello superiore.

Abbiamo vagamente parlato della formazione della rete su cani e gatti nella parte 1 di questo articolo, parliamone di più. Il cervello umano è in grado di riconoscere e distinguere la differenza tra gli oggetti. Il riconoscimento delle immagini mira anche ad avere una capacità simile al cervello umano, essendo anche in grado di identificare e rilevare la differenza tra gli oggetti in un'immagine. 

L'algoritmo utilizzato dal riconoscimento delle immagini è un classificatore di immagini che riceve un'immagine di input e restituisce ciò che l'immagine contiene. Questo algoritmo deve essere addestrato per apprendere le differenze tra gli oggetti che rileva. Affinché il classificatore di immagini identifichi cani e gatti, il classificatore di immagini deve essere addestrato con migliaia di immagini di cani e gatti insieme a immagini che non contengono cani e gatti. Pertanto i dati ottenuti da questo classificatore di immagini possono quindi essere implementati e utilizzati nel rilevamento di cani e gatti in altri compiti. 

Allora, dove puoi trovare modelli di immagine pre-addestrati?

 
Ci sono molti modelli pre-addestrati là fuori, quindi trovare quello giusto per risolvere il tuo problema richiederà un po' di ricerca. Farò un po' di ricerca per te. Inizierò parlando di Keras. Keras offre un'ampia gamma di modelli pre-addestrati che possono essere utilizzati per trasferire l'apprendimento, l'estrazione di funzionalità, la messa a punto e la previsione. Puoi trovarne un elenco qui.

Un esempio di applicazione Keras è l'architettura Xception, di cui ho parlato brevemente più avanti. Ecco come inizializzare Xception su ImageNet.

tf.keras.applications.Xception( include_top=True, weights="imagenet", input_tensor=Nessuno, input_shape=Nessuno, pooling=Nessuno, classi=1000, classifier_activation="softmax", )

Mentre parliamo di Keras, non dimentichiamoci di TensorFlow Hub. TensorFlow è una libreria open source sviluppata da Google, che supporta il machine learning e il deep learning. TensorFlow Hub offre una varietà di modelli pre-addestrati e pronti per l'implementazione, come la classificazione di immagini, testo, video e audio. 

Un modello sequenziale è utile per una semplice pila di livelli, ciò comporta quando ogni livello ha un tensore di input e un tensore di output. 

Esempio 1:

modello = tf.keras.Sequential([ embed, tf.keras.layers.Dense(16, activation="relu"), tf.keras.layers.Dense(1, activation="sigmoid"), ])

Esempio 2:

m = tf.keras.Sequential([ hub.KerasLayer("https://tfhub.dev/google/imagenet/inception_v1/classification/5") ]) m.build([Nessuno, 224, 224, 3]) # Forma di input batch.

All'interno del deep learning, alcune strategie possono consentire di ottenere il massimo beneficio da modelli pre-addestrati. 
 
 

Estrazione di feature

 
La prima strategia di cui parlerò è Feature Extraction. In sostanza, esegui il modello pre-addestrato come estrattore di funzionalità fisse, utilizzando le funzionalità desiderate per addestrare un nuovo classificatore. I livelli convoluzionali più vicini al livello di input del modello apprendono funzionalità di basso livello come bordi e linee nel riconoscimento dell'immagine. Man mano che i livelli vanno avanti, iniziano ad apprendere funzionalità più complesse per poi essere in grado di interpretare caratteristiche specifiche più vicino all'output, che è l'attività di classificazione a portata di mano. Possiamo utilizzare i diversi livelli di livello come un'integrazione separata per l'estrazione di funzionalità utilizzando porzioni del modello per classificare il nostro compito. 

Ad esempio, se l'attività è diversa dalla classificazione di oggetti in un'immagine che fa il modello pre-addestrato, sarebbe più appropriato utilizzare l'output dopo che il modello pre-addestrato ha attraversato alcuni livelli. Pertanto, il nuovo output del livello desiderato verrà alimentato poiché l'input di un nuovo modello ha acquisito caratteristiche essenziali per passare al nuovo classificatore ed essere in grado di risolvere il compito a portata di mano. 

Nel complesso, l'idea è di sfruttare il modello pre-addestrato utilizzando l'estrazione delle funzionalità per determinare quali funzionalità sono utili per risolvere il tuo compito, ma non utilizzerai l'output della rete poiché è troppo specifico per l'attività. Dovrai quindi costruire l'ultima parte del modello per essere specifica per il tuo compito. 

Ritocchi

 
La seconda strategia è la messa a punto, o ciò che mi piace chiamare chirurgia di rete. Abbiamo parlato di regolazione fine sopra, dove si basa sull'effettuare regolazioni "fini" a un processo per ottenere l'output desiderato per migliorare ulteriormente le prestazioni. La messa a punto è vista anche come un ulteriore passo verso l'estrazione delle funzioni. Nella messa a punto congeliamo determinati livelli e ne riattiviamo alcuni in modo selettivo per migliorarne la precisione, ottenendo prestazioni più elevate a un tasso di apprendimento inferiore e richiedendo meno tempo di allenamento. 

La messa a punto è fondamentale se si desidera essere in grado di ottenere una rappresentazione efficiente delle funzionalità dal modello di base, essendo così più adatti al proprio compito. 

Esempio: come utilizzare un modello di immagine pre-addestrato in Keras

 
Quindi ora diamo un'occhiata a un esempio. Dato che abbiamo parlato così tanto di cani e gatti, facciamo un esempio di riconoscimento delle immagini su di loro. 

Carica i dati

 
Quindi assicuriamoci prima di importare le librerie di cui abbiamo bisogno e di caricare i dati.

import numpy as np import tensorflow come tf da tensorflow import keras import tensorflow_datasets come tfds

È sempre bene stampare la dimensione del campione per l'allenamento e il test per capire la quantità di dati con cui stai lavorando e dare un'occhiata alle immagini, in modo da poter dare un'occhiata a quali dati stai lavorando. 

Trasferisci l'apprendimento per il riconoscimento delle immagini e l'elaborazione del linguaggio naturale


 

A causa delle dimensioni delle immagini variabili, è un buon approccio standardizzare a dimensioni fisse dell'immagine, poiché è un buon input coerente per la rete neurale. 

Pre-elaborazione dei dati

 
Ora entriamo nell'aumento dei dati. Quando si lavora con un set di dati più piccolo, è buona norma applicare la trasformazione casuale alle immagini di addestramento, ad esempio il capovolgimento orizzontale. Capovolgere significa ruotare un'immagine su un asse verticale o orizzontale. Ciò contribuirà a esporre il modello a diverse angolazioni e aspetti dei dati di addestramento, riducendo l'overfitting. 

da tensorflow importa keras da tensorflow.keras importa livelli data_augmentation = keras.Sequential( [layers.RandomFlip("horizontal"), layers.RandomRotation(0.1),] )

Creazione di un base_model dall'architettura scelta (Xception)

 
Il passaggio successivo è la creazione del modello. Per prima cosa inizieremo con l'istanziazione di un modello di base, xceptione caricarvi pesi pre-addestrati. In questo esempio, stiamo usando ImageNet. Si passa quindi al congelamento di tutti i livelli nel modello base. Il congelamento aiuta a prevenire l'aggiornamento dei pesi durante l'allenamento.

base_model = keras.applications.Xception( weights="imagenet", # Pesi pre-addestrati su ImageNet. input_shape=(150, 150, 3), include_top=False, ) base_model.trainable = False

Allena lo strato superiore

 
Il passaggio successivo è la creazione di un nuovo livello sopra i livelli congelati, che imparerà a conoscere le vecchie funzionalità e le utilizzerà per determinare le previsioni sul nuovo set di dati. Ciò è vantaggioso, come spiegato più avanti nei passaggi dell'apprendimento del trasferimento, la probabilità che l'output corrente sul modello pre-addestrato e l'output desiderato dal modello siano diversi è alta, quindi l'aggiunta di nuovi livelli migliorerà il modello in generale. 

# Crea un nuovo modello sopra gli input = keras.Input(shape=(150, 150, 3)) x = data_augmentation(inputs) # Applica l'aumento casuale dei dati


 

Trasferisci l'apprendimento per il riconoscimento delle immagini e l'elaborazione del linguaggio naturale


 

Ritocchi

 
Quindi, dopo aver eseguito il modello con i livelli congelati, è necessario eseguire il modello con i modelli di base non congelati, il che sostanzialmente migliora il modello, con un tasso di apprendimento inferiore. Vuoi ridurre la quantità di overfitting, quindi eseguiamo questo passaggio lentamente e sblocchiamo il modello base.

base_model.trainable = Vero

Ora è il momento di compilare di nuovo il modello.

model.compile(optimizer=keras.optimizers.Adam(1e-5), # Low learning rate loss=keras.losses.BinaryCrossentropy(from_logits=True), metrics=[keras.metrics.BinaryAccuracy()], ) epochs = 10 model.fit(train_ds, epochs=epochs, validation_data=validation_ds)

Trasferisci l'apprendimento per il riconoscimento delle immagini e l'elaborazione del linguaggio naturale


 

Se desideri avere un ulteriore gander, puoi farlo cliccando qui per visualizzare il taccuino Colab. 
 
 

Elaborazione del linguaggio naturale

 
Abbiamo parlato un po' della classificazione delle immagini, ora esaminiamo il Natural Language Processing (NLP). Allora, cos'è la PNL? La PNL è la capacità di un computer di essere in grado di rilevare e comprendere il linguaggio umano, attraverso la parola e il testo, proprio come possiamo fare noi umani. 

Il linguaggio umano contiene molte ambiguità che causano difficoltà nel riuscire a creare software in grado di rilevare con precisione la voce e il testo. Ad esempio, sarcasmo, grammatica e omofoni, tuttavia, questi sono solo alcuni ostacoli nell'apprendimento della lingua umana. 

Esempi di NLP sono il riconoscimento vocale e l'analisi del sentimento. I casi d'uso della PNL sono cose come il rilevamento dello spam. Lo so, potresti non aver mai pensato che la PNL fosse implementata nel rilevamento dello spam, ma è così. La classificazione del testo di NLP ha la capacità di scansionare le e-mail e rilevare la lingua che indica che potrebbe essere spam o phishing. Lo fa analizzando l'uso eccessivo di cattiva grammatica, minacce, uso eccessivo della terminologia finanziaria e altro ancora. 

Quindi, come funziona Transfer Learning nella PNL? Bene, in pratica funziona allo stesso modo con Image Recognition. L'addestramento di un modello in linguaggio naturale può avere un prezzo piuttosto elevato, richiede molti dati e richiede molto tempo di addestramento su hardware sofisticato. Ma la buona notizia è che, proprio come il riconoscimento delle immagini, puoi scaricare gratuitamente questi modelli pre-addestrati e metterli a punto per lavorare sul tuo set di dati specifico.

Dove puoi trovare questi modelli pre-addestrati, chiedi? 

 
Keras non offre solo modelli pre-addestrati per il riconoscimento delle immagini, ma fornisce anche architetture per la NLP. Puoi dare un'occhiata qui

abbracciare il viso

 
Diamo un'occhiata abbracciare il viso. HuggingFace è un fornitore open source di elaborazione del linguaggio naturale (NLP) che ha svolto un lavoro straordinario per renderlo facile da usare. 

La loro libreria Transformers è una libreria basata su Python che fornisce architetture come BERT, che eseguono attività NLP come la classificazione del testo e la risposta alle domande. Tutto quello che devi fare è caricare i loro modelli pre-addestrati con poche righe di codice e sei pronto per iniziare a sperimentare. Per iniziare con Transformers, dovrai installarlo.

Di seguito è riportato un esempio di utilizzo dell'analisi del sentimento, che è la capacità di essere in grado di identificare un'opinione espressa in un pezzo di testo.

! pip install transformers from transformers import pipeline classifier = pipeline('sentiment-analysis') classifier('Trovo molto utile l'articolo su Transfer learning.')

Produzione:

[{'label': 'POSITIVE', 'score': 0.9968850016593933}]

Migliorare il tuo modello pre-addestrato con la messa a punto è un'opzione con HuggingFace, utilizzando l'API Trainer. Transformers ha privato una classe Trainer che aiuta a mettere a punto il tuo modello pre-addestrato. Questo passaggio viene dopo l'elaborazione dei dati e richiede l'importazione di TrainingArguments

da trasformatori import TrainingArguments

Per saperne di più su HuggingFace, puoi seguire questo link

Incorporamento di parole

 
Che ne dici dell'incorporamento di parole? Che cos'è? L'incorporamento di parole è una rappresentazione in cui parole simili hanno una codifica simile. Può essere in grado di rilevare una parola in un documento e collegare la sua relazione ad altre parole. 

Un esempio di questo è Word2Vec, che è una rete neurale a due strati che elabora i testi mediante codifica vettoriale. 

Word2Vec ha utilizzato due metodi per apprendere la rappresentazione delle parole:

  1. Sacco di parole continuo – è un'architettura modello che cerca di prevedere la parola di destinazione (parola di mezzo) in base alle parole di origine (parole vicine). L'ordine delle parole nel contesto non è necessariamente importante, il motivo per cui l'architettura è chiamata 'bag-of-words
  2. Salta-grammo continuo – è un modello di architettura essenzialmente l'opposto di Bag-of-Words. Cerca di prevedere le parole di origine (parole vicine) data una parola di destinazione (parola centrale)

L'estrazione di funzionalità è una strategia utilizzata in Word Embedding, in cui rileva e produce rappresentazioni di funzionalità utili per il tipo di attività NLP su cui si sta tentando di lavorare. Nell'estrazione delle caratteristiche, le parti (frasi o parole) vengono estratte in una matrice che ha una rappresentazione di ogni parola data da ogni parola. I pesi non cambiano e viene utilizzato solo lo strato superiore del modello. 

Tuttavia, la messa a punto modifica i pesi del modello pre-addestrato, il che può essere un danno in quanto il metodo può causare una perdita di parole nella fase di regolazione, a causa della modifica dei pesi e di quanto una volta appreso, non è più nella memoria . Questo è noto come "interferenza catastrofica". 

Esempio: come utilizzare un modello NLP pre-addestrato in Keras

 
Stavamo solo parlando di Word Embedding, quindi diamo un'occhiata a un esempio. Per ricapitolare velocemente cos'è il Word Embedding: è una rappresentazione in cui parole simili hanno una codifica simile. Può essere in grado di rilevare una parola in un documento e collegare la sua relazione ad altre parole. Quindi vediamo come funziona allora.

Carica i dati

 
In questo esempio, esamineremo le recensioni dei film. Se ricordi l'esempio che abbiamo fatto sopra, utilizzando l'analisi del sentimento, ci ha prodotto un output che determina quanto fosse positivo. Con queste recensioni di film, abbiamo positivo e negativo, quindi questa è una classificazione binaria. 

url = "https://ai.stanford.edu/~amaas/data/sentiment/aclImdb_v1.tar.gz" set di dati = tf.keras.utils.get_file("aclImdb_v1.tar.gz", url, untar=True, cache_dir='.', cache_subdir='') dataset_dir = os.path.join(os.path.dirname(dataset), 'aclImdb') os.listdir(dataset_dir)

Puoi vedere la distinzione nell'immagine qui sotto, 0 è negativo e 1 è positivo.

Trasferisci l'apprendimento per il riconoscimento delle immagini e l'elaborazione del linguaggio naturale


 

Sono quindi passato all'utilizzo di Embedding Layer di Keras, per trasformare numeri interi positivi in ​​vettori densi con dimensioni fisse. I pesi per l'incorporamento vengono inizializzati in modo casuale e vengono regolati durante la backpropagation. Una volta appresa la conoscenza, gli incorporamenti di parole codificheranno le somiglianze tra le parole che hanno appreso e le parole che avevano imparato in precedenza.

# Incorpora un vocabolario di 1,000 parole in 5 dimensioni. embedding_layer = tf.keras.layers.Embedding(1000, 5)

Preelaborazione del testo

 
Durante la fase di pre-elaborazione del testo, inizializzeremo un livello TextVectorization con i parametri desiderati per vettorializzare le recensioni dei film. Il livello di vettorizzazione del testo aiuterà a dividere e mappare le stringhe dalle recensioni dei film in numeri interi. 

# strato di vettorizzazione del testo da dividere e mappare le stringhe su numeri interi. vectorize_layer = TextVectorization( standardize=custom_standardization, max_tokens=vocab_size, output_mode='int', output_sequence_length=sequence_length)

Crea un modello

 
Il vectorize_layer della pre-elaborazione precedente verrà implementato come primo livello nel modello, poiché ha trasformato le stringhe in indici di vocabolario. Invierà le stringhe trasformate nel livello di incorporamento. 

Il livello di incorporamento prende quindi questi indici di vocabolario e scansiona il vettore per ogni indice di parole, dove stanno imparando mentre i modelli si allenano. 

model = Sequential([ vectorize_layer, Embedding(vocab_size, embedding_dim, name="embedding"), GlobalAveragePooling1D(), Dense(16, activation='relu'), Dense(1) ])

In questo esempio useremo Scheda Tensor, che è uno strumento per fornire visualizzazioni che mostrano il flusso di lavoro di apprendimento automatico, ad esempio perdita e precisione. 

Compila il modello

 
Compileremo il modello utilizzando l'ottimizzatore Adam e la perdita di BinaryCrossentropy.

model.compile(optimizer='adam', loss=tf.keras.losses.BinaryCrossentropy(from_logits=True), metrics=['accuratezza'])

Trasferisci l'apprendimento per il riconoscimento delle immagini e l'elaborazione del linguaggio naturale


 

Ho menzionato il TensorBoard, che visualizza le metriche dei modelli e puoi vederlo di seguito.

Trasferisci l'apprendimento per il riconoscimento delle immagini e l'elaborazione del linguaggio naturale


 

Hai visto come addestrare e testare un modello NLP utilizzando un modello di incorporamento di parole pre-addestrato. Se desideri dare un'occhiata più da vicino al taccuino Colab, puoi farlo  
 
 

Quali sono le migliori pratiche con il transfer learning?

  1. Modelli pre-addestrati – Approfitta di questi modelli open source pre-addestrati che possono aiutarti a risolvere il tuo compito di destinazione poiché coprono diversi campi. Può farti risparmiare un sacco di tempo nella costruzione di un modello da zero.
  2. Modello di origine – è importante trovare un modello compatibile sia con l'attività di origine che con l'attività di destinazione. Se il tuo modello di origine è troppo lontano dal tuo obiettivo e può essere trasferita poca conoscenza, sarà più dispendioso in termini di tempo poiché il modello di destinazione richiederà più tempo per essere raggiunto. 
  3. sovradattamento – Attività di destinazione con un campione di dati ridotto, in cui l'attività di origine e l'attività di destinazione sono troppo simili, ciò può portare a un overfitting. Il congelamento dei livelli e l'ottimizzazione della velocità di apprendimento nel modello del corso possono aiutarti a ridurre l'overfitting nel modello. 

Spero che questo articolo ti abbia fornito una migliore comprensione di come implementare il transfer learning attraverso tipi di Machine Learning. Provalo tu stesso!

 
 
Nisha Aria è un Data Scientist e scrittore tecnico freelance. È particolarmente interessata a fornire consigli o tutorial sulla carriera in Data Science e conoscenze basate sulla teoria sulla Data Science. Desidera anche esplorare i diversi modi in cui l'Intelligenza Artificiale è/può avvantaggiare la longevità della vita umana. Una studentessa appassionata, che cerca di ampliare le sue conoscenze tecnologiche e capacità di scrittura, aiutando al contempo a guidare gli altri.

Fonte: https://www.kdnuggets.com/2022/01/transfer-learning-image-recognition-natural-language-processing.html

spot_img

L'ultima intelligenza

spot_img