【发布时间】: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