代码之家  ›  专栏  ›  技术社区  ›  Ondrej

TensorFlow-如何导入带有多个标签的数据

  •  2
  • Ondrej  · 技术社区  · 6 年前

    我试图在tensorflow中创建一个模型,通过预测一个数字向量来预测用户的理想项目。 我在spark中创建了一个数据集,并使用spark tensorflow连接器将其保存为tfrecord。 在数据集中,每行有数百个特征和20个标签。为了便于操作,我给每一列加了前缀“feature”或“label”。 现在我试图为tensorflow编写输入函数,但是我不知道如何解析数据。 到目前为止,我已经写了:

    def dataset_input_fn():
        path = ['data.tfrecord']
        dataset = tf.data.TFRecordDataset(path)
        def parser(record):
            example = tf.train.Example()
            example.ParseFromString(record)
    
            # TODO: no idea what to do here
            # features = parsed["features"]
            # label = parsed["label"]
    
            # return features, label
    
        dataset = dataset.map(parser)
        dataset = dataset.shuffle(buffer_size=10000)
        dataset = dataset.batch(32)
        dataset = dataset.repeat(100)
        iterator = dataset.make_one_shot_iterator()
    
        features, labels = iterator.get_next()
        return features, labels
    

    如何将示例拆分为要素集和标签集?我试着把这个例子分成两部分,但甚至没有办法访问它。我唯一能够访问它的方法是打印出示例,这给了我类似的东西。

    features {
    ...
      feature {
        key: "feature_wishlist_hour"
        value {
          int64_list {
            value: 0
          }
        }
      }
      feature {
        key: "label_emb_1"
        value {
          float_list {
            value: 0.4
          }
        }
      }
      feature {
        key: "label_emb_2"
        value {
          float_list {
            value: 0.8
          }
        }
      }
    ...
    }
    
    1 回复  |  直到 6 年前
        1
  •  2
  •   Vijay Mariappan    6 年前

    解析器函数应该类似于 example proto . 在您的情况下,它应该类似于:

    # example proto decode
    def parser(example_proto):
       keys_to_features = {'feature_wishlist_hour':tf.FixedLenFeature((), tf.int64),
                        'label_emb_1': tf.FixedLenFeature((), tf.float32),
                        'label_emb_2': tf.FixedLenFeature((), tf.float32)}
    
       parsed_features = tf.parse_single_example(example_proto, keys_to_features)
       return parsed_features['feature_wishlist_hour'], (parsed_features['label_emb_1'], parsed_features['label_emb_2'])
    

    编辑:从注释中可以看出,您将每个特性编码为键、值对,这是不对的。检查此答案: Numpy to TFrecords: Is there a more simple way to handle batch inputs from tfrecords? 如何用恰当的方式来写。