Cos'è TensorFrames? TensorFlow + Apache Spark

Blog

Originariamente pubblicato da *** Adi Polak **** a* versodatascience.com



Per prima cosa, cos'è TensorFrames?

TensorFrames è un open source creato dai contributori di Apache Spark. Le sue funzioni e parametri hanno lo stesso nome del framework TensorFlow. Sotto il cofano, c'è un wrapper Apache Spark DSL (linguaggio specifico del dominio) per Apache Spark DataFrames. Ci consente di manipolare i DataFrame con la funzionalità TensorFlow. E no, lo è non panda DataFrame , si basa su Apache Spark DataFrame.



…ma aspetta, cos'è TensorFlow (TF)?

TensorFlow è una libreria software open source per il flusso di dati e la programmazione differenziabile in una vasta gamma di attività. È una libreria matematica simbolica ed è utilizzata anche per applicazioni di apprendimento automatico come le reti neurali.



…e Apache Spark?

Apache Spark è un framework di cluster computing distribuito open source per scopi generici.

Una parola sulla scala

Oggi, quando parliamo di scala, di solito parliamo di due opzioni; ridimensionare orizzontalmente e ridimensionare verticalmente.

· Scala orizzontale — aggiungere macchine aggiuntive con più o meno la stessa potenza di calcolo

· Scala verticale — aggiungendo più risorse alle macchine con cui stiamo attualmente lavorando. Può essere un processore aggiornato da una CPU a una GPU, più memoria (RAM) e così via.

Con TensorFrames, possiamo fare entrambe le cose, più potenza di calcolo del processore e più macchine. Laddove con il solo TensorFlow ci concentreremmo solitamente sull'aggiunta di più potenza attraverso il ridimensionamento verticale, ora con il supporto di Apache Spark, possiamo ridimensionare sia verticalmente che orizzontalmente. Ma come facciamo a sapere quanto di ciascuno abbiamo effettivamente bisogno? Per rispondere a questa domanda, dobbiamo comprendere l'utilizzo completo delle nostre applicazioni e pianificare di conseguenza.

Per ogni modifica, come l'aggiunta di una macchina o l'aggiornamento da CPU a GPU, abbiamo tempi di inattività. Nel cloud, il ridimensionamento di un cluster o l'aggiunta di più potenza di calcolo è una questione di minuti, mentre in locale, dove dobbiamo occuparci dell'aggiunta di nuove macchine e dell'aggiornamento dei processori delle macchine, ciò può richiedere giorni e talvolta mesi.

previsione del prezzo delle monete pla

Quindi, una soluzione più flessibile è il cloud pubblico.

Nell'immagine sottostante, la scala orizzontale è l'asse X, mentre la scala verticale è l'asse Y.

**Diapositiva dalla presentazione di Tim Hunter ad Apache Spark conf

Prima di passare alle funzioni, comprendiamo alcuni importanti vocaboli di TensorFlow:

tensore

Matrice multidimensionale tipizzata staticamente i cui elementi sono di tipo generico.

GraphDef

|_+_| oppure |_+_| è il concetto centrale di TensorFlow per presentare il calcolo. Quando usiamo TensorFlow, creiamo prima il nostro |_+_| e passare il |_+_| a TensorFlow. |_+_| è la versione serializzata di |_+_|.

operazione

Un nodo Graph che esegue calcoli sui tensori. Un'operazione è un nodo in un |_+_| che prende zero o più |_+_| (prodotto da altre operazioni nel grafico) come input e produce zero o più |_+_| s come output.

Identità

|_+_| viene utilizzato quando vogliamo trasportare esplicitamente il tensore tra dispositivi (come, dalla GPU a una CPU). L'operazione aggiunge nodi al grafico, che esegue una copia quando i dispositivi dell'input e dell'output sono diversi.

come acquistare gettone mondiale

Costante

Una costante ha i seguenti argomenti che possono essere modificati come richiesto per ottenere la funzione desiderata. È uguale a una variabile, ma il suo valore non può essere modificato. La costante può essere:

· |_+_|: Un valore costante (o elenco) di tipo di output |_+_|.

· |_+_|: Il tipo degli elementi del tensore risultante.

· |_+_|: Dimensioni opzionali del tensore risultante.

· |_+_|: nome opzionale per il tensore.

· |_+_|: Booleano che consente la verifica di una forma di valori.

segnaposto

Allocare spazio di archiviazione per i dati (ad esempio per i dati dei pixel dell'immagine durante un feed). I valori iniziali non sono obbligatori (ma possono essere impostati, vedi |_+_|). Versus variabili, dove è necessario dichiarare il valore iniziale.

Un po' di vocabolario di Apache Spark

Dataframe

Questo è un distribuito raccolta di dati organizzati in colonne denominate che forniscono operazioni per filtrare, raggruppare o calcolare aggregati. I dati dei frame di dati sono spesso distribuiti su più macchine. Può essere in memoria dati o su disco.

RelationalGroupedDataset

Un insieme di metodi per aggregazioni su un |_+_|, creato da raggruppare per , cubo o rollup .

Il metodo principale è |_+_| funzione, che ha più varianti. Questa classe contiene anche alcune statistiche di primo ordine come |_+_|, |_+_| per comodità.

Ora che comprendiamo meglio la terminologia, diamo un'occhiata alla funzionalità.

La funzionalità — TensorFlow versione 0.6.0

Apache Spark è noto per essere una piattaforma di analisi dei dati su larga scala, insieme a TensorFlow, otteniamo TensorFrames che hanno tre categorie di manipolazione dei dati:

Comprendiamo ogni funzionalità.

Graph

Le operazioni di mappatura trasformano e/o aggiungono colonne a un dato frame di dati.

Si accede a ciascuna funzionalità tramite due API, una che riceve Operation e l'altra che riceve DataFrame, GraphDef e ShapeDescription.

API esposta:

Righe mappa

Computional Graph

Per l'utente, questa è la funzione che verrà utilizzata più spesso, poiché non esiste una richiesta diretta per creare l'oggetto GraphDef e ShapeDescription. In questo modo è più leggibile per gli sviluppatori TensorFlow esperti:

mapRows riceve due parametri, operazione e operazione*, il che significa che la seconda operazione può essere una raccolta di operazioni. Successivamente le trasforma in una sequenza e la traduce in un grafico, crea la ShapeDiscription dal grafico e la invia con il DataFrame a una funzione interna. Dove trasforma riga per riga i dati distribuiti secondo le trasformazioni riportate nel grafico. Tutto l'input nel grafico dovrebbe essere riempito con alcuni dati dal DataFrame o dalle costanti fornite. Significato, non possiamo usare null. Alla fine la funzione restituisce un nuovo DataFrame con il nuovo schema, lo schema conterrà lo schema originale Di più nuove colonne che corrispondono all'output del grafico. ShapeDiscription fornisce la forma dell'output, viene utilizzato, dietro le quinte, per l'ottimizzazione e aggirare i limiti del kernel.

Blocco mappa

Esegue un compito simile a quello di |_+_|, tuttavia, poiché è ottimizzato per il compatto, applica i trasformatori grafici in blocchi di dati e non riga per riga.

Computation Graph

La funzione spesso più utilizzata è:

Esempio di codice: Creiamo val df , che è di tipo DataFrame, con due righe, una contiene il valore 1.0 e la seconda riga di dati contiene il valore 2.0. Il nome della colonna è x.

come cambiare la dimensione del carattere in chrome

valore x è una dichiarazione del segnaposto per l'output, e è l'identità per il trasporto dei tensori da CPU a GPU o da macchina a macchina, ha ricevuto valore x come è valore.

Insieme a è la funzione di calcolo stessa. Qui, |_+_| le funzioni ottengono due operazioni, e e Insieme a e risintonizza un nuovo DataFrame denominato df2 con colonna in più Insieme a . Colonna Insieme a è la somma di x+x. In uscita, colonna x è il valore originale, colonna e è il valore di identità e colonna z è l'output del grafico.

MappaBlocchiTagliati

Questo è lo stesso di |_+_| , MA, elimina le colonne DataFrame originali dal risultato DataFrame. Significa che l'output DataFrame conterrà solo le colonne calcolate.

Graph

Guardiamo:

Esempio di codice: creiamo un DataFrame denominato df con due righe con valori 3.0 e 4.0 . Avviso che creiamo una costante denominata fuori con valore 1.0 e 2.0, questa costante è la funzionalità TensorFrame dsl che imita la funzionalità TensorFlow. Allora chiamiamo |_+_|. Lo schema di output conterrà solo la colonna dei risultati, denominata out e nel nostro caso conterrà solo i valori costanti che sono 1.0 e 2.0 .

Nota importante nella prima riga di codice importiamo TesnorFrames dsl e lo chiamiamo tf, che sta per TensorFlow, lo facciamo poiché è così che gli utenti di TesnorFlow lavoravano con esso e aderiamo alle migliori pratiche di TensorFlow.

GraphDf

Le operazioni di riduzione uniscono una coppia o un insieme di righe e le trasformano in un'unica riga, ripete la stessa operazione finché non rimane una riga. Sotto il cofano, TensorFrames riduce al minimo il trasferimento di dati tra computer riducendo prima tutte le righe su ciascun computer e quindi inviando il resto sulla rete per eseguire le ultime riduzioni.

Graph

La funzione trasformata deve essere classificata come morfismo : l'ordine in cui vengono eseguiti non dovrebbe avere importanza. In termini matematici, data una funzione f e alcuni input di funzione a, b, c, deve valere quanto segue:

Mappa ridurre lo schema di Christopher Scherb

L'API della funzionalità di riduzione, come il resto, abbiamo 2 API per ogni funzionalità, quella che riceve Operation è più intuitiva, tuttavia, in TensorFlow non esiste un'operazione di riduzione diretta delle righe, invece, ci sono molte operazioni di riduzione come |_+ _| e |_+_| .

Riduci righe

Questa funzionalità usa le operazioni TensorFlow per unire due righe finché non rimane una riga. Riceve il datafram, il grafico e una ShapeDescription.

Graph

Interfaccia utente:

Nel prossimo esempio di codice. Creiamo un DataFrame con una colonna denominata in e due righe. x1 e x2 segnaposto per dtype e x- che è un'operazione di aggiunta di x1 e x2. reduceRows, restituisce una riga con valore 3 che è la somma di 1.0 e 2.0.

RiduciBlocchi

Funziona come |_+_| , MA, lo fa su un vettore di righe e non riga per riga.

Tensors

reagisci barra in alto nativa

Funzione più utilizzata:

Esempio di codice: qui creiamo un DataFrame con due colonne — tasto2 e X . Un nome segnaposto x1 , un'operazione reduce_sum TensorFlow denominata X . La funzionalità reduce restituisce la somma delle righe nel DataFrame secondo le colonne desiderate che il reduce_sum prende il nome da cui è X .

Tensor

tf.identity

L'aggregazione è un'operazione aggiuntiva per Apache Spark e TensorFlow. È diverso dalla funzionalità di aggregazione in TensorFlow e funziona con RelationalGroupedDataset. Funzionalità dell'API:

Aggregate riceve un RelationalGroupedDataset che è un oggetto Apache Spark, avvolge DataFrame e aggiunge funzionalità di aggregazione, una sequenza di espressioni e un tipo di gruppo.

La funzione aggregata riceve il grafico e ShareDescriptiom. Aggrega le righe insieme utilizzando la trasformazione di riduzione sui dati raggruppati. Ciò è utile quando i dati sono già raggruppati per chiave. Al momento sono supportati solo dati numerici.

Esempio di codice: nell'esempio abbiamo un DataFrame con due colonne, chiave , e X . x1 come segnaposto e X come la funzionalità reduce_sum denominata X .

Usando raggruppare per funzionalità raggruppiamo le righe per chiave e dopo di essa chiamiamo aggregato con le operazioni. Possiamo vedere nell'output che l'aggregato è stato calcolato secondo il chiave , per la chiave con valore 1- abbiamo ricevuto 2.1 come valore per colonna x e per la chiave con valore 2 abbiamo ricevuto 2.0 come valore per colonna x .

Processo di base TensorFrames

· DataFrames con scala is attualmente una versione sperimentale

· La Scala DSL dispone solo di un sottoinsieme di trasformate TensorFlow.

· TensorFrames è open source e può essere supportato qui .

· Python è stato il primo linguaggio client supportato da TensorFlow e attualmente supporta la maggior parte delle funzionalità. Sempre più funzionalità vengono spostate nel nucleo di TensorFlow (implementato in C++) ed esposte tramite un C API . Che in seguito è stato esposto tramite API di altri linguaggi, come Java e JavaScript.

· Interessato a lavorare con Keras? guardare Elephas: Deep Learning distribuito con Keras e Spark .

come comprare la moneta shiba inu

· interessato al progetto TensorFrames sul cloud pubblico? dai un'occhiata questo e questo .

Ora che sai di più su TensorFrames, come lo porterai avanti?

Originariamente pubblicato da *** Adi Polak *** a versodatascience.com


Grazie per aver letto :heart: Se ti è piaciuto questo post, condividilo con tutti i tuoi amici di programmazione! Seguimi su Facebook | Twitter

Per saperne di più

? Guida completa a TensorFlow per il deep learning con Python

? Data Science: Deep Learning in Python

? Python per il Bootcamp di Data Science e Machine Learning

? Apprendimento approfondito con TensorFlow 2.0 [2019]

? TensorFlow 2.0: una guida completa al nuovissimo TensorFlow

? Tensorflow e Keras per reti neurali e deep learning

? Tensorflow Bootcamp per la scienza dei dati in Python

? Completa il Bootcamp 2019 di Data Science e Machine Learning

#tensorflow #python #machine-learning

versodatascience.com

Cos'è TensorFrames? TensorFlow + Apache Spark

Cos'è TensorFrames? TensorFlow + Apache Spark