gpt4 book ai didi

python - 根据输入形状计算是否有差异? (使用 Tensorflow 的 Python 中的 CNN)

转载 作者:太空宇宙 更新时间:2023-11-04 04:20:01 25 4
gpt4 key购买 nike

我正在引用论文(Kim, 2014)解决一个文本分类问题。然后我发现在下面两个模型之间,左边的模型(模型 1)比右边的模型(模型 2)花费大约 2.5 倍的时间。我认为两个模型的权重参数数量是相同的。为什么两个模型之间存在时间差异?
*两个模型的输入数据内容相同。只是改变了形状。

model input data我使用了 tf.nn.conv2d。滤波器形状和步幅如下
模型 1:3x9x1x 过滤器的数量,步幅 3
模型 2:1x9x3x 过滤器的数量,步幅 1
其他都一样
*在上图中,宽度表示“self.embedding_dim”,高度表示“self.max_length”。

pooled_outputs = []
with tf.name_scope("conv-maxpool-3"):
# Convolution Layer
filter_shape = [3, self.embedding_dim, 1, self.num_filters]
W = tf.Variable(tf.truncated_normal(filter_shape, stddev=0.1), name="W")
b = tf.Variable(tf.constant(0.1, shape=[self.num_filters]), name="b")
conv = tf.nn.conv2d(
self.embedded_chars_expanded,
W,
strides=[1, 1, 3, 1],
padding="VALID",
name="conv")
# Apply nonlinearity
h = tf.nn.relu(tf.nn.bias_add(conv, b), name="relu")
# Maxpooling over the outputs
pooled = tf.nn.max_pool(
h,
ksize=[1, self.max_length - 3 + 1, 1, 1],
strides=[1, 1, 1, 1],
padding='VALID',
name="pool")
pooled_outputs.append(pooled)

----------------------------------------------------------------------

pooled_outputs = []
with tf.name_scope("conv-maxpool-1"):
# Convolution Layer
filter_shape = [1, self.embedding_dim, 3, self.num_filters]
W = tf.Variable(tf.truncated_normal(filter_shape, stddev=0.1), name="W")
b = tf.Variable(tf.constant(0.1, shape=[self.num_filters]), name="b")
conv = tf.nn.conv2d(
self.embedded_chars_expanded,
W,
strides=[1, 1, 1, 1],
padding="VALID",
name="conv")
# Apply nonlinearity
h = tf.nn.relu(tf.nn.bias_add(conv, b), name="relu")
# Maxpooling over the outputs
pooled = tf.nn.max_pool(
h,
ksize=[1, self.max_length - 1 + 1, 1, 1],
strides=[1, 1, 1, 1],
padding='VALID',
name="pool")
pooled_outputs.append(pooled)

最佳答案

在第一个模型中,您将步幅设置为 [1, 1, 3, 1] 并且您没有指定数据顺序,因此它默认为 NHWC ,即 (num_batches, height, width, channels)(检查 docu )。因此 3 的步幅适用于宽度,而不是高度,正如您的模型 1 图片所示。因为您使用的是 VALID 填充,所以宽度上的步长 3 没有影响,顺便说一下。

所以基本上,您对模型 1 的描述是错误的:在第 2 步中它没有跳到第 4 行,而是跳到了第 2 行。这意味着模型 1 计算的卷积数量大约是模型 2 的 3 倍。

还有其他因素可能会导致速度差异 - 也许模型 2 可以在 GPU 上更好地并行化,但这很难判断。

关于python - 根据输入形状计算是否有差异? (使用 Tensorflow 的 Python 中的 CNN),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54667727/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com