Tensorflow 填充张量的效果是什么?

Tensorflow 填充张量的效果是什么?,tensorflow,machine-learning,keras,tensor,Tensorflow,Machine Learning,Keras,Tensor,我正在使用Keras解决一个问题,该问题向我提出了一些问题: 我的X数据都是形状(num\u samples,8192,8),但我的Y数据是形状(num\u samples,4),其中4是一个热编码向量 X和Y数据都将通过LSTM层运行,但层拒绝Y数据,因为它与X数据的形状不匹配 是否用0填充Y数据,使其与X数据的维度匹配?那会有什么样的影响?有更好的解决办法吗 为澄清而编辑: 根据要求,以下是更多信息: Y数据表示通过模型传递X数据的预期输出。这是我第一次使用LSTMs,所以我没有考虑体系结构

我正在使用Keras解决一个问题,该问题向我提出了一些问题:

我的X数据都是形状(
num\u samples
,8192,8),但我的Y数据是形状(
num\u samples
,4),其中
4
是一个热编码向量


X和Y数据都将通过LSTM层运行,但层拒绝Y数据,因为它与X数据的形状不匹配

是否用0填充Y数据,使其与X数据的维度匹配?那会有什么样的影响?有更好的解决办法吗

为澄清而编辑: 根据要求,以下是更多信息:

Y数据表示通过模型传递X数据的预期输出。这是我第一次使用LSTMs,所以我没有考虑体系结构,但我想使用一种能够很好地将长(8192长度)的单词序列分类为几个类别之一的体系结构。此外,当通过LSTM输入数据时,我拥有的数据集非常大,因此我目前正在使用批处理训练

正在使用的技术:

  • Keras(Tensorflow后端)

TL;DR在所有维度中用零填充一个张量以匹配另一个张量的形状是一个坏主意吗?有什么更好的方法吗?

首先,让我们确保您的表达是您所认为的;LSTM(或任何循环层)的输入必须具有维度:(时间步,形状),即如果有1000个训练样本,每个样本由100个时间步组成,每个时间步有10个值,则输入形状将为(100,10,)。因此,根据您的问题,我假设X集中的每个输入样本都有8192个步骤,每个步骤有8个值。伟大的单个LSTM层可以在这些层上迭代并生成完全没有问题的4维表示,就像这样:

myLongInput=Input(形状=(8192,8,))
myRecurrentFunction=LSTM(4)
myShortOutput=myRecurrentFunction(myLongInput)
myShortOutput.shape
张量形状([尺寸(无),尺寸(4)])
我假设您的问题源于尝试在第一个LSTM的基础上应用另一个LSTM;下一个LSTM需要一个具有时间维度的张量,但您的输出没有时间维度。如果是这种情况,则需要让第一个LSTM在每个时间步也输出中间表示,如下所示:

myNewRecurrentFunction=LSTM(4,返回序列=True)
myLongOutput=myNewRecurrentFunction(myLongInput)
myLongOutput.shape
张量形状([尺寸(无)、尺寸(无)、尺寸(4)])
如您所见,新输出现在是一个三阶张量,第二维度现在是(尚未指定的)时间步长。您可以重复此过程,直到最终输出,通常不需要中间表示,而只需要最后一个表示。(旁注:如果输出为一种热格式,请确保将最后一层的激活设置为softmax)

关于您最初的问题,零填充对您的网络几乎没有负面影响。网络一开始会有点紧张,试图弄清楚你刚刚抛出的附加值的概念,但很快就会发现它们毫无意义。这需要更大的参数空间(因此需要更多的时间和内存复杂性),但在大多数情况下并不影响预测能力


我希望这会有所帮助。

“将通过LSTM层运行”这些是相同的LSTM层,还是在通过LSTM层后Y是您的预期输出?尝试提供更多关于您的网络架构和/或培训目标的信息。更新@KonstantinosKokos!嘿,在交叉验证中被问到了我认为这两个问题是无关的。@JakubBartczuk谢谢你的链接!我不知道在一定长度的标准化训练中会产生偏见。这是关于每个样本的长度,还是样本的数量?此外,我所有的X-data样本在形状上都是相同的,Y-data(X-data通过后应该是模型的输出)的形状与X-data不同。这非常有用!然而,这似乎只解决了提供的X-data形状,这正是我目前遇到的问题。我该如何处理我的Y数据形状与X数据形状不匹配的事实,因为X数据是形状(
num_samples
,8192,8),而我的Y数据是形状(
num_samples
,4)?对不起,我不太清楚问题是什么;上面的玩具网络现在输出(无,4)维张量,这是你的Y格式。您是否收到一些错误信息,或者您的直觉不满意?:)我收到一条错误消息。我认为你很好地解释了模型中发生的事情,这非常有意义。我来测试一下你上面说的话,然后再报告!非常感谢,我的荣幸!如果您遇到任何问题,请随时询问您的答案!虽然我的模型表现不佳,但它训练正确!非常感谢您抽出时间。