如何在Tensorflow中读取可变长度的1D输入?
我正在尝试将可变长度的1-D输入读入Tensorflow CNN。如何在Tensorflow中读取可变长度的1D输入?
我以前通过使用tf构建一个CSV文件(其中第一列是标签,其余列是输入值 - 展平光谱图数据全部填充/截断为相同长度)来实现读取固定长度输入。 TextLineReader()。
这一次我有一个目录充满了每个包含我想用作输入的数据行的文件(再次展开光谱图数据,但我不想强制它们具有相同的尺寸),并且行长度是不固定。我在尝试使用先前编译CSV的方法时遇到错误。我查看了tf.TextLineReader()的文档,它指定所有的CSV行必须是相同的形状,所以我卡住了!任何帮助将不胜感激,谢谢:)
我假设数据不变形,当你有一个更长或更短的样本权利?我的意思是说,如果你在1000像素的数组上训练你的网络,那么你的网络的内核大小就是[5,1]
。那[5,1]
内核需要在可变长度数据中看到与训练数据中相同的模式。如果您的数据被拉伸或缩小,则正确的解决方案是将数据内插到与训练数据相同的大小,以便形状/模式匹配。
假设您只需要可变长度输入,那么在理论上,您应该可以通过将批处理大小设置为1并更改数据的第一维来完成此操作。
所以,你输入的占位符会是什么样子:
X = tf.placeholder(dtype, shape=[1,None,1,1])
4形状参数是:1 =批量大小;无=第一维尺寸未知; 1 =未使用,因为它是一维数据集,1 =一个通道图像,同样未使用,但需要tf.conv2d
才能接收预期的4D图像。
这与配置tensorflow以支持变量批量大小并无太大区别。因此,您应该查看下面的链接并了解该流程。
get the size of a variable batch dimension
需要注意的是,因为你不能就能够构建缺失值矩阵的第二维,你不能使用批量规模超过1这里。我期望卷积运算能够与这个可变维度一起工作(尽管我实际上没有尝试过)。
解决这个问题的另一种方法是用0填充你的输入,这样它们都有一个共同的长度,但是这需要先在模型中进行训练。
如果您显示代码和/或数据样本,这可能会有所帮助。 – tagoma