Je souhaite découper un tenseur dans la dimension "Aucun".Comment découper un tenseur avec une dimension None dans Tensorflow
Par exemple,
tensor = tf.placeholder(tf.float32, shape=[None, None, 10], name="seq_holder")
sliced_tensor = tensor[:,1:,:] # it works well!
mais
# Assume that tensor's shape will be [3,10, 10]
tensor = tf.placeholder(tf.float32, shape=[None, None, 10], name="seq_holder")
sliced_seq = tf.slice(tensor, [0,1,0],[3, 9, 10]) # it doens't work!
Il est même que je reçois un message quand je l'ai utilisé un autre place_holder pour alimenter le paramètre de taille pour tf.slice().
La deuxième méthode m'a donné le message d'erreur «La taille de l'entrée (profondeur des entrées) doit être accessible via l'inférence de forme».
J'aimerais savoir ce qui est différent entre deux méthodes et ce qui est plus tensorflow-ish.
[Modifié] code complet est ci-dessous
import tensorflow as tf
import numpy as np
print("Tensorflow for tests!")
vec_dim = 5
num_hidden = 10
# method 1
input_seq1 = np.random.random([3,7,vec_dim])
# method 2
input_seq2 = np.random.random([5,10,vec_dim])
shape_seq2 = [5,9,vec_dim]
# seq: [batch, seq_len]
seq = tf.placeholder(tf.float32, shape=[None, None, vec_dim], name="seq_holder")
# Method 1
sliced_seq = seq[:,1:,:]
# Method 2
seq_shape = tf.placeholder(tf.int32, shape=[3])
sliced_seq = tf.slice(seq,[0,0,0], seq_shape)
cell = tf.contrib.rnn.GRUCell(num_units=num_hidden)
init_state = cell.zero_state(tf.shape(seq)[0], tf.float32)
outputs, last_state = tf.nn.dynamic_rnn(cell, sliced_seq, initial_state=init_state)
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
# method 1
# states = sess.run([sliced_seq], feed_dict={seq:input_seq1})
# print(states[0].shape)
# method 2
states = sess.run([sliced_seq], feed_dict={seq:input_seq2, seq_shape:shape_seq2})
print(states[0].shape)
Avez-vous l'erreur lorsque vous définissez les opérations (lors de l'exécution de ces deux lignes) ou lorsque vous essayez de les exécuter (en appelant '.run' dans une session, par exemple) avec une entrée? Je n'ai aucun problème à exécuter ces deux instructions. – jdehesa
J'ai eu une erreur quand j'ai mis le tenseur tranché (2ème méthode) en fonction dynamique rnn. Est-ce un problème de dynamic_rnn? –
Hmm, difficile à dire ... pouvez-vous peut-être éditer votre question et ajouter plus de détails, peut-être un exemple reproductible minimal complet où votre problème apparaît? – jdehesa