Я создаю базовый 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, но безуспешно.