Я хочу выполнить свертку вдоль учебного образца, имеющего форму [n * 1], и применить нулевое дополнение. Пока результатов нет.Тензорный поток: фильтр не должен быть больше, чем вход
Я строю CNN (идею, взятую из here) символ уровня
Мои данные, по существу, чириканье, первоначально каждая длиной 140 отфильтровать все не-буквенные символы (заменить их пустой строкой «»), все алфавитные символы преобразуются в строчные буквы и кодируются как один горячий кодировщик.
Итак, у меня есть данные n * m, где n - количество примеров обучения, m = 140 * 26 = 3640, так как каждый алфавитный символ кодируется как один горячий вектор.
Теперь я пытаюсь выполнить свертку, и вот где у меня проблема. По существу: 1) Я пытаюсь наложить один твит с нулями вокруг него. 2) Тогда то, что я хочу сделать, это выполнить свертку с фильтром 3 * 3 вдоль твита, который, я ожидаю, будет иметь размер 3642 * 3, где ширина = 3642 и высота = 3 после заполнения.
F = 3 # filter size
S = 1 # stride
P = 1 # zero-pading
MAX_DOCUMENT_LENGTH = 3640
IMAGE_WIDTH = MAX_DOCUMENT_LENGTH
IMAGE_HEIGHT = 1
N_FILTERS = 20
FILTER_SHAPE1 = F
BATCH_SIZE = 257
def conv_model(X, y):
X = tf.cast(X, tf.float32)
y = tf.cast(y, tf.float32)
# reshape X to 4d tensor with 2nd and 3rd dimensions being image width and height
# final dimension being the number of color channels
X = tf.reshape(X, [-1, IMAGE_WIDTH, IMAGE_HEIGHT, 1])
# first conv layer will compute N_FILTERS features for each FxF patch
with tf.variable_scope('conv_layer1'):
h_conv1 = tf.contrib.layers.conv2d(inputs=X,num_outputs=N_FILTERS,
kernel_size=[3,3], padding='VALID')
Я получаю ошибку: ValueError: Filter must not be larger than the input: Filter: (3, 3) Input: (3640, 1)
Почему нулевой обивка не применяется? По крайней мере, результат его применения не работает ...
Так что я изменить размер фильтра [3,1]
и зову:
h_conv1 = tf.contrib.layers.conv2d(inputs=X, num_outputs=N_FILTERS, kernel_size=[3,1], padding='VALID')
И я не получаю сообщение об ошибке.
Не могли бы вы объяснить, что происходит?
Кроме того, почему нам нужно изменить форму ввода как X = tf.reshape (X, [-1, IMAGE_WIDTH, IMAGE_HEIGHT, 1])?