Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tensorflow-TextSum模型:如何创建我自己的培训数据_Tensorflow_Textsum - Fatal编程技术网

Tensorflow-TextSum模型:如何创建我自己的培训数据

Tensorflow-TextSum模型:如何创建我自己的培训数据,tensorflow,textsum,Tensorflow,Textsum,我正在尝试为TextSum模型创建自己的训练数据。据我所知,我需要将我的文章和摘要放在一个二进制文件中(在TFRecords中)。但是,我无法从原始文本文件创建自己的训练数据。我不太清楚格式,所以我尝试使用以下代码创建一个非常简单的二进制文件: files = os.listdir(path) writer = tf.python_io.TFRecordWriter("test_data") for i, file in enumerate(files): content = open(

我正在尝试为TextSum模型创建自己的训练数据。据我所知,我需要将我的文章和摘要放在一个二进制文件中(在TFRecords中)。但是,我无法从原始文本文件创建自己的训练数据。我不太清楚格式,所以我尝试使用以下代码创建一个非常简单的二进制文件:

files = os.listdir(path)
writer = tf.python_io.TFRecordWriter("test_data")
for i, file in enumerate(files):
    content = open(os.path.join(path, file), "r").read()
    example = tf.train.Example(
        features = tf.train.Features(
            feature = {
                'content': tf.train.Feature(bytes_list=tf.train.BytesList(value=[content]))
            }
        )
    )

    serialized = example.SerializeToString()
    writer.write(serialized)
我尝试使用下面的代码来读取这个test_数据文件的值

reader = open("test_data", 'rb')
len_bytes = reader.read(8)
str_len = struct.unpack('q', len_bytes)[0]
example_str = struct.unpack('%ds' % str_len, reader.read(str_len))[0]
example_pb2.Example.FromString(example_str)
但我总是会遇到以下错误:

  File "dailymail_corpus_to_tfrecords.py", line 34, in check_file
    example_pb2.Example.FromString(example_str)
  File "/home/s1510032/anaconda2/lib/python2.7/site-packages/google/protobuf/internal/python_message.py", line 770, in FromString
    message.MergeFromString(s)
  File "/home/s1510032/anaconda2/lib/python2.7/site-packages/google/protobuf/internal/python_message.py", line 1091, in MergeFromString
    if self._InternalParse(serialized, 0, length) != length:
  File "/home/s1510032/anaconda2/lib/python2.7/site-packages/google/protobuf/internal/python_message.py", line 1117, in InternalParse
    new_pos = local_SkipField(buffer, new_pos, end, tag_bytes)
  File "/home/s1510032/anaconda2/lib/python2.7/site-packages/google/protobuf/internal/decoder.py", line 850, in SkipField
    return WIRETYPE_TO_SKIPPER[wire_type](buffer, pos, end)
  File "/home/s1510032/anaconda2/lib/python2.7/site-packages/google/protobuf/internal/decoder.py", line 791, in _SkipLengthDelimited
    raise _DecodeError('Truncated message.')
google.protobuf.message.DecodeError: Truncated message.

我不知道怎么了。如果您对解决此问题有任何建议,请告诉我。

适用于有相同问题的人。我必须查看TensorFlow的源代码,看看他们是如何使用TFRecordWriter写出数据的。我意识到他们实际上写了8个字节的长度,4个字节的CRC校验,这意味着前12个字节是报头。因为在TextSum代码中,示例二进制文件似乎只有8字节的头,这就是为什么他们使用reader.read(8)获取数据的长度,并将其余部分作为特征读取

我的工作解决方案是:

reader = open("test_data", 'rb')
len_bytes = reader.read(8)
reader.read(4) #ignore next 4 bytes
str_len = struct.unpack('q', len_bytes)[0]
example_str = struct.unpack('%ds' % str_len, reader.read(str_len))[0]
example_pb2.Example.FromString(example_str)

对于那些有同样问题的人。我必须查看TensorFlow的源代码,看看他们是如何使用TFRecordWriter写出数据的。我意识到他们实际上写了8个字节的长度,4个字节的CRC校验,这意味着前12个字节是报头。因为在TextSum代码中,示例二进制文件似乎只有8字节的头,这就是为什么他们使用reader.read(8)获取数据的长度,并将其余部分作为特征读取

我的工作解决方案是:

reader = open("test_data", 'rb')
len_bytes = reader.read(8)
reader.read(4) #ignore next 4 bytes
str_len = struct.unpack('q', len_bytes)[0]
example_str = struct.unpack('%ds' % str_len, reader.read(str_len))[0]
example_pb2.Example.FromString(example_str)

我希望您的textsum目录中有data\u convert\u example.py。如果没有,您可以在以下帖子中找到:

使用python文件将给定的二进制数据(文件名:data directory中的数据)转换为文本格式。
python data\u convert\u example.py--命令binary\u to\u text--in\u file../data/data--out\u file../data/result\u text

您可以在结果文本格式中看到应该给出的实际文本格式


以该格式准备数据,并使用相同的python脚本将文本转换为二进制,并将结果用于培训/测试/评估。

我希望您的textsum目录中有data\u convert\u example.py。如果没有,您可以在以下文章中找到它:

使用python文件将给定的二进制数据(文件名:data directory中的数据)转换为文本格式。
python data\u convert\u example.py--命令binary\u to\u text--in\u file../data/data--out\u file../data/result\u text

您可以在结果文本格式中看到应该给出的实际文本格式


以该格式准备数据,并使用相同的python脚本将文本转换为二进制,并将结果用于培训/测试/评估。

您是在什么操作系统上运行的?在OSX 11上,我甚至在到达这里之前就遇到了问题。我必须修改
培训
方法,以便主管可以等待线程停止p、 我正在使用运行OSX。我也尝试在Unix上运行它,它运行得很好。但是我的解决方案中有一个小错误,我们应该使用
reader.read(4)
跳过
data.py
中的4个字节,而不是使用
seek(12)
。我要更新我的帖子。你是在什么操作系统上运行的?在OSX 11上,我甚至还没到这里就遇到了问题。我不得不修改
Train
方法,以便主管等待线程停止。我正在使用OSX。我也尝试在Unix上运行它,它运行得很好。但在这方面有一个小错误我的解决方案是,我们应该使用
reader.read(4)
跳过
data.py
中的4个字节,而不是使用
seek(12)
。我要更新我的帖子