Я пытаюсь написать файл csv (все столбцы - float) в файл tfrecords, а затем читать их обратно. Все примеры, которые я видел, упаковывают столбцы csv, а затем напрямую передают его в sess.run(), но я не могу понять, как вместо столбцов функций и столбца ярлыков вместо tfrecord. Как я могу это сделать?
Tensorflow создает файл tfrecords из csv
Ответ 1
Вам понадобится отдельный script, чтобы преобразовать ваш файл csv в TFRecords.
Представьте, что у вас есть CSV со следующим заголовком:
feature_1, feature_2, ..., feature_n, label
Вам нужно прочитать свой CSV с чем-то вроде pandas
, построить tf.train.Example
вручную, а затем записать его в файл с помощью TFRecordWriter
csv = pandas.read_csv("your.csv").values
with tf.python_io.TFRecordWriter("csv.tfrecords") as writer:
for row in csv:
features, label = row[:-1], row[-1]
example = tf.train.Example()
example.features.feature["features"].float_list.value.extend(features)
example.features.feature["label"].int64_list.value.append(label)
writer.write(example.SerializeToString())
Ответ 2
def convert_to():
filename = os.path.join(wdir, 'ml-100k' + '.tfrecords')
print('Writing', filename)
with tf.python_io.TFRecordWriter(filename) as writer:
with open("/Users/shishir/Documents/botconnect_Playground/tfRecords/ml-100k.train.rating", "r") as f:
line = f.readline()
while line != None and line != "":
arr = line.split("\t")
u, i, l = int(arr[0]), int(arr[1]), int(arr[2])
u_arr = np.reshape(u,[1]).astype('int64')
i_arr = np.reshape(i,[1]).astype('int64')
l_arr = np.reshape(l,[1]).astype('int64')
example = tf.train.Example()
example.features.feature["user"].int64_list.value.extend(u_arr)
example.features.feature["item"].int64_list.value.extend(i_arr)
example.features.feature["label"].int64_list.value.append(int(l_arr))
writer.write(example.SerializeToString())
line = f.readline()
Итак, это мое решение, и оно работает! Надеюсь, что это поможет
Приветствия.
Ответ 3
Вышеупомянутое решение не сработало в моем случае. Другой способ прочитать файл csv и создать tfRecord показан ниже:
Имена столбцов набора функций: Sl.No:, время, высота, ширина, среднее значение, стандартное отклонение, дисперсия, неоднородность, PixelCount, contourCount, Class.
Пример функций, которые мы получаем из dataset.csv:
Особенности = [5, 'D', 268, 497, 13,706, 863,4939, 29,385, 0,0427, 39675, 10]
ярлык: средний
def create_tf_example(features, label):
tf_example = tf.train.Example(features=tf.train.Features(feature={
'Time': tf.train.Feature(bytes_list=tf.train.BytesList(value=[features[1].encode('utf-8')])),
'Height':tf.train.Feature(int64_list=tf.train.Int64List(value=[features[2]])),
'Width':tf.train.Feature(int64_list=tf.train.Int64List(value=[features[3]])),
'Mean':tf.train.Feature(float_list=tf.train.FloatList(value=[features[4]])),
'Std':tf.train.Feature(float_list=tf.train.FloatList(value=[features[5]])),
'Variance':tf.train.Feature(float_list=tf.train.FloatList(value=[features[6]])),
'Non-homogeneity':tf.train.Feature(float_list=tf.train.FloatList(value=[features[7]])),
'PixelCount':tf.train.Feature(int64_list=tf.train.Int64List(value=[features[8]])),
'contourCount':tf.train.Feature(int64_list=tf.train.Int64List(value=[features[9]])),
'Class':tf.train.Feature(bytes_list=tf.train.BytesList(value=[label.encode('utf-8')])),
}))
return tf_example
csv = pd.read_csv("dataset.csv").values
with tf.python_io.TFRecordWriter("dataset.tfrecords") as writer:
for row in csv:
features, label = row[:-1], row[-1]
print features, label
example = create_tf_example(features, label)
writer.write(example.SerializeToString())
writer.close()
Для получения более подробной информации нажмите здесь. Это работает для меня, надеюсь, это работает.