Cree un gráfico que funcione con el tamaño de lote variable utilizando Tensorflow

Utilizo las operaciones tf.placeholders () para alimentar el tamaño de lote variable de entrada que son tensores 2D y uso el mecanismo de alimentación para suministrar valores diferentes para esos tensores cuando llamo run (). tengo

TypeError: el objeto ‘Tensor’ no es iterable.

Lo siguiente es mi código:

with graph.as_default(): train_index_input = tf.placeholder(tf.int32, shape=(None, window_size)) train_embeddings = tf.Variable(tf.random_uniform([vocabulary_size, embedding_dimension], -1.0, 1.0)) embedding_input = [tf.nn.embedding_lookup(train_embeddings, x) for x in train_index_input] ...... ...... 

Como no puedo ver el contenido del tensor “train_index_input” sin ejecutar el gráfico, el error del objeto “‘Tensor’ no es iterable” aumenta el código:

 embedding_input = [tf.nn.embedding_lookup(train_embeddings, x) for x in train_index_input] 

Lo que quiero obtener es una matriz de incrustación “embedding_input” que tiene la forma [batch_size, embedding_dimension] donde batch_size no se arregla. ¿Tengo que definir una nueva operación en Tensorflow para incrustar la búsqueda de tensores 2D? ¿O alguna otra forma de hacerlo? Gracias.

Estás tratando de hacer una comprensión de lista a nivel de python ( for x in train_index_input ) sobre un marcador de posición Tensorflow. Eso no funcionará: Python no tiene idea de lo que hay dentro de un objeto tf.

Para lograr una búsqueda de incrustación de lotes, lo que puede hacer es simplemente acoplar su lote:

 train_indexes_flat = tf.reshape(train_index_input, [-1]) 

ejecutarlo a través de incrustación de búsqueda:

 looked_up_embeddings = tf.nn.embedding_lookup(train_embeddings, train_indexes_flat) 

y luego remodelarlo de nuevo en los grupos correctos:

 embedding_input = tf.reshape(looked_up_embeddings, [-1, window_size])