top of page

PyTorch vs TensorFlow quale è meglio per creare modelli di deep learning

In questo articolo ti guideremo e confronteremo l'usabilità del codice e la facilità d'uso di TensorFlow e PyTorch sul set di dati MNIST più utilizzato per classificare le cifre scritte a mano.


PyTorch vs TensorFlow quale è meglio per creare modelli di deep learning
PyTorch vs TensorFlow quale è meglio per creare modelli di deep learning

Due delle librerie di deep learning basate su Python più popolari sono PyTorch e TensorFlow. Potrebbe essere difficile per un professionista del machine learning alle prime armi decidere quale utilizzare quando si lavora con un modello di deep learning. Potresti essere completamente inconsapevole delle distinzioni, rendendo impossibile per te prendere una decisione informata. Esamineremo alcune di queste differenze nella pratica in questo articolo creando un classificatore utilizzando entrambi i framework per la stessa risoluzione dei problemi. Infine, concluderemo come i modelli simili definiti per affrontare lo stesso problema ma che utilizzano infrastrutture diverse differiscono nei risultati. I punti principali da trattare in questo articolo sono elencati di seguito.


Indice Articolo

  1. Informazioni sui dati delle cifre MNIST

  2. Breve introduzione su TensorFlow

  3. Breve introduzione su PyTorch

  4. Creazione di un modello di deep learning per la classificazione delle immagini

    1. Costruzione di modelli con TensorFlow

    2. Costruzione di modelli con PyTorch

    3. Confrontiamo le prestazioni


Discutiamo prima il set di dati MNIST. Informazioni sui dati delle cifre MNIST


Il set di dati Modified National Institute of Standards and Technology è l'acronimo di set di dati MNIST . È una raccolta di 60.000 piccole immagini quadrate in scala di grigi di singole cifre scritte a mano che vanno da 0 a 9. L'obiettivo è ordinare un'immagine di una cifra scritta a mano in una delle dieci classi che rappresentano valori interi che vanno da 0 a 9, inclusi. È un set di dati ampiamente utilizzato e ben compreso che è stato risolto per la maggior parte. Le reti neurali convoluzionali di deep learning sono i modelli con le prestazioni migliori, con un'accuratezza di classificazione di oltre il 99% e un tasso di errore compreso tra lo 0,4% e lo 0,2% sul set di dati del test di tenuta. Gli esempi riportati di seguito provengono dal set di dati di addestramento delle cifre MNIST caricate dall'API del set di dati Tensorflow.

Discutiamo prima il set di dati MNIST. Informazioni sui dati delle cifre MNIST
Discutiamo prima il set di dati MNIST. Informazioni sui dati delle cifre MNIST

Breve introduzione su TensorFlow

Google ha sviluppato TensorFlow, che è stato reso open source nel 2015. Si è evoluto dal software di apprendimento automatico interno di Google, che è stato rifattorizzato e ottimizzato per l'uso in produzione. Il termine "TensorFlow" si riferisce al modo in cui i dati sono organizzati ed elaborati. Un tensore è la struttura dati più basilare sia in TensorFlow che in PyTorch. Quando usi TensorFlow, crei un grafico del flusso di dati con stato, simile a un diagramma di flusso che ricorda gli eventi passati, per eseguire operazioni sui dati in questi tensori. TensorFlow è noto per essere una libreria di deep learning ad alte prestazioni. Ha una base di utenti ampia e attiva, oltre a una pletora di modelli, strumenti e piattaforme di formazione, distribuzione e servizio ufficiali e di terze parti.


Breve introduzione su PyTorch

PyTorch è uno dei framework di deep learning più recenti, sviluppato dal team di Facebook e rilasciato su GitHub nel 2017. PyTorch sta guadagnando popolarità grazie alla sua facilità d'uso, semplicità, grafico computazionale dinamico e utilizzo efficiente della memoria. È imperativo, il che significa che viene eseguito immediatamente e l'utente può testarlo per vedere se funziona prima di scrivere l'intero codice. Possiamo scrivere una sezione di codice ed eseguirla in tempo reale perché ha un'implementazione Python integrata per fornire compatibilità come piattaforma di deep learning. Ha rapidamente guadagnato popolarità grazie alla sua interfaccia intuitiva, spingendo il team di Tensorflow a incorporare le sue funzionalità più popolari in Tensorflow 2.0.


Creazione di un modello di deep learning per la classificazione delle immagini

In questa sezione, confronteremo l'usabilità del codice e la facilità d'uso di TensorFlow e PyTorch sul set di dati MNIST più utilizzato per classificare le cifre scritte a mano. Utilizzando entrambi i framework verificheremo le procedure minime da eseguire per avere un modello di classificazione adeguato. In entrambi i passaggi del modello da eseguire sono il caricamento dei dati, la preelaborazione, la creazione del modello, l'addestramento e la visualizzazione del risultato. Per entrambi i modelli, ho cercato di mantenere i livelli e le configurazioni di iperparametri uguali tra loro. Quindi ora iniziamo prima con Tensorflow.


Creare modelli di deep learning con TensorFlow

Costruiamo un modello di rete neurale convoluzionale per la classificazione delle immagini in TensorFlow.



import tensorflow
from tensorflow.keras.datasets import mnist 
from tensorflow.keras.utils import to_categorical
from tensorflow.keras.layers import Conv2D, Flatten, Dense, MaxPooling2D
from tensorflow.keras.models import Sequential
import matplotlib.pyplot as plt

Carica e preelabora i dati. Qui la preelaborazione non è altro che rimodellare le immagini da 28 x 28 a 28 x 28 x 1 i, abbiamo aggiunto il canale del colore e 1 indica il canale del grigio. Successivamente, abbiamo creato una rappresentazione binaria di ciascuna classe e, infine, abbiamo ridimensionato tutti i valori dei pixel.



# Rimodelliamo e codifichiamo con onehot
x_train = x_train.reshape(x_train.shape[0], 28, 28, 1)
x_test = x_test.reshape(x_test.shape[0], 28, 28, 1)
y_train = to_categorical(y_train)
y_test = to_categorical(y_test)
 
# scaling
x_train = x_train.astype('float32')
x_test = x_test.astype('float32')
x_train = x_train / 255.0
x_test = x_test / 255.0


Successivamente, costruiremo un modello. Questo modello sarà composto da 2 strati convoluzionali seguiti da uno strato di pooling e un classificatore Dense. La discesa del gradiente stocastico viene utilizzata come funzione di ottimizzazione con un tasso di apprendimento di 0,01 e l'entropia incrociata categoriale come funzione di perdita, il modello viene addestrato per 5 epoche. E questo viene mantenuto anche nel modello Pytorch.




model = Sequential()
model.add(Conv2D(32, (3,3), input_shape = (28,28,1), activation='relu'))
model.add(Conv2D(64,(3,3), activation='relu'))
model.add(MaxPooling2D((2,2)))
model.add(Flatten())
model.add(Dense(1024, activation='relu'))
model.add(Dense(10, activation='softmax'))
# Compiliamo
model.compile(optimizer='sgd', loss='categorical_crossentropy', metrics=['accuracy'])
 
# Alleniamo 
history = model.fit(x_train, y_train, validation_split=0.3, epochs=5)


Curva di Apprendimento di Tensorflow
Curva di Apprendimento di Tensorflow

Fino a questo, questo è tutto il lavoro minimo richiesto per costruire un classificatore di immagini usando TensorFlow.



Creare modelli di deep learning con Pytorch

Costruiamo un modello di rete neurale convoluzionale per la classificazione delle immagini in PyTorch.


#importiamo le librerie
import torch
import torch.nn as nn
import torch.optim as optim
import torch.nn.functional as F
 
from torchvision import datasets, transforms

# preprocessiamo 
transform = transforms.Compose([
    transforms.Resize((8, 8)),
    transforms.ToTensor(),
    transforms.Normalize((0.1307,), (0.3081,))])
 
# carichiamo i dati
train_dataset = datasets.MNIST(
    'data', train=True, download=True, transform=transform)
test_dataset = datasets.MNIST(
    'data', train=False, download=True, transform=transform)
 
train_loader = torch.utils.data.DataLoader(train_dataset, batch_size=512)
test_loader = torch.utils.data.DataLoader(test_dataset, batch_size=512)

# Costruisci un modello 
class CNNModel(nn.Module):
    def __init__(self):
        super(CNNModel, self).__init__()
        self.conv1 = nn.Conv2d(1, 32, 3, 1)
        self.conv2 = nn.Conv2d(32, 64, 3, 1)
        self.fc = nn.Linear(1024, 10)
 
    def forward(self, x):
        x = F.relu(self.conv1(x))
        x = F.relu(self.conv2(x))
        x = F.max_pool2d(x, 1)
        x = torch.flatten(x, 1)
        x = self.fc(x)
        output = F.log_softmax(x, dim=1)
        return output
net = CNNModel()
 
# Compiliamo
optimizer = optim.SGD(net.parameters(), lr=0.01)
criterion = nn.CrossEntropyLoss()


Curva di Apprendimento di Pythorch
Curva di Apprendimento di Pythorch

Dopodiché, durante la fase di addestramento, dobbiamo creare un ciclo che ripercorre le nostre epoche e lotti. Elaboreremo le nostre immagini di conseguenza e utilizzeremo il passaggio in avanti per calcolare la nostra perdita.


Confrontiamo le prestazioni

Dai due grafici precedenti, la curva del modello TensorFlow sembra ripida e dopo la 3a epoca, la perdita sul set di convalida sembra aumentare. In breve, possiamo dire che la procedura di apprendimento nel modello TensorFlow è di natura ripida e possiamo aspettarci molti compromessi.

Mentre nel modello PyTorch, anche la procedura di costruzione del modello sembra complessa, l'addestramento e la perdita osservati sono stati fluidi durante la procedura e la perdita di convalida ha seguito correttamente la perdita del test.


Conclusioni

A questo punto, abbiamo discusso brevemente TensorFlow e PyTorch e visto la procedura di modellazione minima per la classificazione delle immagini. Nel contesto dell'allenamento e delle prestazioni dei test dai due rispettivi grafici, possiamo dire che il processo di addestramento e valutazione è più fluido nel modello PyTorch e, in termini di elementi costitutivi, direi che TensorFlow è più adatto ai principianti grazie alla sua API semplificata .

PCR (5).gif
PCR (4).gif
PCR.gif
PCR.gif
PCR.gif
PCR.gif
PCR (5).gif
3.gif
Vediamo se riesci a cliccarmi ! Nascondo una Sorpresa... (2).png

Ciao 

🤗 Articoli consigliati dalla nostra
Intelligenza Artificiale in base ai tuoi interessi

Correlazione Alta

Correlazione Media

Correlazione Bassa

Iscriviti

VUOI DIVENTARE UN MEMBRO DI INTELLIGENZA ARTIFICIALE ITALIA GRATUITAMENTE E TRARNE I SEGUENTI BENEFICI?

Corsi Gratis

più di 150 lezioni online

Dataset Gratis

più di 150o dataset

Ebook Gratis

più di 10 libri da leggere

Editor Gratis

un editor python online

Progetti Gratis

più di 25 progetti python

App Gratis

4 servizi web con I.A.

Unisciti Ora a oltre
1.000.000
di lettori e appassionanti d'I.A.

Tutto ciò che riguarda l'intelligenza Artificiale, in unico posto, in italiano e gratis.

MEGLIO DI COSI' NON SI PUO' FARE

Dopo l'iscrizione riceverai diversi Regali

VUOI SCRIVERE ARTICOLI INSIEME A NOI.

Grazie

bottom of page