TensorFlow tutorial dice che al momento della creazione è necessario specificare la forma dei tensori. Quella forma diventa automaticamente la forma del tensore. Dice anche che TensorFlow fornisce meccanismi avanzati per rimodellare le variabili. Come lo posso fare? Qualche esempio di codice?Come posso modificare la forma di una variabile in TensorFlow?
risposta
Dai uno sguardo a shapes-and-shaping dalla documentazione di TensorFlow. Descrive diverse trasformazioni di forma disponibili.
La funzione più comune è probabilmente tf.reshape, che è simile al suo equivalente numpy. Ti permette di specificare qualsiasi forma che desideri purché il numero di elementi rimanga lo stesso. Ci sono alcuni esempi disponibili nella documentazione.
Documentation shows metodi di rimodellamento. Essi sono:
- rimodellare
- squeeze (rimuove dimensioni del formato 1 dalla forma di un tensore)
- expand_dims (aggiunge dimensioni del formato 1)
nonché sacco di metodi per ottenere shape
, size
, rank
del tuo tensore. Probabilmente il più utilizzato è reshape
ed ecco un esempio di codice con un paio di casi limite (-1):
import tensorflow as tf
v1 = tf.Variable([
[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12]
])
v2 = tf.reshape(v1, [2, 6])
v3 = tf.reshape(v1, [2, 2, -1])
v4 = tf.reshape(v1, [-1])
# v5 = tf.reshape(v1, [2, 4, -1]) will fail, because you can not find such an integer for -1
v6 = tf.reshape(v1, [1, 4, 1, 3, 1])
v6_shape = tf.shape(v6)
v6_squeezed = tf.squeeze(v6)
v6_squeezed_shape = tf.shape(v6_squeezed)
init = tf.initialize_all_variables()
sess = tf.Session()
sess.run(init)
a, b, c, d, e, f, g = sess.run([v2, v3, v4, v6, v6_shape, v6_squeezed, v6_squeezed_shape])
# print all variables to see what is there
print e # shape of v6
print g # shape of v6_squeezed
La classe tf.Variable
è il metodo consigliato per creare variabili, ma limita la capacità di cambiare la forma della variabile una volta creata.
Se è necessario cambiare la forma di una variabile, è possibile effettuare le seguenti operazioni (ad esempio per un virgola mobile tensore 32-bit):
var = tf.Variable(tf.placeholder(tf.float32))
# ...
new_value = ... # Tensor or numpy array.
change_shape_op = tf.assign(var, new_value, validate_shape=False)
# ...
sess.run(change_shape_op) # Changes the shape of `var` to new_value's shape.
Si noti che questa funzione non è nel API pubblica documentata , quindi è soggetto a modifiche. Se ti trovi a dover utilizzare questa funzione, faccelo sapere e possiamo esaminare un modo per supportarlo.
tf.Variable(tf.placeholder(tf.float32))
non è valida presso tensorflow 1.2.1
in guscio pitone:
import tensorflow as tf
tf.Variable(tf.placeholder(tf.float32))
otterrete:
ValueError: initial_value must have a shape specified: Tensor("Placeholder:0", dtype=float32)
Update: se si aggiunge validate_shape=False
, ci sarà non essere un errore
tf.Variable(tf.placeholder(tf.float32), validate_shape=False)
se tf.py_func
corrisponde il vostro requisito:
def init():
return numpy.random.rand(2,3)
a = tf.pyfun(init, [], tf.float32)
È possibile creare variabile che ha qualsiasi forma passando la propria funzione init.
Un altro modo:
var = tf.get_varible('my-name', initializer=init, shape=(1,1))
Si può passare tf.constant
o qualsiasi funzione che restituisce init
matrice NumPy. La forma fornita non sarà convalidata. La forma di output è la tua vera forma di dati.
- 1. Come posso copiare una variabile in tensorflow
- 2. Come espandere una variabile di Tensorflow
- 3. Come capire la forma statica e la forma dinamica in TensorFlow?
- 4. tf.shape() ottenere la forma di sbagliato in tensorflow
- 5. come modificare la variabile dell'autore in PyCharm
- 6. Come ottengo il gradiente della perdita in una variabile TensorFlow?
- 7. Come modificare la larghezza del tratto di una forma in modo programmatico su Android?
- 8. Stata: come modificare una variabile stringa in una data?
- 9. Come rilevare quale variabile è "non definita" in tensorflow
- 10. Keras/Tensorflow predicono: errore nella forma dell'array
- 11. Come posso tagliare una forma dentro un'altra?
- 12. Come posso implementare una rete neurale ricorsiva in TensorFlow?
- 13. Come posso risolvere 'esaurito la memoria gpu' in TensorFlow
- 14. Ottieni la diagonale di una matrice in TensorFlow
- 15. Come posso trasformare una stringa in una forma abbreviata?
- 16. Come trasmettere esplicitamente un tensore per abbinare la forma di un altro in tensorflow?
- 17. Come assegnare un valore a una variabile TensorFlow?
- 18. Come posso modificare una procedura memorizzata?
- 19. TensorFlow Ridimensiona il tensore dell'immagine in forma dinamica
- 20. Come posso memorizzare la colonna selezionata in una variabile?
- 21. Tensorflow - Python: come posso utilizzare i miei dati con TensorFlow?
- 22. Come posso scorrere solo la prima variabile di una tupla
- 23. Come inizializzare la variabile Tensor come matrice di identità in TensorFlow
- 24. Come posso definire una variabile in XAML?
- 25. Come nascondere un fieldset (scheda) in Plone aggiungere/modificare forma
- 26. utilizzando il tag <set> in SVG per modificare la rotazione di una forma
- 27. Come modificare una variabile $ scope all'interno di un filtro
- 28. Come sospendere/riprendere la formazione in Tensorflow
- 29. Come posso creare una forma di pulsante complessa?
- 30. tensorflow concat un segnaposto variabile dimensioni con un vettore
Il problema con questo approccio è che 'var.shape' non viene aggiornato di conseguenza. Questo persiste quando si memorizza un checkpoint e quindi si impedisce di caricare nuovamente il checkpoint, poiché la forma variabile non corrisponde alla forma del peso. C'è un modo per forzare 'var.shape' per l'aggiornamento? Devo creare un problema con GitHub? –
Ho trovato questo thread, discutendo il problema: https://github.com/tensorflow/tensorflow/issues/10091#issuecomment-304301817 Mi chiedo, tuttavia, se esiste un modo per estendere i pesi delle reti esistenti –