У меня есть пустой массив, который я хочу записать в файл tfrecord. Размеры массива для input X
и label y
равны [200,46,72,72]
для обучения моей модели. Я хочу прочитать файл tfrecord, чтобы получить срезы [72,72]
как для входных данных, так и для данных меток.
Я пытался применить следующий stackoverflow ответ
Проблема в том, что этот метод действительно медленный , вероятно, из-за количества элементов, зацикленных на 200*46
.
Когда я пишу весь numpy array
как элемент bytes
вместо floatlist
, у меня не возникает этой проблемы, но я не понимаю, как получить [72,72]
срезов для каждого пакета.
def npy_to_tfrecords(X,y):
# write records to a tfrecords file
output_file = 'E:\\Documents\\Datasets\\tfrecordtest\\test.tfrecord'
writer = tf.python_io.TFRecordWriter(output_file)
# Loop through all the features you want to write
for i in range(X.shape[0]) :
for j in range(X.shape[1]) :
#let say X is of np.array([[...][...]])
#let say y is of np.array[[0/1]]
print(f"{i},{j}")
# Feature contains a map of string to feature proto objects
feature = {}
feature['X'] = tf.train.Feature(float_list=tf.train.FloatList(value=X[i,j:,:].flatten()))
feature['y'] = tf.train.Feature(float_list=tf.train.FloatList(value=y[i,j:,:].flatten()))
# Construct the Example proto object
example = tf.train.Example(features=tf.train.Features(feature= feature) )
# Serialize the example to a string
serialized = example.SerializeToString()
# write the serialized objec to the disk
writer.write(serialized)
writer.close()
для чтения я использую следующий код примерно
dataset = tf.data.TFRecordDataset(filenames)
dataset = dataset.map(_parse_function, num_parallel_calls=6)
dataset.apply(tf.contrib.data.shuffle_and_repeat(SHUFFLE_BUFFER))
dataset = dataset.batch(BATCH_SIZE)
iterator = dataset.make_one_shot_iterator()
input_data, label_data = iterator.get_next()
когда я сохраняю numpy arrays
как bytes
, parse_function
возвращает
весь массив и я не могу понять, как написать
parse_function
, который возвращает ломтики.
Резюме:
- сохранить 2
numpy arrays
до tfrecord
- прочитайте
tfrecord
файл и получите slices
сохраненного numpy arrays
в пакетах, использованных для модели