#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
также по предыдущей ссылке.