2017-10-12 1 views
0

J'ai une variable tensorflow qui est divisée en utilisant tf.split.Tensorflow: l'espace réservé après tf.split() n'est pas accessible via une autre variable d'index d'espace réservé?

Theta = tf.Variable(tf.random_normal((R,s), dtype=tf.float64))
Theta_s = tf.split(Theta, ysplit, 1)

ysplit est une liste contenant la longueur de la fente le long de l'axe 1. Maintenant Theta_s[i] est une matrice de dimension (R x ysplit[i]). Je dois accéder Theta_s à travers une autre variable d'index de placeholder. À l'heure actuelle, je ne suis pas en mesure de le faire depuis tf.split() retourne la liste et je reçois cette erreur:

TypeError: list indices must be integers or slices, not Tensor

Y at-il un bon moyen de déclarer la variable à répondre à l'objectif?

Répondre

0

Vous pouvez utiliser un tf.TensorArray pour effectuer l'indexation dynamique avec une tf.Tensor:

Theta_s = tf.split(Theta, ysplit, 1) 

array = tf.TensorArray(tf.float64, size=len(Theta_s), clear_after_read=False) 

for i, t in enumerate(Theta_s): 
    array = array.write(i, t) 

placeholder_index = tf.placeholder(tf.int32, shape=[]) 

Theta_s_i = array.read(placeholder_index) 
+0

Merci pour la réponse. Mais l'ysplit est une liste de nombres variables, c'est-à-dire que la taille de la division est inégale. Il semble que TensorArray s'attend à ce que les éléments aient la même forme. ysplit = [5,2,3]. L'erreur est [ValueError: Formes incohérentes: saw (3, 2) mais attendu (3, 5) (et infer_shape = True)]. – Arvin

+0

Désolé .. Mon mauvais à manquer l'option. Merci pour votre aide. – Arvin

+0

Une suggestion pour mettre à jour une ligne de Theta_s_i: Theta_s_i [j], en supposant que Theta_s_i est une matrice? Merci, – Arvin