【问题标题】:Determining the dimensions of weights for a 3-d Convolution with a 4-d Kernel使用 4-d 内核确定 3-d 卷积的权重维度
【发布时间】:2020-08-12 05:03:20
【问题描述】:

正如标题所说,我正在考虑为我的 CNN 架构确定合适的尺寸。首先,我获取数据集的下一个元素:

train_ds = iter(model.train_dataset)
feature, label = next(train_ds)

其中feature 的尺寸为(32, 64, 64, 4),对应于批量大小为 32、高度为 64、长度为 64,扩展批量大小为 4(不是通道维度)。我初始化我的 4-d 内核以传递我的 3-matrix,因为我不希望扩展的批量大小变得复杂。我的意思是在实践中我想要一个大小为(1, 1) 的二维内核传递每个 64 x 64 图像,并对扩展的批量大小执行相同的操作,而不将扩展的批量大小卷积在一起。所以我实际上是在为每个图像并行进行(1, 1) 卷积。到目前为止,我能够像这样初始化kernel 并提供conv2d

kernel = tf.constant(np.ones((1, 1, 4, 4)), dtype=tf.float32)
output = tf.nn.conv2d(feature, kernel, strides=[1, 1, 1, 1], padding='SAME')

这样做会产生我预期的输出,(32, 64, 64, 4)。但我完全不知道如何初始化权重,以便它们与这种架构一起工作。我有这样的事情:

w_init = tf.random_normal_initializer()
input_dim = (4, 1, 1, 4)
w = tf.Variable(
            initial_value=w_init(shape=(input_dim), dtype="float32"),
            trainable=True)

tf.matmul(output, w)

但我收到不兼容的批次尺寸,因为我不知道 input_dim 应该是什么。根据this answer,我知道它应该类似于(num_filters * filter_size * filter_size * num_channels) + num_filters,但我很确定这不适用于我的场景。

【问题讨论】:

    标签: python tensorflow conv-neural-network


    【解决方案1】:

    当尺寸权重的大小为(1, 1, 4, 4)(num_filters * num_channels * filter_size * filter_size) 时,经过修补,我能够想出一个解决方案。如果有人想提供数学或类似的解释,将不胜感激!

    【讨论】:

      猜你喜欢
      • 2016-08-30
      • 2017-11-22
      • 2019-07-15
      • 1970-01-01
      • 2022-01-24
      • 2014-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多