Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 有没有办法在bigquery中使用kmeans、tensorflow保存的模型?_Python_Tensorflow_Google Bigquery_K Means - Fatal编程技术网

Python 有没有办法在bigquery中使用kmeans、tensorflow保存的模型?

Python 有没有办法在bigquery中使用kmeans、tensorflow保存的模型?,python,tensorflow,google-bigquery,k-means,Python,Tensorflow,Google Bigquery,K Means,我知道这有点愚蠢,因为BigQueryML现在为Kmeans提供了良好的初始化。尽管如此,我还是需要在tensorflow中训练一个模型,然后将其传递给BigQuery进行预测 我保存了我的模型,一切正常,直到我尝试将它上传到bigquery。我得到以下错误: TensorFlow SavedModel output output has an unsupported shape: unknown_rank: true 所以我的问题是:在BigQuery中不可能使用tensorflow训练的k

我知道这有点愚蠢,因为BigQueryML现在为Kmeans提供了良好的初始化。尽管如此,我还是需要在tensorflow中训练一个模型,然后将其传递给BigQuery进行预测

我保存了我的模型,一切正常,直到我尝试将它上传到bigquery。我得到以下错误:

TensorFlow SavedModel output output has an unsupported shape: unknown_rank: true
所以我的问题是:在BigQuery中不可能使用tensorflow训练的kmeans算法吗

编辑

创建模型:

kmeans = tf.compat.v1.estimator.experimental.KMeans(num_clusters=8, use_mini_batch = False,    initial_clusters=KMEANS_PLUS_PLUS_INIT, seed=1234567890, relative_tolerance=.001)
kmeans.export_saved_model("gs://<bicket>/tf_clustering_model", 
                          serving_input_receiver_fn=serving,
                          checkpoint_path='/tmp/tmpdsleqpi3/model.ckpt-19',
                          experimental_mode=tf.estimator.ModeKeys.PREDICT)
服务职能:

def serving():
    inputs = {}
   # for feat in df.columns:
   #     inputs[feat] = tf.placeholder(shape=[None], dtype = tf.float32)
    inputs = tf.placeholder(shape=[None,9], dtype = tf.float32)
    return tf.estimator.export.TensorServingInputReceiver(inputs,inputs)
保存模型:

kmeans = tf.compat.v1.estimator.experimental.KMeans(num_clusters=8, use_mini_batch = False,    initial_clusters=KMEANS_PLUS_PLUS_INIT, seed=1234567890, relative_tolerance=.001)
kmeans.export_saved_model("gs://<bicket>/tf_clustering_model", 
                          serving_input_receiver_fn=serving,
                          checkpoint_path='/tmp/tmpdsleqpi3/model.ckpt-19',
                          experimental_mode=tf.estimator.ModeKeys.PREDICT)
所有的输出形状似乎都有未知的等级。我如何设置这个特定估计器的导出,或者我可以搜索一些东西来帮助我

最终编辑:

这似乎真的是不受支持的,至少就我所能承受的。我的方法多种多样,但最终,我发现自己别无选择,只能从KmeansClustering类的源代码(以及剩余的代码)获取代码,并尝试以某种方式重塑输出。在这个过程中,我意识到结果的对象实际上是一个具有不同张量类的元组,它似乎被单独用来构造图。有趣的是,如果我用这个元组做如下的事情:

model_predictions[0][0]...[0]
物体总是某种奇怪的张量。在这三个点中,我升到了60多岁,最终放弃了

从那里,我尝试获取将这些输出提供给KmeansClustering的类,该类称为集群ops中的Kmeans(以及中的周围代码)。我再次没有成功地更改数据类型,但我确实理解了为什么将输出的名称设置为挤压:在这里,输出有一个挤压操作。我认为这可能是问题所在,并试图消除挤压操作和其他事情。。。我失败了:(

最后,我意识到这个输出似乎实际上来自estimator.py文件,此时我放弃了它

感谢所有评论我不会走这么远的人,
Cheers

您可以使用tensorflow附带的命令行程序saved_model_cli检查savedmodel文件中的形状


确保tensorflow中的导出签名指定了输出张量的形状。

此错误的含义:名为“output”的TF模型输出的形状完全未定义。(unknown_rank=true表示模型甚至未指定多个维度)

为了使BigQuery能够使用TensorFlow模型,它必须能够将模型输出转换为BigQuery类型:单个基元标量或基元的一维数组

您可以在图的末尾添加一个操作,将此输出塑造成BigQuery可以加载的内容


您的KMeans模型输出的内容并不明显。我猜它可能试图将所有簇作为一个大张量输出?这是使用创建的模型吗?

是的,它是由精确的估计器创建的。我将在文章中添加一些示例代码。我不确定它输出的内容。我发现:“通过导出保存的模型方法保存的
SavedModel
不包括群集中心。但是,群集中心可以通过培训期间保存的最新检查点进行检索。”在此链接中(),但未指定其输出。我使用该命令检查了形状,但所有输出形状都未知。是否必须在导出保存的模型函数中设置某些内容?Joao,如果您发布保存的模型cli的输出,我们将能够更好地帮助您。总之,看一下,预测键似乎是到e的索引和距离如果它是一个索引,那么它是一个整数,所以请尝试tf.reforme(输出,[-1,1])。如果它是一个距离,那么每个集群将得到一个,所以您需要执行tf.reforme(输出,[-1,k])其中是群集的数量。我将把保存的\u model\u cli输出保存到原始帖子中。非常感谢您的帮助和建议。我不确定如何重新设置输出。我一直在尝试设置SavedModelBuilder,但没有取得很大成功。