2017-10-09 13 views
3

Tensorflowのグラフの一部としてtensorflow.contrib.learn.KMeansClusteringを使用しようとしています。私はそれをグラフの構成要素として使用して、私に予測と中心を与えたいと考えています。コードの関連部分は以下の通りです:テンソルフローのグラフの一部としてKMeans tflearn estimatorを使用する

with tf.variable_scope('kmeans'): 
    kmeans = KMeansClustering(num_clusters=num_clusters, 
           relative_tolerance=0.0001) 
    kmeans.fit(input_fn= (lambda : [X, None])) 
    clusters = kmeans.clusters() 

init_vars = tf.global_variables_initializer() 
sess = tf.Session() 
sess.run(init_vars, feed_dict={X: full_data_x}) 
clusters_np = sess.run(clusters, feed_dict={X: full_data_x}) 

はしかし、私は次のエラーを取得する:

ValueError: Tensor("kmeans/strided_slice:0", shape=(), dtype=int32) must be from the same graph as Tensor("sub:0", shape=(), dtype=int32). 

私はK平均法がTFLearn推定であるためであると考えています。これは単一のモジュールよりもグラフ全体に似ています。あれは正しいですか?それをデフォルトのグラフのモジュールに変換できますか?そうでない場合は、別のグラフ内でKMeansを実行する関数がありますか?

ありがとうございます!

答えて

1

KMeansClustering Estimatorは、tf.contrib.factorizationのopsを使用します。 factorization MNIST exampleは、EstimatorなしでKMeansを使用します。

+0

私はあなたの提案と機能に関する[documentation](https://www.tensorflow.org/versions/master/api_docs/python/tf/contrib/factorization/KMeans)を見てきました。私が間違っていなければ、彼らは入力からセンタとラベルまでの距離をすべての入力に対して提供します。しかし、私はセンター自体を探しています、どのようにそれらを取得するか考えていますか?ありがとう! – etal

+0

公共のアクセサーのように見えません。クラスターの割り当てを使ってポイントを平均化するか、 'reuse = True'を使って' variable_scople'で '_create_variables'を呼ぶことができます(元の変数の作成も可変スコープでラップする必要があります)。 –

+0

私は_create_variablesがセンターを出力するのを見ることができますが、入力データの影響を受ける方法や時期はわかりません。 variable_scopeをどうやって使っていますか? – etal

1

K平均法見積もりAPIは、(それがinput_fnによって行われます)tf.Graph、独自に構築し、あなたが値を養うためにtf.Sessionを実行する必要はありませんので、それ自体でtf.Sessionを管理ValueErrorが発生する理由、それはです。

K平均法推定器の正しい使用は、単にある:

X、値を(例えば np.arrayよう tf.convert_to_tensorを使用するよりも、 Xを定義する)を保持 tf.constant入力テンソルである
kmeans = KMeansClustering(num_clusters=num_clusters, 
          relative_tolerance=0.0001) 
kmeans.fit(input_fn=(lambda: [X, None])) 
clusters = kmeans.clusters() 

。ここでXtf.Sessionで実行する必要があるtf.placeholderではありません。

更新TensorFlow 1.4のために:特定の機能のためのセンターを予測する

kmeans=tf.contrib.factorization.KMeansClustering(num_clusters=num_clusters) 
kmeans.train(input_fn=(lambda: [X, None])) 
centers = kmeans.cluster_centers() 

だけで使用します:クラスタの中心を見つける

使用tf.contrib.factorization.KMeansClustering APIここで

predictions = kmeans.predict(input_fn=(lambda:[another_X, None])) 
0

linkがあります使用方法KMeansクラスタリング u歌うtf.contrib.factorization.KMeansClustering。これは、入力Tensor(X)の作成をラムダの中に入れて遅らせることで解決されることを示しています。これはtrain()の中で呼び出されます。その後、上記のエラーは発生しません。

関連する問題