确定具有4-d内核的3-d卷积的权重尺寸

时间:2020-08-12 05:03:20

标签: python tensorflow conv-neural-network

正如标题所述,我正在考虑确定CNN体系结构的适当尺寸。首先,获得数据集的下一个元素:

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

feature的尺寸(32, 64, 64, 4)对应于批量大小为32,高度为64,长度为64,扩展的批量大小为4(不是通道尺寸)。我初始化4-d内核以传递3-矩阵,因为我不希望扩展的批处理大小复杂。我的意思是在实践中,我希望大小为(1, 1)的2-d内核通过每个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应该是什么。根据{{​​3}},我知道应该是(num_filters * filter_size * filter_size * num_channels) + num_filters之类的东西,但是我很确定这对我的情况不起作用。

1 个答案:

答案 0 :(得分:0)

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