下面的python代码将选项卡间隔的值文件(.tsv)转换为TFRecord,希望这种方法可以加快加载数据的时间。这个任务的性能是否正确和最优,特别是在运行时间方面?
.tsv文件的格式如下,包括使其更具可读性的空格(SEMEVAL‘17训练数据集):float_value_from_0_to_5 \t string1 \t string2。所需的TFRecord条目应该将先前的值最优地存储为float rate、string sent1和string sent2,以便使用任意神经网络进行适当的实现,这些神经网络将嵌入从TFRecord加载的单词。
import tensorflow as tf
import nltk
import os
import csv
def tsv_to_tfrec(file_path):
with open(file_path, 'rb') as tsv, tf.python_io.TFRecordWriter(
os.path.splitext(file_path)[0] + ".tfrecords") as tfrec:
read_tsv = csv.reader(tsv, delimiter = '\t', quoting = csv.QUOTE_NONE)
for row in read_tsv:
if len(row) != 3:
print("\nERROR in # of indicies: ", len(row))
for i in range(len(row)):
print(i, " =", row[i])
else:
example = tf.train.Example(features = tf.train.Features(feature = {
"rate": tf.train.Feature(float_list=tf.train.FloatList(
value = [float(row[0])])),
"sent1": tf.train.Feature(bytes_list=tf.train.BytesList(
value = nltk.word_tokenize(row[1]))),
"sent2": tf.train.Feature(bytes_list=tf.train.BytesList(
value = nltk.word_tokenize(row[2])))
}))
tfrec.write(example.SerializeToString())发布于 2017-06-19 20:00:51
我不是TensorFlow方面的专家(尽管我已经开始掌握),但我注意到了以下几点:
TextLineReader从csv文件(如注意到这里 )中读取特性,这可能导致“解压”这些特性,并避免通过索引: rate、sent1、sent2 =tf.decode_csv(值)获取它们。TextLineReader不适用,您可以在for循环中解压缩: rate,sent1,sent2 in read_tsv:Example = tf.train.Example,然后使用Example代替tf.train.Example。还可以查看TensorFlow性能指南和表演技巧。
还有一些次要的PEP8代码风格冲突,比如关键字参数定义中=周围的额外空格--通过静态代码分析器(如flake8或pylint )运行代码。
https://codereview.stackexchange.com/questions/166194
复制相似问题