Le serie tempo sono successioni di uno (univariata) o piu' parametri (multivariata) acquisiti da strumenti a cadenza regolari di tempo (il tempo definisce l'indice della serie)
A differenza di una serie normale di dati qui l'ordine assume una importanza perche' ciascun dato e' collegato a quello immediatamente successivo e antecedente in una successione che i matematici direbbero continua
Un metodo per poter prevedere il prossimo dato nella successione usando le reti neurali e' quello di usare l'approccio LSTM (Long Short Term Memory) riconducibili alle reti RNN
Il fato che il titolo indichi Single Step vuol dire che l'algoritmo e' in grado di individuare solo il valore della variabile al tempo T+1 e non e' possibile avere piu' dati previsti
Un sistema comodo per esplorare l'algoritmo e' quello di usare il codice a questo GitHub
Nel file di configurazione training_config.json si possono impostare le caratteristiche della rete neurale come i dati di train e test, il dropout ma soprattutto si imposa la window_size ovvero la grandezza della finestra che viene usata dall'algoritmo per calcolare il valore al tempo T+1
Per effettuare ho preso i dati della stazione meteo di Antella (localita' vicino a Firenze) nel periodo dicembre 2002 aprile 2010 con misure giornaliere della temperatura massima
i dati sono stati processati mediante il codice linkato in precedenza
Il risultato della validazione dei dati risulta sostanzialemente corretta
Nel grafico sottostante (ripreso da qui) si osservano tutti i limiti del metodo nel caso di estrapolazione di piu' di un valore sul tren futuro. Usando una finestra mobile e' stato simulata la previsione di trend nel futuro su varie porzioni dei dati e si vede abbastanza chiaramente che la predizione, essendo legata alla finestra dei dati immediatamente precedenti, puo; indurre anche errori grossolani
asdasd
giovedì 16 gennaio 2020
mercoledì 15 gennaio 2020
Jupyter notebook inside docker
Per poter utilizzare un Notebook Jupyter contenuto all'interno di un container docker si avvia prima il container con una sintassi del tipo
docker run -it --rm -p8888:8888 -v /home/luca/Downloads/time-series-forecasting-rnn-tensorflow-master:/tmp2 -w /tmp2 intelaipg/intel-optimized-tensorflow:2.0.0-mkl-py3
montando la directory esterna al docker dove sono contenuti i notebook
a questo punto dall'interno del container si lancia
jupyter notebook --ip 0.0.0.0 --no-browser --allow-root
docker run -it --rm -p8888:8888 -v /home/luca/Downloads/time-series-forecasting-rnn-tensorflow-master:/tmp2 -w /tmp2 intelaipg/intel-optimized-tensorflow:2.0.0-mkl-py3
a questo punto dall'interno del container si lancia
jupyter notebook --ip 0.0.0.0 --no-browser --allow-root
Docker tensorflow ottimizzato per Intel
Usando la versione standard di Tensorflow distribuita da Google si nota il messaggio "Your CPU supports instructions that this Tensorflow binary was not compiled to use: AVX2 FMA"
Questo perche' la versione distribuita e' compilata per funzionare su un ampio spettro di calcolatori
La soluzione per avere una versione ottimizzata per tutte le istruzioni della CPU e' quella di compilare da sorgenti Tensorflow oppure di utilizzare dei container docker che gia' hanno il codice compilato ottimizzato. In questo senso vengono utili i container prodotti da Intel con il supporto MKL (Math Kernel for Deep Neural Network)
Vi sono versioni con Python 2.7
docker run -it -p 8888:8888 intelaipg/intel-optimized-tensorflow
e Python 3.6
Per modificare in modo permanente il container con le librerie di normale uso si lancia
docker run -it intelaipg/intel-optimized-tensorflow:2.0.0-mkl-py3 /bin/bash
docker commit Docker_ID intelaipg/intel-optimized-tensorflow:2.0.0-mkl-py3
Questo perche' la versione distribuita e' compilata per funzionare su un ampio spettro di calcolatori
La soluzione per avere una versione ottimizzata per tutte le istruzioni della CPU e' quella di compilare da sorgenti Tensorflow oppure di utilizzare dei container docker che gia' hanno il codice compilato ottimizzato. In questo senso vengono utili i container prodotti da Intel con il supporto MKL (Math Kernel for Deep Neural Network)
Vi sono versioni con Python 2.7
docker run -it -p 8888:8888 intelaipg/intel-optimized-tensorflow
e Python 3.6
docker run -it -p 8888:8888 intelaipg/intel-optimized-tensorflow:2.0.0-mkl-py3
Per modificare in modo permanente il container con le librerie di normale uso si lancia
e con pip si installano normalmente le librerie Python (per esempio Pandas, Matplotlib...)
al termine si fa exit e con
docker ps -a
si copia l'ID del container modificato. A questo punto con commit si modifica in modo definitivo il container
lunedì 13 gennaio 2020
Videoscrittura o computer
Frugando tra dei libri destinati al cestino ho trovato questo libro del 1984 "Scrivere con il computer" in cui l'autore ci guida alla domanda se sia meglio un sistema di video scrittura, come la serie Olivetti ETV, oppure un PC con Wordstar
Fa strano pensarlo ai giorni nostri ma ricordo che ai tempi del liceo (tipo 1987-1988) il professore di filosofia aveva acquistato un sistema di video scrittura mentre il professore di italiano usava un Olivetti M15
Fa strano pensarlo ai giorni nostri ma ricordo che ai tempi del liceo (tipo 1987-1988) il professore di filosofia aveva acquistato un sistema di video scrittura mentre il professore di italiano usava un Olivetti M15
giovedì 9 gennaio 2020
Foraminiferi Tensorflow : train vs retrain model con Tensorflow
Continua la mia battaglia personale con le reti neurali per il riconoscimento di foraminiferi.
Attualmente le strade percorse sono state due: la prima prevede di scrivere ed addestrare da zero una rete neurale CNN mentre la seconda prevede il retraining di reti gia' addestrate (nello specifico mobilenet v2 ed inception v3)
Quali sono i risultati migliori??
In entrambi i casi le corrette previsioni del modello si e' aggirato intorno al 60 % (quindi poco performante ma l'oggetto di studio e' di per se difficile anche per un umano)
La reale differenze e' che il modello con retrain ha la tendenza di indovinare o sbagliare completamente le previsioni mentre con la rete addestrata da zero la distribuzione di successi /insuccessi e' molto piu' distribuita
Attualmente le strade percorse sono state due: la prima prevede di scrivere ed addestrare da zero una rete neurale CNN mentre la seconda prevede il retraining di reti gia' addestrate (nello specifico mobilenet v2 ed inception v3)
Quali sono i risultati migliori??
In entrambi i casi le corrette previsioni del modello si e' aggirato intorno al 60 % (quindi poco performante ma l'oggetto di studio e' di per se difficile anche per un umano)
Retrain Inception v3 |
CNN Trained |
Predizione classificazione immagini con Tensorflow da modelli .h5
In un esempio precedente avevo usato il modello .tflite per fare predizione di classificazione immagine.
Il modello e' stato creato da un train di Inception
============================================================
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'
import sys
import tensorflow as tf
import tensorflow_hub as hub
from keras.models import load_model
model = tf.keras.models.load_model('incept.h5', custom_objects={'KerasLayer':hub.KerasLayer})
#print(model.get_config())
from keras.preprocessing import image
img = image.load_img(sys.argv[1])# , target_size=(299,299,3))
img = image.img_to_array(img)
img = img.reshape((1,) + img.shape)
img = img/255
build_input_shape = img.reshape(-1,299,299,3)
#print (build_input_shape)
img_class=model.predict_classes(img)
print (sys.argv[1])
print(img_class)
Il modello e' stato creato da un train di Inception
============================================================
import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'
import sys
import tensorflow as tf
import tensorflow_hub as hub
from keras.models import load_model
model = tf.keras.models.load_model('incept.h5', custom_objects={'KerasLayer':hub.KerasLayer})
#print(model.get_config())
from keras.preprocessing import image
img = image.load_img(sys.argv[1])# , target_size=(299,299,3))
img = image.img_to_array(img)
img = img.reshape((1,) + img.shape)
img = img/255
build_input_shape = img.reshape(-1,299,299,3)
#print (build_input_shape)
img_class=model.predict_classes(img)
print (sys.argv[1])
print(img_class)
mercoledì 8 gennaio 2020
Conversione da formato .pd (saved_model) a tflite
Un file in formato .pb racchiude al suo interno un modello completo di grafo con calcoli e pesi e puo' essere utilizzato direttamente per il serving
Tflite e' invece il formato di TensorFlow Lite ed e' caratterizzato da ridotte dimesioni mediante model quantization e model pruning
Per passare da .pb a .tflite (il contrario non si puo' fare) si possono usare i programmi toco e tflite_converter (il file risultante e' equivalente)
toco --saved_model_dir ./fora --output_file test.tflite
Nella conversione, a seconda del livello di ottimizzazione, il modello tflite puo' performare in modo uguale od inferiore al modello completo
Tflite e' invece il formato di TensorFlow Lite ed e' caratterizzato da ridotte dimesioni mediante model quantization e model pruning
Per passare da .pb a .tflite (il contrario non si puo' fare) si possono usare i programmi toco e tflite_converter (il file risultante e' equivalente)
toco --saved_model_dir ./fora --output_file test.tflite
tflite_convert -output_file = model.tflite --saved_model_dir = my_dir
Nella conversione, a seconda del livello di ottimizzazione, il modello tflite puo' performare in modo uguale od inferiore al modello completo
Iscriviti a:
Post (Atom)
Debugger integrato ESP32S3
Aggiornamento In realta' il Jtag USB funziona anche sui moduli cinesi Il problema risiede nell'ID USB della porta Jtag. Nel modulo...
-
In questo post viene indicato come creare uno scatterplot dinamico basato da dati ripresi da un file csv (nel dettaglio il file csv e' c...
-
Questo post e' a seguito di quanto gia' visto nella precedente prova Lo scopo e' sempre il solito: creare un sistema che permet...
-
La scheda ESP32-2432S028R monta un Esp Dev Module con uno schermo TFT a driver ILI9341 di 320x240 pixels 16 bit colore.Il sito di riferiment...