2017-10-18 127 views
0

我tensorflow应用程序崩溃与此错误:ADDN必须具有相同的大小和形状与tf.estimator.LinearClassifier

Inputs to operation linear/linear_model/weighted_sum_no_bias of type AddN must have the same size and shape: Input 0: [3,1] != input 1: [9,1]

感激,如果任何人都可以点我的根本原因。

我有一个tfrecord文件有如下记载:

features { 
     feature { 
     key: "_label" 
     value { 
      float_list { 
      value: 1.0 
      } 
     } 
     } 
     feature { 
     key: "category" 
     value { 
      bytes_list { 
      value: "14" 
      value: "25" 
      value: "29" 
      } 
     } 
     } 
     feature { 
     key: "demo" 
     value { 
      bytes_list { 
      value: "gender:male" 
      value: "first_name:baerwulf52" 
      value: "country:us" 
      value: "city:manlius" 
      value: "region:us_ny" 
      value: "language:en" 
      value: "signup_hour_of_day:1" 
      value: "signup_day_of_week:3" 
      value: "signup_month_of_year:1" 
      } 
     } 
     } 
} 

我的规格是和跟随

{ 
    'category': VarLenFeature(dtype=tf.string), 
    '_label': FixedLenFeature(shape=(1,), dtype=tf.float32, default_value=None), 
    'demo': VarLenFeature(dtype=tf.string) 
} 

而且我tensorflow代码:

category = tf.feature_column.categorical_column_with_vocabulary_list(key="category", vocabulary_list=["null", "14", "25", "29"], 

demo = tf.feature_column.categorical_column_with_vocabulary_list(key="demo", vocabulary_list=["gender:male", "first_name:baerwulf52", 
                      "country:us", "city:manlius", "region:us_ny", 
                      "language:en", "signup_hour_of_day:1", 
                      "signup_day_of_week:3", 
                      "signup_month_of_year:1"]) 

feature_columns = [category, demo] 

def get_input_fn(dataset): 
    def _fn(): 
     iterator = dataset.make_one_shot_iterator() 
     next_elem = iterator.get_next() 
     ex = tf.parse_single_example(next_elem, features=spec) 
     label = ex.pop('_label') 
     return ex, label 

    return _fn 


model = tf.estimator.LinearClassifier(
    feature_columns=feature_columns, 
    model_dir=fp("model") 
) 

model.train(input_fn=get_input_fn(train_dataset), steps=100) 

回答

0

这是因为你特征category具有尺寸= 3(3个值),但是特征demon在您的tfrecord中有9个维度(9个值)。使用LinearClassifier时,您需要确保所有功能具有相同的尺寸。

+0

我这工作看到。我认为tensorflow会自动将它们分成27个记录。谢谢。 – user8797249

+0

@明星有什么特别的理由限制?这是否也意味着LinearClassifiers不支持[indicator_columns](https://www.tensorflow.org/api_docs/python/tf/feature_column/indicator_column)或[weighted_categorical_columns](https://www.tensorflow.org/api_docs/python/tf/feature_column/weighted_categorical_column)? – aarkay

1

这个问题似乎是因为LinearClassifier.train方法需要投入的批次和代码调用:

ex = tf.parse_single_example(next_elem, features=spec) 

如果你改变了input_fn到

iterator = dataset.batch(2).make_one_shot_iterator() 
next_batch = iterator.get_next() 
ex = tf.parse_example(next_batch, features=spec) 
+0

这是超级有用!谢谢你的提示! – user8797249

相关问题