人工智能课程项目总结

1.图像

1.1论文阅读

首先,阅读了两篇论文,理解了什么是Residual Network

Deep Residual Learning for Image Recognition
Identity Mappings in Deep Residual Networks

Residual Unit

2.2 Caffe的安装与使用

2.2.1 安装

在安装Caffe的时候,对Ubuntu系统还很不熟悉,出现了很多不明白的错误,最后通过百度,都一一解决,几乎所有的错误都是有路径引起的,将Anaconda和Caffe的路径等加入系统变量就可以安装成功。

2.2.2 使用

  • 通过caffe自带的几个python的例子初步了解了caffe,在自己电脑上跑了mnist,cifar10等例子。
  • 了解caffe的net.prototxt和solver.prototxt,并自己尝试通过caffe的python接口写一个简单的网络结构。
  • 在写net.prototxt时对CNN的原理不懂,开始学习CNN,它的两个主要特点是局部感知与权值共享。

2.3 ResNet实验

由于自己写的ResNet效果差,于是找到一个ResNet-20的网络进行实验。在cifar10上得到了接近80%的正确率,在BoT上得到的争取率只有60%。在进行ResNet-20的实验时遇到的问题主要有以下几点:

  • 在筛选图片时,一开始通过文件管理器操作,由于图片数量大,很容易卡住,于是用python写了个小程序解决的,并做了标签。
  • 将图片转成lmdb时,一开始定的大小为256×256,结果电脑运行极其缓慢,然后在转lmdb时,resize=true,size=28*28,电脑才以可以接受的速度运行。

2 文本

在开始做文本的时候,一开始不打算用CNN了,于是想尝试一下其它的工具,例如tensorflow,cntk,matconvnet,cntk总是出莫名其妙的错误,matconvnet是基于matlab的caffe,简单直观,但是在定义网络结构的时候也不像caffe的net.prototxt那样简单直观,tensorflow只是稍微了解了一下。

2.1 论文阅读

只阅读了 Convolutional Neural Networks for Sentence Classification 这一篇论文。

Model architecture with two channels for an example sentence
  • 将单词转成词向量,word2vec
  • CNN

2.2 论文真假判别

由于word2vec不易使用,并且词向量太大,每篇文章生成的向量矩阵巨大,难以以接受的时间训练得到结果,于是采取了通过统计词频,用SVM聚类的传统方法。

//统计词频,将文章转成向量
import nltk
import os
def wordfreq(filename):    
    file = open(filename, 'r')    
    document = file.read().lower().split("\n")    
    file.close()    

    //分词
    text = ""    
    for line in document: 
        text += line
    text = text.decode("utf8")
    sens = nltk.sent_tokenize(text)
    word = []
    for sen in sens:
        word.extend(nltk.word_tokenize(sen))
    stop = nltk.corpus.stopwords.words("english")
    word = [w for w in word if w.isalpha() and w not in stop]
    
    //得到词频,并降序
    fdict = nltk.FreqDist(word)
    fdict = sorted(fdict.iteritems(), key=lambda d: d[1], reverse=True)
    vec = []

    //取前300 不足补0
    if len(fdict) >= 300:
        for i in range(300):
            vec.append(fdict[i][1])
    else:
        for i in range(len(fdict)):
            vec.append(fdict[i][1])
        for i in range(len(fdict),300): 
            vec.append(0)
    return vec

得到文章的统计词频向量后,通过LibSVM进行分类。

from svmutil import *
inputs = //所有文章的向量
answers = //对应文章的标记
prob = svm_problem(answers,inputs)
param = svm_parameter()
m = svm_train(prob, param)
svm_save_model("paper.model",m)

//验证
p_labels, p_acc, p_vals = svm_predict(answers_test, inputs_test, m)

2.3 论文分类

通过TF-IDF计算文章的向量,然后通过knn或kmeans聚类。

//将每篇文章去停用词,标点,返回一行
import nltk
def doc2words(filename):
    file = open(filename, 'r')
    document = file.read().lower().split("\n")
    file.close()
    text = ""
    for line in document:
      text += line

    text = text.decode("utf8")
    sens = nltk.sent_tokenize(text)
    word = []
    for sen in sens:
      word.extend(nltk.word_tokenize(sen))

    stop = nltk.corpus.stopwords.words("english")
    word = [w for w in word if w.isalpha() and w not in stop]
    sentence = " ".join(word)
    return sentence
// 将目录下的所有文章添加到语料库中,一行为一篇文章
def addcorpus(route):
    import os
    filelist = os.listdir(route)
    corpus = []
    i = 0
    for f in filelist:
        if f.endswith(".txt"):
            corpus.append(doc2words(route+f))
        i += 1
        print i

    return corpus
//通过sklearn 计算每个单词的TF-IDF权重,返回权重矩阵
def corpus2vec(route):
    from sklearn.feature_extraction.text import TfidfTransformer
    from sklearn.feature_extraction.text import CountVectorizer

    corpus = addcorpus(route)
    vectorizer = CountVectorizer()
    transformer = TfidfTransformer()
    tfidf = transformer.fit_transform(vectorizer.fit_transform(corpus))
    weight = tfidf.toarray()
    return weight

下一步进行聚类。由于没有带标记的论文,所以还没有分类。

2.4 论文分类

在sciencedirect上找了三类论文分别为physics,health,finance,加上原有的ijcai论文,总共四类 ,由于下载论文速度慢,pdf处理慢,因此每一类只选取了100篇作为训练,20篇进行测试。

  • 首先将pdf处理成txt
  • 然后将所有文章放进一个语料库中
  • 通过sklearn的tfidf模型生成每篇文章的向量
  • 最后通过sklearn的svm进行分类并验证。

pdf2txt.py

import os

def pdftotxt(route):
    os.chdir("D:/Program Files/pdfminer/tools")
    fieldlist = os.listdir(route)
    i = 1
    for field in fieldlist:
        paperlist = os.listdir(route+field)
        for paper in paperlist:
            paper_route = route+field+"/"+paper
            save_route = route+field+"/"+paper[:-4]+".txt "
            command = "python pdf2txt.py -o "+save_route+paper_route
            os.system(command)
            print i
            i += 1

TRAIN_ROUTE = "D:/Documents/2016-2017_autumn_semester/Artificial_intelligence/NLP/PAPERSET/train/"
TEST_ROUTE = "D:/Documents/2016-2017_autumn_semester/Artificial_intelligence/NLP/PAPERSET/test/"

pdftotxt(TRAIN_ROUTE)
pdftotxt(TEST_ROUTE)

doc2vec.py

import nltk
import os

def doc2words(filename):
    file = open(filename, 'r')
    document = file.read().lower().split("\n")
    file.close()
    text = ""
    for line in document:
      text += line

    text = text.decode("utf8")
    sens = nltk.sent_tokenize(text)
    word = []
    for sen in sens:
      word.extend(nltk.word_tokenize(sen))

    stop = nltk.corpus.stopwords.words("english")
    word = [w for w in word if w.isalpha() and w not in stop]
    sentence = " ".join(word)
    return sentence


def addcorpus(route):
    import os
    filelist = os.listdir(route)
    corpus = []
    i = 0
    for f in filelist:
        if f.endswith(".txt"):
            corpus.append(doc2words(route+f))
        i += 1
        print i

    return corpus


def corpus2vec(corpus):
    from sklearn.feature_extraction.text import TfidfTransformer
    from sklearn.feature_extraction.text import CountVectorizer

    vectorizer = CountVectorizer()
    transformer = TfidfTransformer()
    tfidf = transformer.fit_transform(vectorizer.fit_transform(corpus))
    weight = tfidf.toarray()
    return weight

TRAIN_ROUTE = "D:/Documents/2016-2017_autumn_semester/Artificial_intelligence/NLP/PAPERSET/train/"
TEST_ROUTE = "D:/Documents/2016-2017_autumn_semester/Artificial_intelligence/NLP/PAPERSET/test/"
corpus = []

items = os.listdir(TRAIN_ROUTE)
for item in items:
    corpus.extend(addcorpus(TRAIN_ROUTE+item+"/"))

items = os.listdir(TEST_ROUTE)
for item in items:
    corpus.extend(addcorpus(TEST_ROUTE+item+"/"))

weight = corpus2vec(corpus)

通过svm方法进行训练,使用的是sklearn.svm.SVC()

answers = []
answers.extend([1]*100)
answers.extend([2]*100)
answers.extend([3]*100)
answers.extend([4]*98)
inputs = weight[0:398]

from sklearn import svm  

clf = svm.SVC()  
clf.fit(inputs, answers)

result = clf.predict(weight[398:])   
print result   
结果展示

最后正确率只有大概65%,其中第1,2类的分类是准确的,第3类有部分被分到第1类,第4类完全被分到第1类。查看训练集中的第4类的结果,发现训练是就没有将第1类与第4类分开。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342

推荐阅读更多精彩内容