TensorFlow 2.0中real_valued_column等函数的替代位置及用法咨询
TensorFlow 2.x 中
real_valued_column 和 sparse_column_with_hash_bucket 的替代方案 TensorFlow 2.x 移除了tf.contrib模块,你提到的两个函数可通过以下方案替代:
数值型列(替代tf.contrib.layers.real_valued_column)
TF2.x 无需专门的列封装处理数值特征,直接将数值数据转为张量输入模型即可。若需预处理(如标准化),可搭配Keras预处理层:
基础用法
# 定义数值输入层(假设包含5个数值特征) numeric_input = tf.keras.layers.Input(shape=(5,), name='numeric_features') # 直接接入后续全连接层 x = tf.keras.layers.Dense(64, activation='relu')(numeric_input)
带标准化预处理
# 初始化标准化层并拟合训练数据的统计量 normalizer = tf.keras.layers.Normalization(axis=-1) normalizer.adapt(your_numeric_training_data) # 定义输入并应用标准化 numeric_input = tf.keras.layers.Input(shape=(5,)) normalized_input = normalizer(numeric_input) x = tf.keras.layers.Dense(64, activation='relu')(normalized_input)
类别型哈希分桶列(替代tf.contrib.layers.sparse_column_with_hash_bucket)
用tf.keras.layers.Hashing实现哈希分桶,搭配Embedding层生成类别特征的嵌入向量,适合高基数类别特征:
单类别特征处理
# 定义类别输入层(支持字符串或整数类型) categorical_input = tf.keras.layers.Input(shape=(1,), dtype=tf.string, name='categorical_feature') # 哈希分桶(指定1000个桶) hashed_feature = tf.keras.layers.Hashing(num_bins=1000)(categorical_input) # 生成嵌入向量(维度设为32) embedding = tf.keras.layers.Embedding(input_dim=1000, output_dim=32)(hashed_feature) # 展平后接入后续网络 x = tf.keras.layers.Flatten()(embedding)
多特征拼接(数值+多类别)
# 处理数值特征 numeric_input = tf.keras.layers.Input(shape=(5,)) normalizer = tf.keras.layers.Normalization(axis=-1) normalizer.adapt(your_numeric_data) normalized_numeric = normalizer(numeric_input) # 处理第一个类别特征 cat1_input = tf.keras.layers.Input(shape=(1,), dtype=tf.string) hashed_cat1 = tf.keras.layers.Hashing(num_bins=500)(cat1_input) embed_cat1 = tf.keras.layers.Embedding(500, 16)(hashed_cat1) flat_cat1 = tf.keras.layers.Flatten()(embed_cat1) # 处理第二个类别特征 cat2_input = tf.keras.layers.Input(shape=(1,), dtype=tf.string) hashed_cat2 = tf.keras.layers.Hashing(num_bins=1000)(cat2_input) embed_cat2 = tf.keras.layers.Embedding(1000, 32)(hashed_cat2) flat_cat2 = tf.keras.layers.Flatten()(embed_cat2) # 拼接所有特征 concatenated_features = tf.keras.layers.concatenate([normalized_numeric, flat_cat1, flat_cat2]) # 后续网络层 x = tf.keras.layers.Dense(64, activation='relu')(concatenated_features)
可选:使用TF2.x 特征列API
若习惯特征列写法,可使用tf.feature_column模块,对应替代如下:
- 数值列:
tf.feature_column.numeric_column(替代real_valued_column) - 哈希分桶类别列:
tf.feature_column.categorical_column_with_hash_bucket(替代sparse_column_with_hash_bucket)
示例代码:
# 定义数值列 numeric_col = tf.feature_column.numeric_column('numeric_feature', shape=(5,)) # 定义哈希分桶类别列 hash_cat_col = tf.feature_column.categorical_column_with_hash_bucket( 'categorical_feature', hash_bucket_size=1000) # 转换为嵌入列 embed_col = tf.feature_column.embedding_column(hash_cat_col, dimension=32) # 组合特征列 feature_columns = [numeric_col, embed_col] # 构建特征层接入模型 feature_layer = tf.keras.layers.DenseFeatures(feature_columns) inputs = { 'numeric_feature': tf.keras.layers.Input(shape=(5,), dtype=tf.float32), 'categorical_feature': tf.keras.layers.Input(shape=(1,), dtype=tf.string) } x = feature_layer(inputs) x = tf.keras.layers.Dense(64, activation='relu')(x)
内容的提问来源于stack exchange,提问作者Carlos Leon
相关产品推荐
相关产品推荐

