2017-05-18 17 views
0

TensorFlowグラフの別の操作のために、タイプ(python)リストの引数としてtf.Tensorを使用したいと思います。 つまり、別の操作で動的リスト引数としてTensorを使用したいと考えています。これは可能ですか?TensorFlow:テンソルをグラフのリスト引数として使用する

実行例:

import tensorflow as tf 
import numpy as np 

graph = tf.Graph() 
var1 = np.random.randn(2, 3) 
var2 = np.random.randn(2, 3, 4) 

with graph.as_default(): 
    def getRange(myTensor): 
     myRank = tf.rank(myTensor) 
     return tf.range(tf.constant(1), tf.squeeze(myRank)) 

    def getMoments(myTensor): 
     myMoments = tf.nn.moments(myTensor, axes=getRange(myTensor)) 
     return myMoments 
    var1tf = tf.Variable(var1) 
    var2tf = tf.Variable(var2) 
    var1moments = getMoments(var1tf) 
    var2moments = getMoments(var2tf) 
    rangeVar1 = getRange(var1tf) 
    rangeVar2 = getRange(var2tf) 
    init = tf.global_variables_initializer() 

with tf.Session(graph=graph) as sess: 
    sess.run([init]) 
    print(sess.run([rangeVar1])) # outputs [1], ok 
    print(sess.run([rangeVar2])) # outputs [1, 2], ok 
    print(sess.run([var1moments])) 
    print(sess.run([var2moments])) 

これはスロー:

raise TypeError("'Tensor' object is not iterable.") 
+0

興味深い質問を。好奇心のために、あなたは未知のランクのテンソルを扱わなければならない問題の種類は何ですか? – user1735003

+0

異なるランクのテンソルで呼び出される関数でこのコードを使用しています – gizzmole

+0

私の例を実行可能な例に更新しました – gizzmole

答えて

0

を私はget_shapeを用いて溶液()が見つかりました:

def getMoments(myTensor): 
    myRank = len(myTensor.get_shape().as_list()) 
    print('rank via shape:', myRank) 
    myMoments = tf.nn.moments(myTensor, axes=list(range(1, myRank))) 
    return myMoments 
関連する問題