带掩码的深度卷积网络,正确的输入形状

问题描述

带掩码的卷积网络的最佳输入形状是什么,

我的输入

X = (nO.samples,750,3)

3 代表 xyz,因为我的数据是空间中连续点的链,每个点都有 3 个特征,

y = (nO.samples,750)

每个样本的长度为 750,即后填充值,我使用了零填充,因此我想掩盖这些零,因为它们带有很多噪音(我认为) 还没有:

input_shape = ( 748,3)
model = Sequential(
[
    #Input(shape = input_shape ),Masking(mask_value= 0.,input_shape=input_shape),Conv2D(filters=16,kernel_size=(3,3),padding='same',activation = tf.nn.relu),

然后正如预期的那样,我得到了错误

ValueError: Input 0 of layer conv2d_24 is incompatible with the layer: : expected 
             min_ndim=4,found ndim=3. Full shape received: [None,748,3]

我可以在屏蔽后扩展尺寸吗?如果是,那么扩展哪一个

会是X_train = np.expand_dims(X_train,1)

或者X_train = np.expand_dims(X_train,-1)

导致(samples,1,3) vs (samples,3,1)

正如预期的那样,conv2d 层不会接受掩码输入,不会扩大暗淡,因为它是 3 暗,而不是 4,

[None,3]

对于 2dconv 输入,它是 [batch,in_height,in_width,in_channels]

我认为 in_height 应该设置为 1 因为它是 1 行,

in_width 为 750,在通道中 => 3?? 因为范围 (750) 中的每个点都有 3 个特征存储在一个数组中。

我没有尝试让网络知道它本身就是噪音,因为我认为训练需要很长时间。

有意义吗? 有人有任何提示吗?

提前致谢。

解决方法

如错误所述,Conv2D 需要 4D batch_shape + (channels,rows,cols) 的输入

输入形状应该是这样的(4,28,3)

工作示例代码

import tensorflow as tf
input_shape = (4,3)
x = tf.random.normal(input_shape)
model = tf.keras.models.Sequential()
model.add(tf.keras.layers.Masking(mask_value=0.,input_shape=input_shape))
model.add(tf.keras.layers.Conv2D(2,3,activation='relu',input_shape=input_shape))

output = model(x)