【发布时间】:2016-09-25 23:14:28
【问题描述】:
我想沿着形状为 [n*1] 的训练样本执行卷积并应用零填充。到目前为止,还没有结果。
我正在构建一个字符级 CNN(想法来自 here)
我的数据本质上是推文,最初每个长度为 140。 我过滤所有非字母字符(将它们替换为空字符串''),我将所有字母字符转换为小写并编码为 one-hot 编码器。
所以我的数据是 n*m,其中 n 是训练示例的数量,m=140*26=3640,因为每个字母字符都被编码为 one-hot 向量。
现在,我正在尝试执行卷积,这就是我遇到问题的地方。本质上: 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])?
【问题讨论】:
标签: python machine-learning tensorflow deep-learning convolution