我正在尝试使用BigQuery ML加载保存的tensorflow模型来进行预测。然而,当我运行查询读取GCS中保存的模型时,我得到了以下错误:
TensorFlow SavedModel output output had no dimensions, which is not supported
我用tf.compat.v1.estimator.experimental.KMeans
保存了一个K-Means模型,这是我的代码:
def input_fn():
return tf.data.Dataset.from_tensors(tf.convert_to_tensor(df.loc[:,col_features], dtype=tf.float32)).repeat(1)
## Function for convergence of kmeans
def centroids_distance(num_clusters: int, centroids_old: np.array, centroids_new: np.array) -> float:
return np.max([np.linalg.norm(centroids_old[r,:] - centroids_new[r,:]) for r in range(num_clusters)])
feature_columns = [tf.feature_column.numeric_column(feature_name, dtype=tf.float32) for feature_name in col_features]
previous_centers = np.zeros((k, len(col_features)))
kmeans = tf.compat.v1.estimator.experimental.KMeans(num_clusters=k,
seed=seed,
initial_clusters='kmeans_plus_plus',
distance_metric='squared_euclidean',
use_mini_batch=False,
feature_columns=feature_columns)
for s in range(max_iterations):
kmeans.train(input_fn)
cluster_centers = kmeans.cluster_centers()
centroids_diff = centroids_distance(k_opt, previous_centers, cluster_centers)
if centroids_diff < tol:
break
previous_centers = cluster_centers
inputFn = tf.estimator.export.build_parsing_serving_input_receiver_fn(tf.feature_column.make_parse_example_spec(feature_columns))
model_path = kmeans.export_saved_model("gs://my_bucket/my_folder/model", inputFn)
我是Tensorflow的新手,我不明白这个错误指向什么。我在export_save_model
中检查了是否有其他参数可以设置输出维度,但似乎没有一个是我想要的。提前谢谢。
在这里找到同样的问题:有没有办法在bigquery中使用kmeans、tensorflow保存的模型?。
主要问题是TF内置KMeans估计模型的输出张量形状在保存的模型中具有未知秩。
解决这一问题的两种可能方法:
尝试直接在BQML上训练KMeans模型。重新实现TF KMeans估计器模型,将输出张量重塑为特定的张量形状。