tensorflow conv1d& max_pool表示1-d数据

时间:2017-08-19 21:07:57

标签: machine-learning tensorflow conv-neural-network

我尝试使用tensorflow为1-d数据集上的应用程序创建CNN(convnet)。我的数据结构为浮动行,每个浮点数都有一个相关的单热目标(feature1,feature2 ... feature100; y_val)

我通过一个基本的多层感知器来运行它,但是想要利用“地方性”'在特征空间中,以及利用“缩减采样”功能。通过合并等功能空间

问题是我无法通过tensorflow 找到任何方法来做到这一点 -  conv1d或conv2d函数 - 传递错误

ValueError: Shape must be rank 4 but is rank 3 for 'conv1d_4/Conv2D' (op: 'Conv2D') with input shapes

当我尝试创建池化层时,情况会变得更糟。

我的问题是:有没有人在张量流中做过1-CN CNN?如果是这样,你能指点我一些代码示例,这样我可以得到更具体的理解吗?

谢谢!

2 个答案:

答案 0 :(得分:2)

您可以尝试tf.layers.max_pooling1d

它支持格式为(batch, length, channels)的3级输入。或者,您可以使用data_format参数指定自己的格式。

它支持tf.layers.conv1d的输出。

答案 1 :(得分:0)

问题在于错误表明输入的形状与tensorflow的卷积函数所需的形状不匹配。您可以使用tf.nn.conv1d进行一维卷积(您可以参考此处的文档https://www.tensorflow.org/api_docs/python/tf/nn/conv1d)。 tf.nn.conv1d()以批量的形式获取输入,因此即使您提供单个值,它也会预期批量维度。因此,您的输入数据应具有[a,b,c]形式,其中:

  • a是批量维度(如果您已将输入数据集划分为n个批次,则会告诉您可以在哪个批次中找到输入)
  • b是输入通道的数量(如果输入的是RGB,则可以给3,否则为1)
  • c是每个输入序列的长度

这个函数基本上做的是它将您的输入从[a,b,c]重新整形为[a,1,b,c]并将其输入到tf.nn.conv2d()函数。 您可以在尝试max_pool时遵循相同的原则 - 即使用tf.reshape()将输入重新整形为2-d,然后将其重新整形为1-d。