Crea un framework di deep learning da zero
introduzione
Tensor è dai termini che vengono usati in modo diverso a seconda del tuo campo. fisici e matematici lo definiscono in un certo modo mentre i data scientist usano altre definizioni, quindi potrebbe causare un po 'di confusione in questo articolo discuteremo questa parola e conosceremo le sue proprietà e le operazioni eseguite su di essa. abbiamo bisogno di comprendere a fondo i tensori per costruirlo da zero. ora iniziamo definendolo.
Cosa sono i tensori
Il matematico definisce i tensori come un oggetto matematico che ha n indici e m^n componenti e obbedisce a determinate regole di trasformazione. Suona un po' interessante, chiariamolo un po' con alcuni esempi di programmazione.
A = [1,2,3,4] # 1D array
B = [[5,6,7],
[8,9,10]] # 2D array
C = [[[1,2],[3,4]],
[[5,6],[7,8]]] # 3D array
La dimensione è un termine usato per indicare quanti assi in un oggetto, per la linea ha una lunghezza quindi è 1 asse ma per il cubo è 3 assi lunghezza larghezza e altezza.
Le funzioni sono gli elementi con lo stesso tipo di dati in una dimensione specifica.
ma una cosa importante per chiamarlo tensore è che dovrebbe essere omogeneo, tutte le dimensioni hanno lo stesso numero di dimensioni con lo stesso tipo di dati. quindi cos'è un tensore?
Il tensore è un array nD omogeneo
Attributi tensoriali
I tensori hanno alcuni attributi fondamentali (proprietà) che iniziano con rango, asse e forma.
Il rango è la quantità di informazioni per trovare un componente specifico. qual è la sua importanza? Ci dice quanti passaggi (indici) sono necessari per accedere a un dato elemento specifico. supponiamo di avere un tensore A, per accedere al numero 5 è necessario sapere quanti indici sono necessari per accedervi. quindi abbiamo bisogno di tre tipi di informazioni per accedervi.
E = [[[1,2],[3,4]],
[[5,6],[7,8]]]
E[1][0][0]
F = [[5,6],[7,8]]
# 2 rows and 3 Colums
# axis 0 is the rows and 1 is columns
La forma è il numero di elementi in ogni dimensione. nello stesso esempio sopra E ha 2 elementi sull'asse 0 e 2 elementi sull'asse 1, quindi la sua forma è (2,2).
Memorizzare tensori
potresti chiederti. immagazzinare? è solo un nd array che non sta assegnando la variabile abbastanza per quello?
ora vediamo di confrontare tra array 1D e 2D per capire la differenza. per memorizzare qualsiasi cosa nella RAM dovrebbe avere un posto dove memorizzarlo con un indirizzo specifico e un puntatore puntato su di esso. gli array vengono archiviati in memoria in sequenza con un puntatore all'indice iniziale dell'array.
ma nell'array 2D, non memorizzerà sequenzialmente in memoria, verrà memorizzato in posizioni diverse con un array nD di indirizzi per ciascun array.
La memorizzazione di un array nD sotto forma di un array nD è più efficiente nell'allocazione della memoria.
Per memorizzare un array nD sotto forma di un array 1D è possibile utilizzare uno dei due layout Column-major o Row-major, questi due concetti dei linguaggi Fortran e C.
Colonna Maggiore
Sta memorizzando gli elementi dell'array nD colonna per colonna a partire dall'angolo in alto a sinistra fino alla fine dell'array
Row-Major
Sta memorizzando gli elementi dell'array nD riga per riga a partire dall'angolo in alto a sinistra fino alla fine dell'array
Esempio 3D di riga principale
confrontando i due metodi non c'è modo migliore entrambi possono essere usati a seconda dello scenario, o ancora di più, puoi usare un modo ibrido di mescolare i due metodi.
Una nota aggiuntiva degna di nota è che i numeri sono quando hai fatto qualsiasi trasformazione di array i dati non cambiano nella memoria. Immagina di avere un array nD con numeri grandi come più di 8 byte per ogni immagine che lo rimodella. Oh mio Dio, non è affatto efficiente spostare quei numeri nella memoria, ma se riordinassi semplicemente gli indici sarebbe facile.
1D_array = [100000,5642000,89874131]
indices = [0,1,2]
# reverse the indices
indices = [2,1,0]
for i in indices:
print(1D_array[i])
# the array is reversed without moving
Conclusione
In questa parte, comprendiamo il concetto di tensore in teoria, i suoi attributi e come memorizzarlo. nella parte successiva, ci sporcheremo le mani con il codice. costruendo un oggetto tensore passo dopo passo a seconda della riga principale come impostazione predefinita, per ora, per raggiungere la nostra destinazione finale costruendoci sopra un framework di deep learning.
Riferimenti
Cosa sono i tensori
La Gilda a NumPy
Prestazioni dell'array 1D rispetto a 2D
Layout di memoria di un array multidimensionale

![Che cos'è un elenco collegato, comunque? [Parte 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































