使用tfrecordwriter遍历功能时,将numpy写入tfrecord很慢

时间:2019-05-15 17:17:15

标签: python tensorflow tensorflow-datasets tfrecord

我有一个要写入tfrecord文件的numpy数组。 input Xlabel y的数组尺寸均为[200,46,72,72],用于训练模型,我想读取tfrecord文件以获取[72,72]的切片,以用于输入和标签数据。

我尝试应用以下stackoverflow answer

问题在于此方法实际上,可能是由于在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

0 个答案:

没有答案