에 대한 이해 필터와 보폭 모양 나는 데니 BRITZ의 tutorialTensorFlow
에 CNNs
를 사용 텍스트 분류를 검토하고있다. 필터 및 보폭 셰이프는 이미지 도메인에서 완벽합니다. 그러나 텍스트의 경우 보폭과 필터 모양을 올바르게 정의하는 방법에 대해 혼란 스럽습니다. 데니의 코드로부터 다음과 같은 두 개의 레이어를 고려TensorFlow - CNN 텍스트 분류
# Create a convolution + maxpool layer for each filter size
pooled_outputs = []
for i, filter_size in enumerate(filter_sizes):
with tf.name_scope("conv-maxpool-%s" % filter_size):
# Convolution Layer
filter_shape = [filter_size, embedding_size, 1, num_filters]
W = tf.Variable(tf.truncated_normal(filter_shape, stddev=0.1), name="W")
b = tf.Variable(tf.constant(0.1, shape=[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, sequence_length - filter_size + 1, 1, 1],
strides=[1, 1, 1, 1],
padding='VALID',
name="pool")
pooled_outputs.append(pooled)
self.embedded_chars_expanded
의 형상이 각각 배치 부재를 의미
[batch_size, max_sentence_length, embedding_size, 1]
이다
가
내 filter_shape가 [3, 50, 1, 16]
가정하자 max_sentence_length x embedding_size
필터 단일 채널 행렬 . 나는 필터가 차원이 인 시간에 3
개의 단어 벡터 위로 밀려나면서 이것을 해석합니다. 이것은 텍스트이므로 1
은 단일 입력 채널에 해당합니다 (3
은 RGB
). 마지막으로 16
은 conv layer
에 16
개의 필터가 있음을 의미합니다.
정확하게 해석 했습니까?
걷기
마찬가지로 스트라이드 형상의 전환 및 풀링 층 모두 [1, 1, 1, 1]
로 정의한다.
이 모양의 크기는 의 크기와 일치합니까?
그렇다면 이것이 내가 혼란스러워하는 이유입니다. 단어 벡터 표현의 본질은 보폭 길이가 [1, embedding_size, 1, 1]
이어야 함을 의미합니다. 즉, 각 필터에 대해 한 채널에서 한 번에 한 단어 씩 전체 단어를 이동하려고합니다.
감사합니다. '임베디드 차원의 필터 크기가 입력을 완전히 포함하므로'을 클릭하면 클릭됩니다. –