我在TensorFlow上有一个卷积层的代码.该层是较大计算图的一部分.
# Define the shape of the filter
filter_shape = [1,
config.char_filter_size,
config.dim_char,
config.dim_char]
# Define the convolutional layer weights and biases
W_conv = tf.Variable(tf.truncated_normal(filter_shape, stddev=0.1),
name="W_conv")
b_conv = tf.Variable(tf.constant(0.1, shape=[config.dim_char]),
name="b_conv")
# Do 2d convolution
conv = tf.nn.conv2d(char_embeddings,
W_conv,
strides=[1, 1, 1, 1],
padding="VALID",
name="conv")
# Apply nonlinearity
# h_conv has the same shape as conv
h_conv = tf.nn.relu(tf.nn.bias_add(conv, b_conv),
name="conv_relu")
# Maxpooling h_conv over dim 2 (char dim)
# ERROR HERE
conv_pooled = tf.nn.max_pool(h_conv,
ksize=[1, 1, tf.shape(h_conv)[-2], 1],
strides=[1, 1, 1, 1],
padding='VALID',
name="conv_max_pool")
Run Code Online (Sandbox Code Playgroud)
尝试运行时,我收到错误:
TypeError:参数'ksize'的预期int而不是tf.Tensor shape =()dtype = int32.
是tf.nn.max_pool无法处理动态ksize?
您似乎只想在其中一个尺寸上找到最大值,这些尺寸可能是动态尺寸.如果是这种情况,你可能最好tf.reduce_max()不要使用该功能tf.nn.max_pool().
tf.reduce_max(
h_conv,
axis=2,
keep_dims=True
)
Run Code Online (Sandbox Code Playgroud)
我设置,keep_dims=True因为它对应于最大池工作时会得到的结果,但如果设置,可能更容易使用结果keep_dims=False.
| 归档时间: |
|
| 查看次数: |
2470 次 |
| 最近记录: |