Tensorflow 连续文本序列到序列。为什么要分批?
Tensor flow continuous text sequence-to-sequence. Why batch?
我正在构建一个序列到序列的莎士比亚预测器并查看示例代码,它似乎以 50 个字符为一组进行批处理。我对此有点困惑。如果文本是连续的并且您正在处理 50 个字符的块,那么这肯定意味着您只会根据第 50 个字符之后的下一个预期字符计算损失,并且永远不会在下一个预期字符上训练模型其他 49 个字符。换句话说,如果你有 1000 个字符和 20 组 50 个字符,它只会被教导预测 20 个不同的字符。难道这些批次不应该在每个时期都随机移动一个偏移量,以便它学习如何预测其他字符吗?
这肯定不对吧?我的理解中缺少什么?
此外,批次是否始终按顺序处理?当状态被结转以表示之前的序列时,这当然很重要。
谢谢
雷
7 月 24 日更新:这是原始代码...
self.num_batches = int(self.tensor.size / (self.batch_size *
self.seq_length))
# When the data (tensor) is too small,
# let's give them a better error message
if self.num_batches == 0:
assert False, "Not enough data. Make seq_length and batch_size small."
self.tensor = self.tensor[:self.num_batches * self.batch_size * self.seq_length]
xdata = self.tensor
ydata = np.copy(self.tensor)
ydata[:-1] = xdata[1:]
ydata[-1] = xdata[0]
self.x_batches = np.split(xdata.reshape(self.batch_size, -1),
self.num_batches, 1)
self.y_batches = np.split(ydata.reshape(self.batch_size, -1),
self.num_batches, 1)
据我所知,它似乎没有重叠,但我是 Python 的新人,所以可能遗漏了一些东西。
如果您有 1000 chars
,并且如果您创建 50 chars
的 20 sets
,那将变成一个非重叠的 window,并且如您所说,它不起作用.相反,您考虑通过移动一个字符来重叠 window 并创建 (1000-50) sets
训练数据。这才是正确的做法。
我正在构建一个序列到序列的莎士比亚预测器并查看示例代码,它似乎以 50 个字符为一组进行批处理。我对此有点困惑。如果文本是连续的并且您正在处理 50 个字符的块,那么这肯定意味着您只会根据第 50 个字符之后的下一个预期字符计算损失,并且永远不会在下一个预期字符上训练模型其他 49 个字符。换句话说,如果你有 1000 个字符和 20 组 50 个字符,它只会被教导预测 20 个不同的字符。难道这些批次不应该在每个时期都随机移动一个偏移量,以便它学习如何预测其他字符吗?
这肯定不对吧?我的理解中缺少什么?
此外,批次是否始终按顺序处理?当状态被结转以表示之前的序列时,这当然很重要。
谢谢 雷
7 月 24 日更新:这是原始代码...
self.num_batches = int(self.tensor.size / (self.batch_size *
self.seq_length))
# When the data (tensor) is too small,
# let's give them a better error message
if self.num_batches == 0:
assert False, "Not enough data. Make seq_length and batch_size small."
self.tensor = self.tensor[:self.num_batches * self.batch_size * self.seq_length]
xdata = self.tensor
ydata = np.copy(self.tensor)
ydata[:-1] = xdata[1:]
ydata[-1] = xdata[0]
self.x_batches = np.split(xdata.reshape(self.batch_size, -1),
self.num_batches, 1)
self.y_batches = np.split(ydata.reshape(self.batch_size, -1),
self.num_batches, 1)
据我所知,它似乎没有重叠,但我是 Python 的新人,所以可能遗漏了一些东西。
如果您有 1000 chars
,并且如果您创建 50 chars
的 20 sets
,那将变成一个非重叠的 window,并且如您所说,它不起作用.相反,您考虑通过移动一个字符来重叠 window 并创建 (1000-50) sets
训练数据。这才是正确的做法。