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

问题描述 投票:2回答:1

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

model input data我使用了tf.nn.conv2d。过滤器的形状和步幅如下 模型1:3x9x1xt过滤器数量,步幅3 模型2:1x9x3xt过滤器数量,步幅1 其他的事情是一样的 *在上图中,width表示'self.embedding_dim',height表示'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)
python tensorflow classification conv-neural-network text-classification
1个回答
1
投票

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

所以基本上,你对模型1的描述是错误的:在第2步中它不会跳到第4行,而是跳到第2行。意义模型1计算的模数大约是模型2的3倍。

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

© www.soinside.com 2019 - 2024. All rights reserved.