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