Classificazione delle immagini CNN in TensorFlow con passaggi ed esempi
Che cos'รจ la rete neurale convoluzionale?
Rete neurale convoluzionale, noto anche come convnets o CNN, รจ un metodo ben noto nelle applicazioni di computer vision. ร una classe di reti neurali profonde che vengono utilizzate per analizzare le immagini visive. Questo tipo di architettura รจ dominante per riconoscere oggetti da un'immagine o un video. Viene utilizzato in applicazioni come il riconoscimento di immagini o video, l'elaborazione del linguaggio neurale, ecc.
Archistruttura di una rete neurale convoluzionale
Pensa a Facebook qualche anno fa, dopo aver caricato un'immagine sul tuo profilo, ti veniva chiesto di aggiungere manualmente un nome al volto sull'immagine. Al giorno d'oggi, Facebook utilizza convnet per taggare automaticamente il tuo amico nella foto.
Una rete neurale convoluzionale per la classificazione delle immagini non รจ molto difficile da comprendere. Un'immagine di input viene elaborata durante la fase di convoluzione e in seguito le viene attribuita un'etichetta.
Una tipica architettura convnet puรฒ essere riassunta nell'immagine sottostante. Innanzitutto, un'immagine viene spinta sulla rete; questa รจ chiamata immagine di input. Quindi, l'immagine di input passa attraverso un numero infinito di passaggi; questa รจ la parte convoluzionale della rete. Infine, la rete neurale puรฒ predire la cifra sull'immagine.

Un'immagine รจ composta da una serie di pixel con altezza e larghezza. Un'immagine in scala di grigi ha un solo canale mentre l'immagine a colori ha tre canali (ciascuno per Rosso, Verde e Blu). Un canale รจ sovrapposto l'uno all'altro. In questo tutorial utilizzerai un'immagine in scala di grigi con un solo canale. Ogni pixel ha un valore da 0 a 255 per riflettere l'intensitร del colore. Ad esempio, un pixel uguale a 0 mostrerร un colore bianco mentre un pixel con un valore vicino a 255 sarร piรน scuro.
Diamo un'occhiata a un'immagine memorizzata nel file set di dati MNIST. L'immagine seguente mostra come rappresentare l'immagine di sinistra in un formato matriciale. Si noti che la matrice originale รจ stata standardizzata per essere compresa tra 0 e 1. Per i colori piรน scuri, il valore nella matrice รจ circa 0.9 mentre i pixel bianchi hanno un valore pari a 0.
Operazione convoluzionale
Il componente piรน critico nel modello รจ lo strato convoluzionale. Questa parte mira a ridurre le dimensioni dell'immagine per calcoli piรน rapidi dei pesi e migliorarne la generalizzazione.
Durante la parte convoluzionale la rete mantiene le caratteristiche essenziali dell'immagine ed esclude il rumore irrilevante. La modella, ad esempio, impara a riconoscere un elefante da un'immagine con una montagna sullo sfondo. Se si utilizza una rete neurale tradizionale, il modello assegnerร a tutti i pixel, compresi quelli della montagna, un peso che non รจ essenziale e puรฒ trarre in inganno la rete.
Invece, a Keras la rete neurale convoluzionale utilizzerร una tecnica matematica per spiegaretracseleziona solo i pixel piรน rilevanti. Questa operazione matematica si chiama convoluzione. Questa tecnica permette alla rete di apprendere caratteristiche sempre piรน complesse a ogni livello. La convoluzione divide la matrice in piccole parti per apprendere gli elementi piรน essenziali all'interno di ciascuna parte.
Componenti della rete neurale convoluzionale (ConvNet o CNN)
Ci sono quattro componenti di un Convnets
- Circonvoluzione
- Non linearitร (ReLU)
- Pooling o sottocampionamento
- Classificazione (livello completamente connesso)
Circonvoluzione
Lo scopo della convoluzione รจ di esprimeretracLa rete neurale apprenderร le caratteristiche dell'oggetto nell'immagine a livello locale. Ciรฒ significa che la rete apprenderร schemi specifici all'interno dell'immagine e sarร in grado di riconoscerli ovunque nell'immagine.
La convoluzione รจ una moltiplicazione elemento per elemento. Il concetto รจ facile da capire. Il computer analizzerร una parte dell'immagine, solitamente con una dimensione di 3ร3 e la moltiplicherร per un filtro. L'output della moltiplicazione elemento per elemento รจ chiamato feature map. Questo passaggio viene ripetuto finchรฉ non รจ stata scansionata tutta l'immagine. Nota che, dopo la convoluzione, la dimensione dell'immagine viene ridotta.
Di seguito, c'รจ un URL per vedere in azione come funziona la convoluzione.
Sono disponibili numerosi canali. Di seguito elenchiamo alcuni canali. Puoi vedere che ogni filtro ha uno scopo specifico. Nota, nella foto qui sotto; il Kernel รจ sinonimo di filtro.
Aritmetica dietro la convoluzione
La fase convoluzionale applicherร il filtro su una piccola matrice di pixel all'interno dell'immagine. Il filtro si sposterร lungo l'immagine di input con una forma generale di 3ร3 o 5ร5. Ciรฒ significa che la rete farร scorrere queste finestre su tutta l'immagine di input e calcolerร la convoluzione. L'immagine sottostante mostra come funziona la convoluzione. La dimensione della patch รจ 3ร3 e la matrice di output รจ il risultato dell'operazione elemento per elemento tra la matrice dell'immagine e il filtro.
Noti che la larghezza e l'altezza dell'output possono essere diverse dalla larghezza e dall'altezza dell'input. Succede a causa dell'effetto confine.
Effetto confine
L'immagine ha una mappa delle caratteristiche 5ร5 e un filtro 3ร3. C'รจ solo una finestra al centro dove il filtro puรฒ schermare una griglia 3ร3. La mappa delle caratteristiche di output si ridurrร di due tessere insieme a una dimensione 3ร3.
Per ottenere la stessa dimensione di output della dimensione di input, รจ necessario aggiungere il riempimento. Il riempimento consiste nell'aggiungere il giusto numero di righe e colonne su ciascun lato della matrice. Ciรฒ consentirร alla convoluzione di centrarsi su ogni riquadro di input. Nell'immagine sotto, la matrice input/output ha la stessa dimensione 5ร5
Quando si definisce la rete, le caratteristiche convolute sono controllate da tre parametri:
- Profonditร : Definisce il numero di filtri da applicare durante la convoluzione. Nell'esempio precedente hai visto una profonditร pari a 1, il che significa che viene utilizzato solo un filtro. Nella maggior parte dei casi, esiste piรน di un filtro. L'immagine seguente mostra le operazioni eseguite in una situazione con tre filtri
- Passo: Definisce il numero di "salto di pixel" tra due slice. Se il passo รจ uguale a 1, le finestre si muoveranno con una diffusione di pixel di uno. Se il passo รจ uguale a due, le finestre salteranno di 2 pixel. Se si aumenta il passo, si avranno feature map piรน piccole.
Esempio di passo 1
passo 2
- Imbottitura zero: Un riempimento รจ un'operazione di aggiunta di un numero corrispondente di righe e colonne su ciascun lato delle mappe delle caratteristiche di input. In questo caso l'output ha la stessa dimensione dell'input.
Non linearitร (ReLU)
Al termine dell'operazione di convoluzione, l'uscita รจ soggetta ad una funzione di attivazione per consentire la non linearitร . La solita funzione di attivazione per convnet รจ Relu. Tutti i pixel con un valore negativo verranno sostituiti da zero.
Pooling Operaproduzione
Questo passaggio รจ facile da comprendere. Lo scopo del pooling รจ ridurre la dimensionalitร dell'immagine di input. I passaggi sono eseguiti per ridurre la complessitร computazionale dell'operazione. Diminuendo la dimensionalitร , la rete ha pesi inferiori da calcolare, quindi impedisce l'overfitting.
In questa fase, devi definire la dimensione e la falcata. Un modo standard per raggruppare l'immagine di input รจ usare il valore massimo della feature map. Guarda l'immagine qui sotto. Il "pooling" selezionerร una sottomatrice a quattro della feature map 4ร4 e restituirร il valore massimo. Il pooling prende il valore massimo di un array 2ร2 e poi sposta questa finestra di due pixel. Ad esempio, la prima sottomatrice รจ [3,1,3,2], il pooling restituirร il massimo, che รจ 3.
Esiste un'altra operazione di raggruppamento, come la media.
Questa operazione riduce in modo aggressivo la dimensione della mappa delle caratteristiche
Livelli completamente connessi
L'ultimo passo consiste nel costruire un tradizionale rete neurale artificiale come hai fatto nel tutorial precedente. Connetti tutti i neuroni dallo strato precedente allo strato successivo. Si utilizza una funzione di attivazione softmax per classificare il numero sull'immagine di input.
Recap:
La rete neurale convoluzionale TensorFlow compila diversi livelli prima di fare una previsione. Una rete neurale ha:
- Uno strato convoluzionale
- Funzione di attivazione Relu
- Poolinstrato g
- Strato densamente connesso
Gli strati convoluzionali applicano filtri diversi su una sottoregione dell'immagine. La funzione di attivazione Relu aggiunge non linearitร e gli strati di pooling riducono la dimensionalitร delle mappe delle feature.
Tutti questi strati estracLe informazioni essenziali vengono ricavate dalle immagini. Infine, la mappa delle caratteristiche viene fornita a un livello primario completamente connesso con una funzione softmax per effettuare una previsione.
Addestra la CNN con TensorFlow
Ora che hai familiaritร con gli elementi costitutivi di un convnets, sei pronto per crearne uno TensorFlow. Utilizzeremo il set di dati MNIST per la classificazione delle immagini CNN.
La preparazione dei dati รจ la stessa del tutorial precedente. Puoi eseguire i codici e passare direttamente all'architettura della CNN.
Seguirai i passaggi seguenti per la classificazione delle immagini utilizzando la CNN:
Passaggio 1: carica il set di dati
Passaggio 2: livello di input
Passaggio 3: livello convoluzionale
Passo 4: Poolinstrato g
Passaggio 5: secondo livello convoluzionale e Pooling Strato
Passaggio 6: strato denso
Passaggio 7: livello Logit
Passaggio 1: carica il set di dati
Il set di dati MNIST รจ disponibile con scikit per imparare a farlo URL. Scaricalo e memorizzalo in Download. Puoi caricarlo con fetch_mldata('MNIST originale').
Creare un set di treni/test
ร necessario dividere il set di dati con train_test_split
Ridimensiona le caratteristiche
Infine, puoi ridimensionare la funzionalitร con MinMaxScaler come mostrato nella classificazione delle immagini di seguito utilizzando l'esempio TensorFlow CNN.
import numpy as np
import tensorflow as tf
from sklearn.datasets import fetch_mldata
#Change USERNAME by the username of your machine
## Windows USER
mnist = fetch_mldata('C:\\Users\\USERNAME\\Downloads\\MNIST original')
## Mac User
mnist = fetch_mldata('/Users/USERNAME/Downloads/MNIST original')
print(mnist.data.shape)
print(mnist.target.shape)
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(mnist.data, mnist.target, test_size=0.2, random_state=42)
y_train = y_train.astype(int)
y_test = y_test.astype(int)
batch_size =len(X_train)
print(X_train.shape, y_train.shape,y_test.shape )
## resclae
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
# Train
X_train_scaled = scaler.fit_transform(X_train.astype(np.float64))
# test
X_test_scaled = scaler.fit_transform(X_test.astype(np.float64))
feature_columns = [tf.feature_column.numeric_column('x', shape=X_train_scaled.shape[1:])]
X_train_scaled.shape[1:]
Definire la CNN
Una CNN utilizza filtri sul pixel grezzo di un'immagine per apprendere i dettagli del pattern da confrontare con il pattern globale con una rete neurale tradizionale. Per costruire una CNN, รจ necessario definire:
- Un livello convoluzionale: applica n numero di filtri alla mappa delle caratteristiche. Dopo la convoluzione, รจ necessario utilizzare una funzione di attivazione Relu per aggiungere non linearitร alla rete.
- Pooling layer: il passo successivo dopo la convoluzione รจ il downsampling della feature max. Lo scopo รจ ridurre la dimensionalitร della feature map per evitare l'overfitting e migliorare la velocitร di calcolo. Il max pooling รจ la tecnica convenzionale, che divide le feature map in sottoregioni (solitamente con una dimensione 2ร2) e mantiene solo i valori massimi.
- Livelli completamente connessi: tutti i neuroni dei livelli precedenti sono connessi ai livelli successivi. La CNN classificherร l'etichetta in base alle caratteristiche dei livelli convoluzionali e ridotta con il livello di pooling.
Architettura CNN
- Strato convoluzionale: applica 14 filtri 5ร5 (es.trac(sottoregioni di 5ร5 pixel), con funzione di attivazione ReLU
- Pooling Layer: esegue il pooling massimo con un filtro 2ร2 e uno stride di 2 (che specifica che le regioni raggruppate non si sovrappongono)
- Livello convoluzionale: applica 36 filtri 5ร5, con funzione di attivazione ReLU
- Pooling Livello n. 2: Ancora una volta, esegue il pooling massimo con un filtro 2ร2 e un passo di 2
- 1,764 neuroni, con un tasso di regolarizzazione dell'abbandono pari a 0.4 (probabilitร di 0.4 che un dato elemento venga eliminato durante l'allenamento)
- Strato denso (strato Logits): 10 neuroni, uno per ogni classe target di cifre (0โ9).
Ci sono tre moduli importanti da utilizzare per creare una CNN:
- conv2d(). Costruisce un livello convoluzionale bidimensionale con il numero di filtri, la dimensione del kernel del filtro, il riempimento e la funzione di attivazione come argomenti.
- max_pooling2d(). Costruisce un livello di pooling bidimensionale utilizzando l'algoritmo max-pooling.
- denso(). Costruisce uno strato denso con gli strati e le unitร nascosti
Definirai una funzione per costruire la CNN. Vediamo in dettaglio come costruire ogni elemento costitutivo prima di racchiudere il tutto nella funzione.
Passaggio 2: livello di input
def cnn_model_fn(features, labels, mode):
input_layer = tf.reshape(tensor = features["x"],shape =[-1, 28, 28, 1])
ร necessario definire un tensore con la forma dei dati. Per questo puoi usare il modulo tf.reshape. In questo modulo รจ necessario dichiarare il tensore da rimodellare e la forma del tensore. Il primo argomento riguarda le caratteristiche dei dati, definite nell'argomento della funzione.
Un'immagine ha un'altezza, una larghezza e un canale. Il set di dati MNIST รจ un'immagine monocronica di dimensione 28ร28. Impostiamo la dimensione del batch su -1 nell'argomento forma in modo che assuma la forma delle caratteristiche[โxโ]. Il vantaggio รจ ottimizzare gli iperparametri delle dimensioni del batch. Se la dimensione batch รจ impostata su 7, il tensore alimenterร 5,488 valori (28*28*7).
Passaggio 3: livello convoluzionale
# first Convolutional Layer
conv1 = tf.layers.conv2d(
inputs=input_layer,
filters=14,
kernel_size=[5, 5],
padding="same",
activation=tf.nn.relu)
Il primo strato convoluzionale ha 14 filtri con una dimensione del kernel di 5ร5 con lo stesso riempimento. Lo stesso riempimento significa che sia il tensore di output che quello di input dovrebbero avere la stessa altezza e larghezza. Tensorflow aggiungerร zeri alle righe e alle colonne per garantire la stessa dimensione.
Utilizzi la funzione di attivazione Relu. La dimensione di output sarร [28, 28, 14].
Passo 4: Poolinstrato g
Il passo successivo dopo la convoluzione รจ il calcolo del pooling. Il calcolo del pooling ridurrร la dimensionalitร dei dati. Puoi usare il modulo max_pooling2d con una dimensione di 2ร2 e uno stride di 2. Utilizzi il layer precedente come input. La dimensione dell'output sarร [batch_size, 14, 14, 14]
# first Pooling Layer pool1 = tf.layers.max_pooling2d(inputs=conv1, pool_size=[2, 2], strides=2)
Passaggio 5: secondo livello convoluzionale e Pooling Strato
Il secondo livello convoluzionale ha 32 filtri, con una dimensione di output di [batch_size, 14, 14, 32]. Il livello di pooling ha la stessa dimensione di prima e la forma di output รจ [batch_size, 14, 14, 18].
conv2 = tf.layers.conv2d(
inputs=pool1,
filters=36,
kernel_size=[5, 5],
padding="same",
activation=tf.nn.relu)
pool2 = tf.layers.max_pooling2d(inputs=conv2, pool_size=[2, 2], strides=2)
Passaggio 6: strato denso
Quindi, รจ necessario definire il livello completamente connesso. La mappa delle caratteristiche deve essere appiattita prima di essere collegata allo strato denso. ร possibile utilizzare la rimodellazione del modulo con una dimensione di 7*7*36.
Lo strato denso collegherร 1764 neuroni. Aggiungi una funzione di attivazione Relu. Inoltre, aggiungi un termine di regolarizzazione dell'abbandono con un tasso di 0.3, il che significa che il 30% dei pesi sarร impostato su 0. Tieni presente che l'abbandono avviene solo durante la fase di formazione. La funzione cnn_model_fn ha una modalitร argomento per dichiarare se il modello deve essere addestrato o da valutare come mostrato nell'esempio TensorFlow di classificazione delle immagini CNN di seguito.
pool2_flat = tf.reshape(pool2, [-1, 7 * 7 * 36])
dense = tf.layers.dense(inputs=pool2_flat, units=7 * 7 * 36, activation=tf.nn.relu)
dropout = tf.layers.dropout(
inputs=dense, rate=0.3, training=mode == tf.estimator.ModeKeys.TRAIN)
Passaggio 7: livello Logit
Infine nell'esempio di classificazione delle immagini TensorFlow, puoi definire l'ultimo livello con la previsione del modello. La forma di output รจ uguale alla dimensione del batch e 10, il numero totale di immagini.
# Logits Layer logits = tf.layers.dense(inputs=dropout, units=10)
Puoi creare un dizionario contenente le classi e la probabilitร di ciascuna classe. Il modulo tf.argmax() con restituisce il valore piรน alto se i livelli logit. La funzione softmax restituisce la probabilitร di ciascuna classe.
predictions = {
# Generate predictions
"classes": tf.argmax(input=logits, axis=1),
"probabilities": tf.nn.softmax(logits, name="softmax_tensor") }
Vuoi restituire la previsione del dizionario solo quando la modalitร รจ impostata su previsione. Aggiungi questi codici per visualizzare le previsioni
if mode == tf.estimator.ModeKeys.PREDICT:
return tf.estimator.EstimatorSpec(mode=mode, predictions=predictions)
Il passo successivo consiste nel calcolare la perdita del modello. Nell'ultimo tutorial, hai imparato che la funzione di perdita per un modello multiclasse รจ l'entropia incrociata. La perdita รจ facilmente calcolata con il seguente codice:
# Calculate Loss (for both TRAIN and EVAL modes) loss = tf.losses.sparse_softmax_cross_entropy(labels=labels, logits=logits)
Il passaggio finale dell'esempio TensorFlow CNN รจ ottimizzare il modello, ovvero trovare i migliori valori dei pesi. Per questo, utilizzi un ottimizzatore di discesa del gradiente con un tasso di apprendimento di 0.001. Lโobiettivo รจ ridurre al minimo la perdita
optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.001)
train_op = optimizer.minimize(
loss=loss,
global_step=tf.train.get_global_step())
Hai finito con la CNN. Tuttavia, desideri visualizzare le metriche delle prestazioni durante la modalitร di valutazione. Le metriche delle prestazioni per un modello multiclasse sono le metriche di precisione. Tensorflow รจ dotato di un modulo di precisione con due argomenti, le etichette e i valori previsti.
eval_metric_ops = {
"accuracy": tf.metrics.accuracy(labels=labels, predictions=predictions["classes"])}
return tf.estimator.EstimatorSpec(mode=mode, loss=loss, eval_metric_ops=eval_metric_ops)
Questo รจ tutto. Hai creato la tua prima CNN e sei pronto per racchiudere tutto in una funzione per utilizzarla per addestrare e valutare il modello.
def cnn_model_fn(features, labels, mode):
"""Model function for CNN."""
# Input Layer
input_layer = tf.reshape(features["x"], [-1, 28, 28, 1])
# Convolutional Layer
conv1 = tf.layers.conv2d(
inputs=input_layer,
filters=32,
kernel_size=[5, 5],
padding="same",
activation=tf.nn.relu)
# Pooling Layer
pool1 = tf.layers.max_pooling2d(inputs=conv1, pool_size=[2, 2], strides=2)
# Convolutional Layer #2 and Pooling Layer
conv2 = tf.layers.conv2d(
inputs=pool1,
filters=36,
kernel_size=[5, 5],
padding="same",
activation=tf.nn.relu)
pool2 = tf.layers.max_pooling2d(inputs=conv2, pool_size=[2, 2], strides=2)
# Dense Layer
pool2_flat = tf.reshape(pool2, [-1, 7 * 7 * 36])
dense = tf.layers.dense(inputs=pool2_flat, units=7 * 7 * 36, activation=tf.nn.relu)
dropout = tf.layers.dropout(
inputs=dense, rate=0.4, training=mode == tf.estimator.ModeKeys.TRAIN)
# Logits Layer
logits = tf.layers.dense(inputs=dropout, units=10)
predictions = {
# Generate predictions (for PREDICT and EVAL mode)
"classes": tf.argmax(input=logits, axis=1),
"probabilities": tf.nn.softmax(logits, name="softmax_tensor")
}
if mode == tf.estimator.ModeKeys.PREDICT:
return tf.estimator.EstimatorSpec(mode=mode, predictions=predictions)
# Calculate Loss
loss = tf.losses.sparse_softmax_cross_entropy(labels=labels, logits=logits)
# Configure the Training Op (for TRAIN mode)
if mode == tf.estimator.ModeKeys.TRAIN:
optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.001)
train_op = optimizer.minimize(
loss=loss,
global_step=tf.train.get_global_step())
return tf.estimator.EstimatorSpec(mode=mode, loss=loss, train_op=train_op)
# Add evaluation metrics Evaluation mode
eval_metric_ops = {
"accuracy": tf.metrics.accuracy(
labels=labels, predictions=predictions["classes"])}
return tf.estimator.EstimatorSpec(
mode=mode, loss=loss, eval_metric_ops=eval_metric_ops)
I passaggi seguenti sono gli stessi dei tutorial precedenti.
Innanzitutto si definisce uno stimatore con il modello CNN per la classificazione delle immagini.
# Create the Estimator
mnist_classifier = tf.estimator.Estimator(
model_fn=cnn_model_fn, model_dir="train/mnist_convnet_model")
Una CNN richiede molte volte l'addestramento, pertanto crei un hook di registrazione per memorizzare i valori dei livelli softmax ogni 50 iterazioni.
# Set up logging for predictions
tensors_to_log = {"probabilities": "softmax_tensor"}
logging_hook = tf.train.LoggingTensorHook(tensors=tensors_to_log, every_n_iter=50)
Sei pronto per stimare il modello. Imposti una dimensione batch pari a 100 e mescoli i dati. Tieni presente che impostiamo passaggi di allenamento di 16.000, l'addestramento puรฒ richiedere molto tempo. Essere pazientare.
# Train the model
train_input_fn = tf.estimator.inputs.numpy_input_fn(
x={"x": X_train_scaled},
y=y_train,
batch_size=100,
num_epochs=None,
shuffle=True)
mnist_classifier.train(
input_fn=train_input_fn,
steps=16000,
hooks=[logging_hook])
Ora che il modello รจ addestrato, puoi valutarlo e stampare i risultati
# Evaluate the model and print results
eval_input_fn = tf.estimator.inputs.numpy_input_fn(
x={"x": X_test_scaled},
y=y_test,
num_epochs=1,
shuffle=False)
eval_results = mnist_classifier.evaluate(input_fn=eval_input_fn)
print(eval_results)
INFO:tensorflow:Calling model_fn.
INFO:tensorflow:Done calling model_fn.
INFO:tensorflow:Starting evaluation at 2018-08-05-12:52:41
INFO:tensorflow:Graph was finalized.
INFO:tensorflow:Restoring parameters from train/mnist_convnet_model/model.ckpt-15652
INFO:tensorflow:Running local_init_op.
INFO:tensorflow:Done running local_init_op.
INFO:tensorflow:Finished evaluation at 2018-08-05-12:52:56
INFO:tensorflow:Saving dict for global step 15652: accuracy = 0.9589286, global_step = 15652, loss = 0.13894269
{'accuracy': 0.9689286, 'loss': 0.13894269, 'global_step': 15652}
Con l'architettura attuale, si ottiene una precisione del 97%. ร possibile modificare l'architettura, la dimensione del batch e il numero di iterazioni per migliorare la precisione. La rete neurale CNN ha funzionato molto meglio di ANN o regressione logistica. Nel tutorial sulla rete neurale artificiale, si รจ ottenuta una precisione del 96%, che รจ inferiore alla CNN. Le prestazioni della CNN sono impressionanti con un'immagine piรน grande set, sia in termini di calcolo della velocitร che di precisione.
Sintesi
Una rete neurale convoluzionale funziona molto bene per valutare le immagini. Questo tipo di architettura รจ dominante per riconoscere oggetti da un'immagine o un video.
Per costruire una CNN TensorFlow, devi seguire sette passaggi:
Fase 1: Carica set di dati:
Il set di dati MNIST รจ disponibile con scikit per imparare. Scaricalo e memorizzalo in Download. Puoi caricarlo con fetch_mldata('MNIST originale').
Fase 2: Livello di input:
Questo passaggio rimodella i dati. La forma รจ uguale alla radice quadrata del numero di pixel. Ad esempio, se un'immagine ha 156 pixel, allora la forma รจ 26ร26. Devi specificare se l'immagine ha un colore o meno. Se sรฌ, allora hai 3 alla forma, 3 per RGB, altrimenti 1.
input_layer = tf.reshape(tensor = features["x"],shape =[-1, 28, 28, 1])
Fase 3: Strato convoluzionale
Successivamente, รจ necessario creare i livelli convoluzionali. Applichi diversi filtri per consentire alla rete di apprendere funzionalitร importanti. Specifica la dimensione del kernel e la quantitร di filtri.
conv1 = tf.layers.conv2d(
inputs=input_layer,
filters=14,
kernel_size=[5, 5],
padding="same",
activation=tf.nn.relu)
Fase 4: Poolinstrato g
Nel terzo passaggio, aggiungi un livello di pooling. Questo livello riduce la dimensione dell'input. Lo fa prendendo il valore massimo di una sottomatrice. Ad esempio, se la sottomatrice รจ [3,1,3,2], il pooling restituirร il massimo, che รจ 3.
pool1 = tf.layers.max_pooling2d(inputs=conv1, pool_size=[2, 2], strides=2)
Fase 5: Aggiungi livello convoluzionale e Pooling Strato
In questa fase, puoi aggiungere tutti i layer convoluzionali e di pooling che desideri. Google Utilizza un'architettura con piรน di 20 strati convoluzionali.
Fase 6: Strato denso
Il passaggio 6 appiattisce il precedente per creare livelli completamente connessi. In questo passaggio, puoi utilizzare diverse funzioni di attivazione e aggiungere un effetto di esclusione.
pool2_flat = tf.reshape(pool2, [-1, 7 * 7 * 36])
dense = tf.layers.dense(inputs=pool2_flat, units=7 * 7 * 36, activation=tf.nn.relu)
dropout = tf.layers.dropout(
inputs=dense, rate=0.3, training=mode == tf.estimator.ModeKeys.TRAIN)
Fase 7: Livello logit
Il passo finale รจ la previsione.
logits = tf.layers.dense(inputs=dropout, units=10)











