tf.feature_column.input_layer返回错误张量形状的技术咨询
解决tf.feature_column.input_layer输出形状颠倒的问题
我之前踩过完全一样的坑!当tf.feature_column.input_layer返回[number of features, batch size]而不是预期的[batch size, number of features]时,通常是输入特征的维度适配出了问题,或者可以通过简单的转置快速修正。下面给你几个可行的解决思路:
快速临时修复:转置张量
这是最直接的办法,拿到input_layer的输出后直接转置就能纠正形状:# 先获取输入函数的一个batch用于测试 features, labels = next(create_train_input_fn(df, df.reward_next)()) # 生成输入层 input_layer = tf.feature_column.input_layer(features, your_feature_columns) # 转置修正形状 corrected_input = tf.transpose(input_layer) # 此时corrected_input的形状就是[batch_size, num_features]排查特征列的定义问题
形状颠倒很可能是特征列的维度设置错误导致的,比如处理分类特征时:- 如果你用了
embedding_column或indicator_column,要确保对应的categorical_column是基于单值特征构建的(每个样本对应一个分类值),而不是把多值特征当成了单值特征。 - 数值特征要确保每个特征的输入形状是
[batch_size],而不是[num_features]。
给你一个正确的特征列定义示例参考:
# 数值特征定义 numeric_feature = tf.feature_column.numeric_column(key="your_numeric_feature") # 分类特征定义(单值) categorical_feature = tf.feature_column.categorical_column_with_vocabulary_list( key="your_cat_feature", vocabulary_list=["x", "y", "z"] ) indicator_feature = tf.feature_column.indicator_column(categorical_feature) # 组合特征列 feature_columns = [numeric_feature, indicator_feature]- 如果你用了
在自定义Estimator的model_fn中修正
如果你是在构建自定义DQN Estimator时遇到这个问题,直接在model_fn里处理形状:def dqn_model_fn(features, labels, mode): # 生成输入层 input_layer = tf.feature_column.input_layer(features, feature_columns) # 修正形状 input_layer = tf.transpose(input_layer) # 后续构建DQN网络 hidden_layer = tf.layers.dense(inputs=input_layer, units=128, activation=tf.nn.relu) output_layer = tf.layers.dense(inputs=hidden_layer, units=num_actions) # 完成Estimator的预测、损失、训练逻辑 # ...
内容的提问来源于stack exchange,提问作者opti420sk
相关产品推荐
相关产品推荐

