使用 KMeans tflearn 估计器作为张量流中图形的一部分
Using KMeans tflearn estimator as part of a graph in tensorflow
我正在尝试使用 tensorflow.contrib.learn.KMeansClustering
作为 Tensorflow 中图表的一部分。我想将它用作图表的一个组成部分,给我预测和中心。代码的相关部分如下:
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).
我相信这是因为 KMeansClustering 是一个 TFLearn 估计器;与单个模块相比,这更类似于整个图。那是对的吗?我可以将它转换为默认图形的模块吗?如果没有,是否有在另一个图中执行 KMeans 的函数?
谢谢!
KMeansClustering 估计器使用来自 tf.contrib.factorization 的操作。 factorization MNIST example 使用没有 Estimator 的 KMeans。
KMeansClustering Estimator API 构建自己的 tf.Graph
并自行管理 tf.Session
,因此您无需 运行 tf.Session
feed 值(由 input_fn
完成),这就是 ValueError
出现的原因。
KMeansClustering Estimator 的正确用法是:
kmeans = KMeansClustering(num_clusters=num_clusters,
relative_tolerance=0.0001)
kmeans.fit(input_fn=(lambda: [X, None]))
clusters = kmeans.clusters()
其中 X
是保存值的 tf.constant
输入张量(例如,将 X
定义为 np.array
而不是使用 tf.convert_to_tensor
)。这里 X
不是需要在 tf.Session
运行 处喂食的 tf.placeholder
。
TensorFlow 1.4 更新:
使用tf.contrib.factorization.KMeansClustering
API查找聚类中心:
kmeans=tf.contrib.factorization.KMeansClustering(num_clusters=num_clusters)
kmeans.train(input_fn=(lambda: [X, None]))
centers = kmeans.cluster_centers()
要预测给定特征的中心,只需使用:
predictions = kmeans.predict(input_fn=(lambda:[another_X, None]))
这里 link 是一种使用 KMeans 聚类 的方法,使用 tf.contrib.factorization.KMeansClustering
。它表明解决方案是通过将输入 Tensor(X)
放入 input_fn
lambda 中来延迟创建输入 Tensor(X)
,它将在 train()
中调用。这样就不会出现上面提到的错误了。
我正在尝试使用 tensorflow.contrib.learn.KMeansClustering
作为 Tensorflow 中图表的一部分。我想将它用作图表的一个组成部分,给我预测和中心。代码的相关部分如下:
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).
我相信这是因为 KMeansClustering 是一个 TFLearn 估计器;与单个模块相比,这更类似于整个图。那是对的吗?我可以将它转换为默认图形的模块吗?如果没有,是否有在另一个图中执行 KMeans 的函数?
谢谢!
KMeansClustering 估计器使用来自 tf.contrib.factorization 的操作。 factorization MNIST example 使用没有 Estimator 的 KMeans。
KMeansClustering Estimator API 构建自己的 tf.Graph
并自行管理 tf.Session
,因此您无需 运行 tf.Session
feed 值(由 input_fn
完成),这就是 ValueError
出现的原因。
KMeansClustering Estimator 的正确用法是:
kmeans = KMeansClustering(num_clusters=num_clusters,
relative_tolerance=0.0001)
kmeans.fit(input_fn=(lambda: [X, None]))
clusters = kmeans.clusters()
其中 X
是保存值的 tf.constant
输入张量(例如,将 X
定义为 np.array
而不是使用 tf.convert_to_tensor
)。这里 X
不是需要在 tf.Session
运行 处喂食的 tf.placeholder
。
TensorFlow 1.4 更新:
使用tf.contrib.factorization.KMeansClustering
API查找聚类中心:
kmeans=tf.contrib.factorization.KMeansClustering(num_clusters=num_clusters)
kmeans.train(input_fn=(lambda: [X, None]))
centers = kmeans.cluster_centers()
要预测给定特征的中心,只需使用:
predictions = kmeans.predict(input_fn=(lambda:[another_X, None]))
这里 link 是一种使用 KMeans 聚类 的方法,使用 tf.contrib.factorization.KMeansClustering
。它表明解决方案是通过将输入 Tensor(X)
放入 input_fn
lambda 中来延迟创建输入 Tensor(X)
,它将在 train()
中调用。这样就不会出现上面提到的错误了。