我尝试使用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?如果是这样,你能指点我一些代码示例,这样我可以得到更具体的理解吗?
谢谢!
答案 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,b,c]重新整形为[a,1,b,c]并将其输入到tf.nn.conv2d()
函数。
您可以在尝试max_pool时遵循相同的原则 - 即使用tf.reshape()
将输入重新整形为2-d,然后将其重新整形为1-d。