使用 "tf.contrib.factorization.KMeansClustering"
Use "tf.contrib.factorization.KMeansClustering"
参考这个Link,(the Link)
我尝试练习使用 tf.contrib.factorization.KMeansClustering 进行聚类。下面的简单代码可以正常工作:
import numpy as np
import tensorflow as tf
# ---- Create Data Sample -----
k = 5
n = 100
variables = 5
points = np.random.uniform(0, 1000, [n, variables])
# ---- Clustering -----
input_fn=lambda: tf.train.limit_epochs(tf.convert_to_tensor(points, dtype=tf.float32), num_epochs=1)
kmeans=tf.contrib.factorization.KMeansClustering(num_clusters=6)
kmeans.train(input_fn=input_fn)
centers = kmeans.cluster_centers()
# ---- Print out -----
cluster_indices = list(kmeans.predict_cluster_index(input_fn))
for i, point in enumerate(points):
cluster_index = cluster_indices[i]
print ('point:', point, 'is in cluster', cluster_index, 'centered at', centers[cluster_index])
我的问题是为什么这个 "input_fn" 代码可以解决问题?
如果我把代码改成这样,它会 运行 进入无限循环。为什么??
input_fn=lambda:tf.convert_to_tensor(points, dtype=tf.float32)
从文档 (here) 来看,train() 似乎需要 input_fn 的参数,它只是一个 'tf.data.Dataset' 对象,就像 Tensor(X)。那么,为什么我必须做所有这些关于 lambda 的棘手事情:tf.train.limit_epochs()?
哪位熟悉tensorflow estimators基础的可以帮忙解释一下吗?非常感谢!
My question is why would this "input_fn" code does the trick? If I change the code to this, it will run into an infinite loop. Why??
文档指出 input_fn
被重复调用,直到它 returns 一个 tf.errors.OutOfRangeError
。用 tf.train.limit_epochs
装饰你的张量确保错误最终被提出,这向 KMeans 发出它应该停止训练的信号。
参考这个Link,(the Link) 我尝试练习使用 tf.contrib.factorization.KMeansClustering 进行聚类。下面的简单代码可以正常工作:
import numpy as np
import tensorflow as tf
# ---- Create Data Sample -----
k = 5
n = 100
variables = 5
points = np.random.uniform(0, 1000, [n, variables])
# ---- Clustering -----
input_fn=lambda: tf.train.limit_epochs(tf.convert_to_tensor(points, dtype=tf.float32), num_epochs=1)
kmeans=tf.contrib.factorization.KMeansClustering(num_clusters=6)
kmeans.train(input_fn=input_fn)
centers = kmeans.cluster_centers()
# ---- Print out -----
cluster_indices = list(kmeans.predict_cluster_index(input_fn))
for i, point in enumerate(points):
cluster_index = cluster_indices[i]
print ('point:', point, 'is in cluster', cluster_index, 'centered at', centers[cluster_index])
我的问题是为什么这个 "input_fn" 代码可以解决问题? 如果我把代码改成这样,它会 运行 进入无限循环。为什么??
input_fn=lambda:tf.convert_to_tensor(points, dtype=tf.float32)
从文档 (here) 来看,train() 似乎需要 input_fn 的参数,它只是一个 'tf.data.Dataset' 对象,就像 Tensor(X)。那么,为什么我必须做所有这些关于 lambda 的棘手事情:tf.train.limit_epochs()?
哪位熟悉tensorflow estimators基础的可以帮忙解释一下吗?非常感谢!
My question is why would this "input_fn" code does the trick? If I change the code to this, it will run into an infinite loop. Why??
文档指出 input_fn
被重复调用,直到它 returns 一个 tf.errors.OutOfRangeError
。用 tf.train.limit_epochs
装饰你的张量确保错误最终被提出,这向 KMeans 发出它应该停止训练的信号。