tensorflow feature_column踩坑合集
阿新 • • 發佈:2020-03-07
踩坑內容包含以下
1. feature_column的輸入輸出型別,用一個數據集給出demo
2. feature_column接estimator
3. feature_column接Keras
## feature_column 輸入輸出型別
### 輸入輸出型別
feature_column輸入可以是原始特徵的列名,或者是feature_column。初上手感覺feature_column設計的有點奇怪,不過熟悉了邏輯後用起來還是很方便的。幾個需要習慣一下的點:
1. 深度模型的輸入必須是Dense型別,所有輸出是categorical型別需要經過indicator或者embedding的轉換才可以
2. indicator, embedding, bucketized的輸入不能是原始特徵,前兩者只能是categorical型別的feature_column, 後者只能是numeric_column
|feature_column| 輸入| 輸出|輸出是否為dense|
|----|----|----|---|
|categorical_column_with_identity|數值型離散|categorical|N|
|categorical_column_with_vocabulary_list|字元型/數值型離散|categorical|N|
|categorical_column_with_hash_bucket|類別太多的離散值|categorical|N|
|crossed_column|categorical/離散值 |categorical|N|
|indicator_column|categorical|one/multi-hot|Y|
|embedding_column |categorical|dense vector|Y|
|numeric_column|數值型連續值|numeric|Y|
|bucketzied_column|numeric_column|one-hot|Y|
以下給出各種特徵工程的demo,原始特徵如下
![image.png-252.2kB][1]
### 輸入-連續值
![image.png-170.8kB][2]
### 輸入-離散值
![image.png-286.2kB][3]
### 輸入-categorical
![image.png-290kB][4]
## feature_column接estimator
如果是使用預定義的estimator, feature_column可以直接作為輸入,不需要任何額外操作,只需要注意深度模型只支援Dense型別的feature_column即可。
如果是自定義estimator,則需要多一步用feature_column先建立input_layer
```python
input_layer = tf.feature_column.input_layer(features, feature_columns)
```
## feature_column接keras
為什麼要這麼搭配呢,好像是沒啥必要,只不過進一步證明tf的官方文件確實坑而已。。。
```python
def model_fn():
#define Keras input
input = {}
for f in FEATURE_NAME:
input[f] = Input(shape=(1,), name = f, dtype = DTYPE[f])
#generate feature_columns
feature_columns = build_features()
#Define transformation from feature_columns to Dense Tensor
feature_layer = tf.keras.layers.DenseFeatures( feature_columns )
#Transform input
dense_feature = feature_layer(input)
output = Dense(1, activation='sigmoid')(dense_feature)
#feed input placeholder as list
model = Model(inputs = [i for i in input.values()], outputs = output)
return model
```
[1]: http://static.zybuluo.com/hongchenzimo/iyjk0m2i1i631jv9gwj8jzgg/image.png
[2]: http://static.zybuluo.com/hongchenzimo/y3ihfhb465aci4n0qs9kvqag/image.png
[3]: http://static.zybuluo.com/hongchenzimo/qyfvqwib5turc587l3hml196/image.png
[4]: http://static.zybuluo.com/hongchenzimo/6kjyawpwbsdrqjcak96hw3fk/i