Una rete di neuroni artificiali (ANN) con un numero arbitrario di ingressi e uscite


10

Vorrei utilizzare ANNs per il mio problema, ma il problema è che i miei nodi di input e output non sono stati risolti.

Ho fatto una ricerca su Google prima di porre la mia domanda e ho scoperto che l'RNN potrebbe aiutarmi con il mio problema. Ma tutti gli esempi che ho trovato hanno in qualche modo definito il numero di nodi di input e output.

Quindi, sto cercando una strategia, come renderla reale o almeno alcuni esempi, preferibile in Keras o PyTorch.

Maggiori dettagli sul mio problema:

Ho due liste di input, in cui la lunghezza della prima è fissa ed è uguale a due, fe:

in_1 = [2,2] 

ma la lunghezza del secondo elenco è flessibile, la lunghezza può essere da tre a inf, fe:

in_2 = [1,1,2,2]

o

in_2 = [1,1,1,2,2,2,3,3,3]

Inoltre, gli elenchi di input dipendono l'uno dall'altro. Il primo elenco mostra la dimensione dell'elenco di output. Quindi se in_1 = [2,2], significa che l'output deve avere la possibilità di essere rimodellato nella forma [2,2].

Attualmente, sto pensando di combinare due elenchi di input in uno:

in = in_1 + in_2 = [2, 2, 1, 1, 2, 2]

Inoltre, l'output ha la stessa lunghezza dell'elenco in_2 , fi:

se gli elenchi di input sono:

in_1 = [2, 2]
in_2 = [1, 1, 2, 2]

L'output dovrebbe essere:

out = [1, 2, 1, 2]

Tutte le idee sono benvenute!

Risposte:


6

La risposta può dipendere dal significato della lunghezza del vettore di input o da come ha origine.

Tuttavia, la soluzione più semplice è di solito conoscere l'input di dimensioni maggiori e usarlo come numero di vettori. Se l'input specificato ha una lunghezza inferiore, è possibile eseguire il riempimento con zeri o simboli appropriati. Quindi invece di avere un vettore [1, 2, 3] e [1, 2, 2, 3] puoi avere vettori [1, 2, 3, 0] e [1, 2, 2, 3].

Lo stesso può valere per l'output. Se l'output previsto è [1, 2, 1] e [1, 3, 4, 1], è possibile considerare il primo output come [1, 2, 1, 0]

Non è solo un trucco?

In genere, le reti neurali funzionano approssimazione. Idealmente, rappresenta i vettori (matrici) come input e i vettori (matrici) come output. Questo è il motivo per cui è sempre desiderabile che le dimensioni del vettore di input siano fisse.


Ok, è chiaro, posso fare il padding per l'input. Ma come definire la dimensione dei nodi di output?
Paddy,

3

Penso che potresti aver frainteso il numero fisso di input per l'RNN. Questo è il numero di ingressi per timestep . Tutti i tuoi esempi hanno un numero fisso di input per timestep: 1! Li dai uno alla volta alla tua rete neurale, finendo con uno speciale token "end" (potresti sempre avere un secondo input per questo). Insegnagli a non fornire alcun output fino a quando non vede il token di fine, quindi a emettere i componenti del risultato uno alla volta, terminando con un token di output finale speciale.


Wow grazie! Conosci qualche tutorial / esempio decente per capirlo meglio?
Paddy,

1
@Paddy Vedi awesome-rnn per alcuni link, ad esempio char-rnn è abbastanza divertente.
Arthur Tacca,

2

Sapendo che il primo elenco è praticamente invariante (descrivendo solo una determinata geometria), puoi anche provare a creare molti NN diversi e specializzati per ogni diversa configurazione in_1 e utilizzare solo in_2 per alimentare la rete.

Quindi in_1 potrebbe guidare diverse reti.ie

in_1=[1,1]? --> NN #1 (n1) --> (o1)
in_1=[2,1]? --> NN #2 (n1,n2) --> (o1,o2)
in_1=[2,2]? --> NN #3 (n1,n2,n3,n4) -> (o1,o2,o3,o4)

In un primo momento si determina la configurazione (cioè creando un dict) e quindi si addestra / alimenta le reti specializzate di conseguenza.


in realtà, è una buona idea, ma il numero di forme è abbastanza grande ... comunque, grazie per l'input!
Paddy,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.