преобразование csv-файла в набор данных TFRecord

#python #csv #tfrecord

#python #csv #tfrecord

Вопрос:

У меня есть файл csv, в котором есть только один столбец без заголовка. В каждой строке есть строка. Некоторые строки также пусты.

 This is string1
This is string2
This is string3
(empty row)
This is string4
(empty row)
This is string5
 

Как я могу преобразовать этот csv-файл в набор данных TFRecord, чтобы позже использовать его для целей машинного обучения?

Ответ №1:

Данные:

 df=pd.DataFrame({'lab':['This is string1',
'This is string2',
'This is string3',
np.nan,
'This is string4',
np.nan,
'This is string5']})
 

Я считаю, что вы можете использовать это для работы.

    rec = df.to_records(index=False)
   print(repr(rec))

   s = rec.tobytes()
 

затем вы используете функцию:

 def _bytes_feature(value):
"""Returns a bytes_list from a string / byte."""
if isinstance(value, type(tf.constant(0))):
value = value.numpy() # BytesList won't unpack a string from an EagerTensor.
return tf.train.Feature(bytes_list=tf.train.BytesList(value=[value]))
 

Эта функция взята из TFRecord e tf.train.Example.

После этого:

 print(_bytes_feature(s))
 

Вывод:

список байтов { значение: «0t37223t1770000px37223t17700000y37223t1770000220323*@u1770000260~37223t1770000 220 323 *@u1770000360{372 023t17700 00» }

Затем:

 a=_bytes_feature(s)
a=a.SerializeToString()
 

Фактически, мы можем сериализовать любую строку в двоичную строку, используя метод SerializeToString() .
Вывод:

b’n:n80txfax13tx7fx00x00pxxfax13tx7fx00x000yxfax13tx7fx00x00x90xd3*@ux7fx00x00xb0~xfax13tx7fx00x00x90xd3*@ux7fx00x00xf0{xfax13tx7fx00x00 ‘ 1

Комментарии:

1. Как я могу сохранить набор данных и позже загрузить его в другую программу?

2. Я уверен, что вы можете использовать filename = 'test.tfrecord' writer = tf.data.experimental.TFRecordWriter(filename) writer.write(serialized_features_dataset) . Этот пример может быть основан на предыдущей ссылке. Загрузить файл можно filenames = [filename] raw_dataset = tf.data.TFRecordDataset(filenames) raw_dataset также по предыдущей ссылке.