亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

將 BigQuery 中的可為空數據饋送到 TensorFlow 轉換

將 BigQuery 中的可為空數據饋送到 TensorFlow 轉換

蠱毒傳說 2022-07-05 19:37:06
我們正在嘗試構建一個管道,該管道從 BigQuery 獲取數據,通過 TensorFlow Transform 運行,然后在 TensorFlow 中進行訓練。管道已啟動并正在運行,但我們在 BigQuery 中處理空值時遇到了困難。我們使用 Beam 從 BigQuery 加載:    raw_data = (pipeline                | '{}_read_from_bq'.format(step) >> beam.io.Read(                    beam.io.BigQuerySource(query=source_query,                                           use_standard_sql=True,                                           )))我正在使用數據集元數據,嘗試FixedLenFeature各種VarLenFeature列:    # Categorical feature schema    categorical_features = {        column_name: tf.io.FixedLenFeature([], tf.string) for column_name in categorical_columns    }    raw_data_schema.update(categorical_features)    # Numerical feature schema    numerical_features = {        column_name: tf.io.VarLenFeature(tf.float32) for column_name in numerical_columns    }    raw_data_schema.update(numerical_features)    # Create dataset_metadata given raw_data_schema    raw_metadata = dataset_metadata.DatasetMetadata(        schema_utils.schema_from_feature_spec(raw_data_schema))正如預期的那樣,如果您嘗試將 BigQuery NULL 輸入到 aFixedLenFeature中,它會中斷。但是,當我嘗試輸入字符串或整數 aVarLenFeature時,它也會中斷。這似乎是因為 VarLenFeature 需要一個列表,但 BigQuerySource 提供了一個 Python 原語。它中斷的確切點在這里(錯誤來自我嘗試使用整數時):File "/usr/local/lib/python3.7/site-packages/tensorflow_transform/impl_helper.py", line 157, in <listcomp>indices = [range(len(value)) for value in values]TypeError: object of type 'int' has no len()[while running 'train_transform/AnalyzeDataset/ApplySavedModel[Phase0]/ApplySavedModel/ApplySavedModel']當我使用我的字符串輸入(例如“UK”)嘗試 VarLenFeature 時,輸出是這樣的 SparseTensor:SparseTensorValue(indices=[(0, 0), (0, 1)], values=['U', 'K'], dense_shape=(1, 2))因此,似乎我需要將一個列表傳遞給 VarLenFeature 才能使其正常工作,但 BigQuerySource 默認情況下不這樣做。有沒有一種簡單的方法可以實現這一目標?還是我完全錯過了從 BigQuery 讀取可空列的標記?
查看完整描述

1 回答

?
一只甜甜圈

TA貢獻1836條經驗 獲得超5個贊

您可能需要自己處理 NULL(缺失)值。對于數值列,您可以將 NULL 替換為平均值或中位數。對于分類列 (STRING),您可以使用一些默認值,例如空 STRING 或新值作為缺失值指示符。

我對 VarLenFeature 不是很熟悉,但您可能可以替換 source_query 中的 NULL(NULL 插補)。就像是:

IFNULL(col, col_mean) AS col_imputed

缺點是您必須首先使用 sql 計算 col_mean 并在此處將其填充為常數。另一件事是您需要記住這個平均值并在預測中應用相同的平均值,因為它不是 tf.transform (您的圖表)的一部分。

Bigquery 本身將 BQML 作為 ML 平臺。他們確實支持TRANSFORM 和自動插補。也許你也可以看看:)


查看完整回答
反對 回復 2022-07-05
  • 1 回答
  • 0 關注
  • 156 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號