#python #tensorflow #tensorflow-datasets #tfrecord #tfx
Вопрос:
Я пытаюсь реализовать компонент выбора функций, имея в виду следующий план:
Осуществление
- Компонент принимает и
InputArtifact[Example]
в качестве входных данных - Поскольку данные хранятся в виде записей TF в URI входного артефакта, я преобразую их в совместимые словари numpy и использую sklearn для составления списка выбранных функций
- Я удаляю необходимые функции из входного примера напрямую, чтобы создать его
OutputArtifact[Example]
(который имеет ту же структуру, но меньше столбцов).
Я закончил с первым и вторым пунктом, но не могу понять, как удалить выбранные столбцы непосредственно в самом наборе данных TFRecord (который я использую tf.data.TFRecordDataset(train_uri, compression_type='GZIP')
).
Комментарии:
1. Не могли бы вы, пожалуйста, обратиться к этому блогу . Спасибо
Ответ №1:
Мне потребовалось некоторое время, чтобы понять это (с помощью блога, связанного с поддержкой TensorFlow в комментариях), но вот обходной путь!
split_dataset = tf.data.TFRecordDataset("path_to_original_dataset.gzip", compression_type='GZIP')
with tf.io.TFRecordWriter(path = "path_to_new_TFRecord.gzip", options="GZIP") as writer:
for split_record in split_dataset.as_numpy_iterator():
example = tf.train.Example()
example.ParseFromString(split_record)
updated_example = update_example(selected_features, example)
writer.write(updated_example.SerializeToString())
Вот updated_example
пользовательская функция, которую я использовал, которая берет проанализированный пример, обрабатывает его и возвращает обработанный пример!
# update example with selected features
def update_example(selected_features, orig_example):
result = {}
for key, feature in orig_example.features.feature.items():
if key in selected_features:
result[key] = orig_example.features.feature[key]
new_example = tf.train.Example(features=tf.train.Features(feature=result))
return new_example
Вместо того, чтобы удалить столбец (так как я не смог найти способ сделать это), я просто создал новый пример функции за функцией и вернул его!