keras conv1d 层权重计数未按预期生成

keras conv1d layer weight count is not produced as expected

我正在尝试将 python 中训练有素的手语分类解决方案转换为 C 语言 headers,以便我可以部署在 M4-cortex CPU 板上。 在 Python,我能够构建模型并对其进行训练,我可以看到它的预测准确率为 90%。 但是我发现卷积层

中的权重数量 used/generated 存在问题
**Conv_1d configuration**


print(x_train.shape)
model = Sequential()
model.add(Conv1D(32,kernel_size=5, padding='same', 
input_shape=x_train.shape[1:], name='conv1d_1'))
print(model.layers[0].kernel.numpy().shape)

**output:**
(1742, 45, 45)
**(5, 45, 32)**
    
    
According to above configuration
input dimension = 45x45x1 pixels of image(gray scale)
input channels = 1
output dimension = 45x45x32 
output channesls = 32
kernel size = 5

As per the concept(w.r.t https://cs231n.github.io/convolutional-networks/) 
    
number of weights = (input_channels) x (kernel_size) x (kernel_size) x (output_channels)=1x5x5x32=800

But keras model produces weights array of size = [5][45][32]=7200
I'm not sure if my interpretation of weight array in keras model is correct, I would be glad if someone can help me with this

一些应该澄清你的疑问的项目符号。

  1. 你的权重数公式不正确,因为你使用的是Conv1D,所以内核大小只有一维。

  2. 定义输入形状 x_train.shape[1:] = (45,45) 对应于在具有 45 个元素的数组上应用 45 个过滤器(同样是因为它是 Conv1D)。

  3. 这么说,权数是: # of weights = input_filters x kernel_size x output_filters = 45x5x32 = 7200(无偏见)

  4. 考虑到您有图片,您可能正在寻找 Conv2D。在这种情况下,输入形状应该是 (45,45,1),内核有两个维度,参数的数量恰好是 800(没有偏差)

model = tf.keras.Sequential()
model.add(tf.keras.layers.Conv2D(32,kernel_size=5, padding='same', 
input_shape=(45, 45, 1), use_bias=False))

model.summary()
# Layer (type)                 Output Shape              Param # 
# conv (Conv2D)                (None, 45, 45, 32)        800