Tensorflow parse_single_example возвращает весь набор данных - PullRequest
0 голосов
/ 06 декабря 2018

Я создаю базовый LinearClassifier в Tensorflow, но мне кажется, что моя функция ввода возвращает весь набор данных на первой итерации, а не только один пример и его метку.

Мой TFRecord имеет следующую структуру (полученную с print( tf.train.Example.FromString(example.SerializeToString())))

features {
  feature {
    key: "attackType"
    value {
      int64_list {
        value: 0
        value: 0
        ...
  feature {
    key: "dst_ip_addr"
    value {
       bytes_list {
        value: "OPENSTACK_NET"
        value: "EXT_SERVER"
        ...

Кажется, файл TFRecord хорошо отформатирован.Тем не менее, когда я пытаюсь проанализировать его с помощью следующего фрагмента:

def input_fn_train(repeat=10, batch_size=32):
    """
    Reads dataset from tfrecord, apply parser with map
    """
    # Import MNIST data
    dataset = tf.data.TFRecordDataset([processed_bucket+processed_key])

    # Map the parser over dataset, and batch results by up to batch_size
    dataset = dataset.map(_decode)
    dataset = dataset.repeat(repeat)
    dataset = dataset.batch(batch_size)
    return dataset

def _decode(serialized_ex):
    features={

        'src_ip_addr': tf.FixedLenFeature(src_ip_size,tf.string),
        'src_pt': tf.FixedLenFeature(src_pt_size,tf.int64),
        'dst_ip_addr': tf.FixedLenFeature(dst_ip_size,tf.string),
        'dst_pt': tf.FixedLenFeature(dst_pt_size,tf.int64),
        'proto': tf.FixedLenFeature(proto_size,tf.string),
        'packets': tf.FixedLenFeature(packets_size,tf.int64),
        'subnet': tf.FixedLenFeature(subnet_size,tf.int64),
        'attackType': tf.FixedLenFeature(attack_type_size,tf.int64)

    }
    parsed_features = tf.parse_single_example(serialized_ex, features)
    label = parsed_features.pop('attackType')
    return parsed_features, label


sess = tf.Session()

it = input_fn_train().make_one_shot_iterator()
print(sess.run(it.get_next()))  

Это показывает, что it.get_next() возвращает

({'dst_ip_addr': array ([[b 'OPENSTACK_NET ', b'EXT_SERVER', ...

Это неверно, так как он дает массив массива ! Результат должен быть

массив ([b'OPENSTACK_NET ', ...

Есть мысли? Я пытался изменить параметр формы FixedLenFeature, но безуспешно.

1 Ответ

0 голосов
/ 07 декабря 2018

Хорошо, похоже, команда dataset.batch создала это странное поведение.Убрал его, и теперь он отлично работает!

...