2016-03-25 17 views
5

Mi è stata fornita una rete neurale addestrata nella torcia e ho bisogno di ricostruirla esattamente in tensorflow. Credo di aver correttamente definito l'architettura della rete in tensorflow ma sto riscontrando problemi nel trasferire il peso e i tensori di polarizzazione. Usando un pacchetto di terze parti, ho convertito tutti i pesi e i tensori di polarizzazione dalla rete della torcia in array numpy, quindi li ho scritti su disco. Posso caricarli di nuovo nel mio programma python ma non riesco a trovare un modo per assegnarli ai livelli corrispondenti nella mia rete tensorflow.Tensori di peso e di polarizzazione impostati per il funzionamento con tens2dflusso

Ad esempio, ho uno strato convoluzione definita come tensorflow

kernel_1 = tf.Variable(tf.truncated_normal([11,11,3,64], stddev=0.1)) 
conv_kernel_1 = tf.nn.conv2d(input, kernel_1, [1,4,4,1], padding='SAME') 
biases_1 = tf.Variable(tf.zeros[64]) 
bias_layer_1 = tf.nn_add(conv_kernel_1, biases_1) 

Secondo la documentazione tensorflow, l'operazione tf.nn.conv2d utilizza la forma definita nella variabile kernel_1 per costruire il tensore peso. Tuttavia, non riesco a capire come accedere a quel tensore di peso per impostarlo sull'array di pesi che ho caricato dal file.

È possibile impostare in modo esplicito il tensore del peso? E se sì, come?

(La stessa domanda vale per polarizzare tensore.)

risposta

5

Se si dispone dei pesi e pregiudizi in un array NumPy, dovrebbe essere facile per loro connettersi alla rete tensorflow:

weights_1_array = ... # ndarray of weights for layer 1 
biases_1_array = ... # ndarray of biases for layer 1 

conv_kernel_1 = tf.nn.conv2d(input, weights_1_array, [1, 4, 4, 1], padding='SAME') 
bias_layer_1 = tf.nn.bias_add(conv_kernel_1, biases_1_array) 

Si noti che è necessario assicurarsi che weights_1_array e biases_1_array siano nel formato dati corretto. Consultare la documentazione per tf.nn.conv2d() per una spiegazione della forma del filtro richiesta.

+0

Ho provato questo approccio e mi dà un errore ValueError: Shape (64, 363) deve avere rank 4. La mia comprensione è che il parametro filter definisce come viene costruito il tensore del peso – bdawson1

+0

Oppure devo rimodellare il caricato tensore del peso? Conserverebbe i valori durante l'esecuzione? – bdawson1

+0

Sì, potrebbe essere necessario rimodellare il tensore del peso. L'operazione 'tf.nn.conv2d()' richiede che sia 4-D, con le dimensioni '[filter_height, filter_width, in_channels, out_channels]'. – mrry

Problemi correlati