如何使用caffe对文本进行分类?

时间:2016-06-13 18:33:34

标签: neural-network deep-learning caffe pycaffe

我正在使用烂番茄数据集训练我的网。它分为两组,正面和负面的例子。如何在caffe中配置我的cnn来预测给定文本是正面还是反面? 我已经格式化了数据,每个句子的大小为56个单词。但使用以下配置并不能给我带来满意的结果。

n = caffe.NetSpec()
n.data, n.label = L.Data(batch_size=batch_size, backend=P.Data.LMDB,
            source=db_path,
            transform_param=dict(scale= 1 / mean), 
            ntop=2)

n.conv1 = L.Convolution(n.data, kernel_size=3, pad=1, 
                        param=dict(lr_mult=1), num_output=10, 
                        weight_filler=dict(type='xavier'))



n.pool1 = L.Pooling(n.conv1, kernel_size=n_classes, 
                    stride=2, pool=P.Pooling.MAX)

n.ip1 = L.InnerProduct(n.pool1, num_output=100, 
                       weight_filler=dict(type='xavier'))

n.relu1 = L.ReLU(n.ip1, in_place=True)

n.ip2 = L.InnerProduct(n.relu1, num_output=n_classes, 
                       weight_filler=dict(type='xavier'))

n.loss = L.SoftmaxWithLoss(n.ip2, n.label)

我的数据集分为两个文本文件。一个包含正面示例,另一个包含负面示例。 Polarity dataset v1.1。为了组织我的数据,我得到最大句子的长度(59个单词),所以如果一个句子小于59个单词,我会添加一些文字。我改编自this code。例如,假设最大的句子有3个单词:

data = 'abc def ghijkl. mnopqrst uvwxyz. abcd.'

##
#In this data I have 3 sentences:
##

sentence_one = 'abc def ghijkl
sentence_two = 'mnopqrst uvwxyz'
sentence_three = 'abcd'

sentence_one是最大的(3个单词),所以为了格式化其他两个句子,我做了以下内容:

sentence_two = 'mnopqrst uvwxyz <PAD>'
sentence_three = 'abcd <PAD> <PAD>'

将每个正面和负面句子保存到caffe数据并保存在lmdb:

datum = caffe.proto.caffe_pb2.Datum()
datum.channels = 1
datum.height = 59 #biggest sentence
datum.width = 1
datum.label = label # 0 or 1
datum.data = sentence.tobytes()

使用我的基准数据库和上面的caffe配置,我的准确性很差(低于3%)。我究竟做错了什么?

0 个答案:

没有答案