Мне нужно выполнить свертку вдоль текстовой строки фиксированного размера. Таким образом, пример обучения имеет вид: 1*N_FEATURES
, где N_FEATURES
равен 3640 (140 символов кодируются как горячие, поэтому 40 * 26 = 3640). Я пытаюсь разобраться в примере here именно:Что означает тензор 4d в Tensorflow?
def my_conv_model(X, y):
X = tf.reshape(X, [-1, N_FEATURES, 1, 1]) # to form a 4d tensor of shape batch_size x n_features x 1 x 1
features = skflow.ops.conv2d(X, N_FILTERS, [WINDOW_SIZE, 1], padding='VALID') # this will give you sliding window of WINDOW_SIZE x 1 convolution.
pool = tf.squeeze(tf.reduce_max(features, 1), squeeze_dims=[1])
return return skflow.models.logistic_regression(pool, y)
Я не понимаю, почему в этой строке:
features = skflow.ops.conv2d(X, N_FILTERS, [WINDOW_SIZE, 1], padding='VALID')
мы имеем: [WINDOW_SIZE, 1]
и не [1, WINDOW_SIZE]
? Так, насколько я понимаю, свертка должна быть выполнена следующим образом:
training example: '001010101000100101'
sliding window: |---|
|---|
|---|
и так далее, каждое окно размера [1, WINDOW_SIZE], поскольку его высота составляет 1, а ширина равна 3. Но почему В приведенном примере говорится: «features = skflow.ops.conv2d(X, N_FILTERS, [WINDOW_SIZE, 1], padding='VALID'
)»?
Правильно ли я понимаю, что 3-широкий 1-высокий в расширенной форме будет иметь форму [1, 1, 3, 1]? Кроме того, как вы определяете, какое измерение является значительным? – Oleksandra
Да, [1, 1, 3, 1] - это то, как я читаю API. «Значительный» на самом деле не является техническим термином: это какая-то информация, которая нас интересует. Любое измерение с пределом 1 - это просто место. Аналогично, цветное изображение будет иметь «несущественное» измерение 3 где-то, компоненты RGB. – Prune