如何设置适当的参数来构建keras Convolution2D NN模型[文本分类]?

时间:2017-01-23 02:13:49

标签: neural-network classification deep-learning keras conv-neural-network

我正在尝试使用2D CNN对中文文章进行文本分类,并且无法设置keras Convolution2D的参数。我知道Convolution2D处理图像的基本流程,但是使用我的数据集与keras一起停留。

输入数据

My data is 9800 Chinese Article, max sentence length is 6810,with 200 word2vec size.
So the input shape is `(9800, 1, 6810, 200)`

建筑模型代码

MAX_FEATURES = 6810

# I just randomly pick one filter, seems this is the problem?
nb_filter = 128

input_shape = (1, 6810, 200)

# each word is 200 (word2vec size)
embedding_size = 200 

# 3 word length
n_gram = 3 

# so stride here is embedding_size*n_gram

model = Sequential()

model.add(Convolution2D(nb_filter, n_gram, embedding_size, border_mode='valid', input_shape=input_shape))

model.add(MaxPooling2D(pool_size=(100, 1), border_mode='valid'))

model.add(Dropout(0.5))
model.add(Activation('relu'))

model.add(Flatten())

model.add(Dense(hidden_dims))
model.add(Dropout(0.5))
model.add(Activation('relu'))

model.add(Dense(1))
model.add(Activation('sigmoid'))

model.compile(loss='binary_crossentropy',
              optimizer='adam',
              metrics=['accuracy'])


# X is (9800, 1, 6810, 200)

model.fit(X, y, batch_size=32,
              nb_epoch=5,
              validation_split=0.1)

问题1 。我有设置Convolution2D参数的问题。我的研究如下,

官方文档不包含2D CNN文本分类的例子(尽管有1D CNN)。

Convolution2D定义在这里https://keras.io/layers/convolutional/

keras.layers.convolutional.Convolution2D(nb_filter, nb_row, nb_col, init='glorot_uniform', activation=None, weights=None, border_mode='valid', subsample=(1, 1), dim_ordering='default', W_regularizer=None, b_regularizer=None, activity_regularizer=None, W_constraint=None, b_constraint=None, bias=True)
  

nb_filter:要使用的卷积滤镜数     nb_row:卷积内核中的行数。     nb_col:卷积内核中的列数。     border_mode:'valid','same'或'full'。 ('完整'需要Theano后端。)

关于论点的一些研究:

通过上述研究,在我对卷积的理解上,Convolution2D创建了一个(nb_filter,nb_row,nb_col)过滤器,通过滑动一个步幅来获得一个过滤结果,递归滑动,最后将结果合并到具有形状的数组中(1,one_sample_article_length [6810] / nb_filter),然后转到下一层,是吗?我的代码设置为nb_rownb_col是否正确?

问题2 。什么是正确的MaxPooling2D参数? (对于我的日期或普通,也可以)

我引用此问题https://github.com/fchollet/keras/issues/233#issuecomment-117427013来设置参数,有两种:

  • MaxPooling2D(poolsize=(((nb_features - FIELD_SIZE) / STRIDE) + 1, 1))
  • MaxPooling2D(poolsize=(maxlen - n_gram + 1, 1))

我不知道他们为什么会这样计算MaxPooling2D这个论点。

问题3 。是否建议batch_sizenb_epoch进行此类文字分类?我根本不知道。

0 个答案:

没有答案