首页 > 解决方案 > 具有掩蔽的深度卷积网络,正确的输入形状

问题描述

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

我的意见

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, 750, 3) vs (samples, 750, 3, 1)

正如预期的那样,conv2d 层不接受掩码输入,不扩展暗淡,因为它是 3 dim ,而不是四个,

[None,750, 3]

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

我认为 in_height 应该设置为一个 <right?> 因为它是 1 行,

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

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

这有什么意义吗?有没有人有任何暗示?

提前致谢。

标签: pythontensorflowconv-neural-networkmaskmasking

解决方案


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

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

工作示例代码

import tensorflow as tf
input_shape = (4, 28, 28, 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)

推荐阅读