正如标题所说,我正在考虑为我的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应该是什么。我知道它应该是this answer所说的(num_filters * filter_size * filter_size * num_channels) + num_filters,但我非常确定这不适用于我的场景。
发布于 2020-08-12 13:29:31
经过一番修修补补,当尺寸权重为(1, 1, 4, 4)或(num_filters * num_channels * filter_size * filter_size)时,我能够想出一个解决方案。如果有人想提供一个数学或类似的解释,我们将不胜感激!
https://stackoverflow.com/questions/63370083
复制相似问题