gpt4 book ai didi

python - 如何在tensorflow中处理大量数据?

转载 作者:太空狗 更新时间:2023-10-29 20:27:01 24 4
gpt4 key购买 nike

对于我的项目,我有大量数据,大约 60GB 分布在 npy 文件中,每个文件大约有 1GB,每个文件包含大约 750k 条记录和标签。

每条记录是 345 个 float32,标签是 5 个 float32。

我也阅读了 tensorflow 数据集文档和队列/线程文档,但我无法弄清楚如何最好地处理训练输入以及如何保存模型和权重以供将来预测。

我的模型非常简单,看起来像这样:

x = tf.placeholder(tf.float32, [None, 345], name='x')
y = tf.placeholder(tf.float32, [None, 5], name='y')
wi, bi = weight_and_bias(345, 2048)
hidden_fc = tf.nn.sigmoid(tf.matmul(x, wi) + bi)
wo, bo = weight_and_bias(2048, 5)
out_fc = tf.nn.sigmoid(tf.matmul(hidden_fc, wo) + bo)
loss = tf.reduce_mean(tf.squared_difference(y, out_fc))
train_op = tf.train.AdamOptimizer().minimize(loss)

我训练神经网络的方式是以随机顺序一次读取一个文件,然后使用打乱的 numpy 数组为每个文件编制索引并手动创建每个批处理以提供 train_op 使用提要字典。从我读到的所有内容来看,这是非常低效的,我应该以某种方式将其替换为数据集或队列和线程,但正如我所说,文档没有帮助。

那么,在 tensorflow 中处理大量数据的最佳方式是什么?

此外,作为引用,我的数据在 2 个操作步骤中保存到一个 numpy 文件中:

with open('datafile1.npy', 'wb') as fp:
np.save(data, fp)
np.save(labels, fp)

最佳答案

npy 文件的实用程序确实在内存中分配了整个数组。我建议您将所有 numpy 数组转换为 TFRecords format并在训练中使用这些文件。这是在 tensorflow 中读取大型数据集的最有效方法之一。

转换为TFRecords

def array_to_tfrecords(X, y, output_file):
feature = {
'X': tf.train.Feature(float_list=tf.train.FloatList(value=X.flatten())),
'y': tf.train.Feature(float_list=tf.train.FloatList(value=y.flatten()))
}
example = tf.train.Example(features=tf.train.Features(feature=feature))
serialized = example.SerializeToString()

writer = tf.python_io.TFRecordWriter(output_file)
writer.write(serialized)
writer.close()

处理图像的完整示例可以是 found here .

读取TFRecordDataset

def parse_proto(example_proto):
features = {
'X': tf.FixedLenFeature((345,), tf.float32),
'y': tf.FixedLenFeature((5,), tf.float32),
}
parsed_features = tf.parse_single_example(example_proto, features)
return parsed_features['X'], parsed_features['y']

def read_tfrecords(file_names=("file1.tfrecord", "file2.tfrecord", "file3.tfrecord"),
buffer_size=10000,
batch_size=100):
dataset = tf.contrib.data.TFRecordDataset(file_names)
dataset = dataset.map(parse_proto)
dataset = dataset.shuffle(buffer_size)
dataset = dataset.repeat()
dataset = dataset.batch(batch_size)
return tf.contrib.data.Iterator.from_structure(dataset.output_types, dataset.output_shapes)

资料手册可以found here .

关于python - 如何在tensorflow中处理大量数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46820500/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com