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

问题描述

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

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

feature的尺寸(32,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],padding='SAME')

这样做会产生我的预期输出(32,4)。但是我绝对不知道如何初始化权重,以便它们与该体系结构一起工作。我有这样的东西:

w_init = tf.random_normal_initializer()
input_dim = (4,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,1,4,4)(num_filters * num_channels * filter_size * filter_size)时,我能够提出解决方案。如果有人想提供数学或类似的解释,将不胜感激!

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...