擅长:python、mysql、java
<p>你可能在寻找一个简短的答案:你不能没有填充或按长度分组样本。在</p>
<p>再详细说明一下:在tensorflow中,维度必须在整个批处理中固定,并且本机不支持锯齿数组。<br/>
维度可能是先验未知的(在这种情况下,您将占位符的维度设置为<code>None</code>),但在运行时仍然会被推断出来,因此
您使用占位符的解决方案:</p>
<pre><code>x = tf.placeholder(tf.float32, [None, None, 2])
</code></pre>
<p>无法工作,因为它在语义上等同于说“我不知道批处理中曲线的<strong>常量</strong>长度,在运行时从数据中推断出来”。在</p>
<p>这并不是说您的模型一般不能接受不同维度的输入,如果您相应地构造它,但是每次调用<code>sess.run()</code>时提供给它的数据必须具有固定的维度。在</p>
<p>那么,您的选择如下:</p>
<ol>
<li><p>沿着第二维度填充批次。<br/>
假设有两条形状为<code>(4, 2)</code>和<code>(5, 2)</code>的曲线,并且数据集中的最大曲线长度为6,可以使用<code>np.pad</code>,如下所示:</p>
^{2美元</li>
<li>让您的<code>next_batch()</code>函数返回按长度分组的曲线批。在</li>
</ol>
<p>这些是处理锯齿状阵列时的标准方法。在</p>
<p>如果您的任务允许,另一种可能是将所有点连接到一个形状为<code>(None, 2)</code>的张量中,并更改模型,使其对单个点进行操作,就像它们是批处理中的样本一样。如果将原始采样长度保存在单独的数组中,则可以通过正确切片来恢复模型输出。这是非常低效的,需要对你的问题进行各种各样的假设,但这是有可能的。在</p>
<p>干杯,祝你好运!在</p>