如何以十为单位输入可变大小的输入

2024-09-29 19:30:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我想训练一个具有平面曲线的网络,我将其表示为具有形状(L,2)的numpy数组。 数字2代表x,y坐标,L是数据集中正在变化的点数。我把x,y看成两个不同的“通道”。在

我实现了一个函数next_batch(batch_size),该函数将下一批作为1D numpy数组提供,该数组的形状为(batch_size,),其中包含的元素是2D数组,形状为:(L,2)。这是我的曲线,正如前面提到的,元素之间的L是不同的。我不想限制曲线上的点数。在

我的问题:

我如何操作next_batch()的输出,以便能够使用类似于Tensorflow教程https://www.tensorflow.org/get_started/mnist/pros中出现的方案向网络提供输入曲线

也就是说,使用feed_dict机制。 在给定的turorial中,输入大小是固定的,在教程的代码行中:

train_step.run(feed_dict={x: batch[0], y_: batch[1], keep_prob: 0.5})

batch[0]有一个固定的形状:(50,784)(50=#个样本,784个像素)

我无法将输入转换为形状为(batch_size,L,2)的numpy数组 因为数组在每个维度上都应该有固定的大小。 那我能做什么呢?在

我已经定义了一个占位符(大小未知):

^{pr2}$

但我怎么才能喂得好呢?在

非常感谢


Tags: 函数网络numpy元素sizefeedbatch教程
3条回答

您可以使用占位符,并用[None,…,None]来初始化var。每个'None'都表示编译器在该维度上有输入源数据。例如,[None,None]表示可以输入任何行和列长度的矩阵。但是,您应该注意使用哪种NN。因为在处理CNN时,在卷积层和池层,必须确定“张量”的具体大小。在

您可以在TF中使用不同大小的输入。只需以与您列出的教程中相同的方式输入数据,但请确保将占位符中的更改尺寸定义为“无”。在

下面是一个简单的示例,它使用不同的形状填充占位符:

import tensorflow as tf
import numpy as np


array1 = np.arange(9).reshape((3,3))
array2 = np.arange(16).reshape((4,4))
array3 = np.arange(25).reshape((5,5))

model_input = tf.placeholder(dtype='float32', shape=[None, None])
sqrt_result = tf.sqrt(model_input)
with tf.Session() as sess:
    print sess.run(sqrt_result, feed_dict={model_input:array1})
    print sess.run(sqrt_result, feed_dict={model_input:array2})
    print sess.run(sqrt_result, feed_dict={model_input:array3})

你可能在寻找一个简短的答案:你不能没有填充或按长度分组样本。在

再详细说明一下:在tensorflow中,维度必须在整个批处理中固定,并且本机不支持锯齿数组。
维度可能是先验未知的(在这种情况下,您将占位符的维度设置为None),但在运行时仍然会被推断出来,因此 您使用占位符的解决方案:

x = tf.placeholder(tf.float32, [None, None, 2]) 

无法工作,因为它在语义上等同于说“我不知道批处理中曲线的常量长度,在运行时从数据中推断出来”。在

这并不是说您的模型一般不能接受不同维度的输入,如果您相应地构造它,但是每次调用sess.run()时提供给它的数据必须具有固定的维度。在

那么,您的选择如下:

  1. 沿着第二维度填充批次。
    假设有两条形状为(4, 2)(5, 2)的曲线,并且数据集中的最大曲线长度为6,可以使用np.pad,如下所示:

    ^{2美元
  2. 让您的next_batch()函数返回按长度分组的曲线批。在

这些是处理锯齿状阵列时的标准方法。在

如果您的任务允许,另一种可能是将所有点连接到一个形状为(None, 2)的张量中,并更改模型,使其对单个点进行操作,就像它们是批处理中的样本一样。如果将原始采样长度保存在单独的数组中,则可以通过正确切片来恢复模型输出。这是非常低效的,需要对你的问题进行各种各样的假设,但这是有可能的。在

干杯,祝你好运!在

相关问题 更多 >

    热门问题