精华内容
下载资源
问答
  • 基于CNN分类算法

    2019-12-18 13:55:02
    此程序是采用CNN的方法进行分类,其中包含爬虫,对图像数据进行爬取,对图像数据清洗,并将格式等要求不合适的数据剔除,从而使用有效数据进行训练,具体训练方式见内容,如需数据、实验报告文档,联系本人
  • 基于cnn的中文文本分类算法
  • 基于cnn的中文文本分类算法(python).zip
  • 基于图像patch的CNN分类算法

    千次阅读 2019-11-18 14:51:15
    基于图像patch的CNN分类算法 该算法是描述一类图像分类问题,它有如下特点: 如图,主动脉弓和心脏,绿色部分相同,而黄色部分不同。传统的CNN算法,区分效果不佳。在Multi-Instance Multi-StageDeep Lear...
    
    

    基于图像patch的CNN分类算法

    该算法是描述一类图像分类问题,它有如下特点:

    如图,主动脉弓和心脏,绿色部分相同,而黄色部分不同。传统的CNN算法,区分效果不佳。在Multi-Instance Multi-Stage Deep Learning for Medical Image Recognition这篇文章中,作者针对这种场景提出了解决方法。

    训练:将整张片子切分成patches,每个patch的label与整片的label相同,将这些patches放入CNN分类器训练,在反向传播时,通过修改损失函数:每个片子中对自己类别相应最高的patch才会贡献。如下L1是标准CNN的损失函数,L2是PCNN的损失函数:

    这样训练出的网络,就会对有区分度的patch敏感,而对无区分度的无感。

    在该人造数据集上,PCNN取得了完美的效果

    在CT数据集上,也取得了很大提高。

    我体会作者设计这个算法的流程是:

    一、通用算法在特定数据集上效果不完美,作者思考其中的痛点,并尝试提出新算法来针对性解决。

    二、设计一个人造数据集,验证新算法能完美解决这个痛点。

    三、最终虽然对实际数据集有较大提升,但依然不能像人造数据集一样达到完美,是因为实际数据集还有别的痛点。

    展开全文
  • 经典卷积神经网络(CNN)图像分类算法详解

    万次阅读 多人点赞 2019-02-13 17:21:40
    经典卷积分类网络 一点废话:CNN网络主要特点是使用卷积层,这其实是模拟了人的视觉神经,单个神经元只能对某种特定的图像特征产生响应,比如横向或者纵向的边缘,本身是非常简单的,但是这些简单的神经元构成一层...

    本文原创,转载请引用 https://blog.csdn.net/dan_teng/article/details/87192430

    CNN图像分类网络

    一点废话:CNN网络主要特点是使用卷积层,这其实是模拟了人的视觉神经,单个神经元只能对某种特定的图像特征产生响应,比如横向或者纵向的边缘,本身是非常简单的,但是这些简单的神经元构成一层,在层数足够多后,就可以获取足够丰富的特征。从机制上讲,卷积神经网络与人的视觉神经还真是像。下面进入正题。

    LeNet(1998)

    网络基本架构为:conv1 (6) -> pool1 -> conv2 (16) -> pool2 -> fc3 (120) -> fc4 (84) -> fc5 (10) -> softmax,括号内数字表示channel数。这是个很小的五层网络(特指卷积或者全连接层),图中subsampling下采样是pooling layer, kernel size 是2x2, stride 2,feature map刚好为上层一半大小。该网络用于对支票(还是邮政?)的手写数字分类。网络受制于当时的硬件条件和训练数据大小,并未带来神经网络的爆发。
    LeNet网络结构

    AlexNet(2012)

    AlexNet是2012年ILSVRC(ImageNet Large Scale Visual Recognition Challenge)冠军,以高出10%的正确率力压第二名,这是CNN网络首次获胜,将卷积神经网络的巨大优势带入人们视野。
    ILSVRC 历年top5错误率及神经网络深度(层数):
    ILSVRC top5错误率及网络深度
    AlexNet基本架构为:conv1 (96) -> pool1 -> conv2 (256) -> pool2 -> conv3 (384) -> conv4 (384) -> conv5 (256) -> pool5 -> fc6 (4096) -> fc7 (4096) -> fc8 (1000) -> softmax。AlexNet有着和LeNet相似网络结构,但更深、有更多参数。conv1使用11×11的滤波器、步长为4使空间大小迅速减小(227×227 -> 55×55)。

    AlexNet的特点:

    • 第一次使用ReLU激活函数,有更好的梯度特性、训练更快。
    • 使用了随机失活(dropout),p=0.5,可以防止过拟合
    • 大量使用数据扩充技术
    • 使用SGD,Momentum 0.9
    • learning rate 1e-2 (0.01), reduced by 10 manually when val accuracy plateaus
    • L2 weight decay 5e-4
    • batch size 128
    • 使用Norm layers(不再使用)

    由于当时GPU不够强大,网络有两个分支,放在两个GPU上分别训练,当前已经不存在这个问题了,因此也常见到只有一个分支的网络结构图。另外需说明的是,图上表的输入图片大小是224,其实应该是227,否则网络跑不通。

    双分支网络结构:
    AlexNet原网络单分支网络结构(当下使用这个就行)
    AlexNet单分支网络结构
    ILSVRC 2013冠军是ZFNet,仅在AlexNet上做了一些改进,没有突破性技术,这里不再赘述。

    VGGNet

    ILSVRC 2014冠军是GoogLeNet,亚军是VGG。虽然VGG网络是亚军,但是其应用更加广泛。
    VGG网络作者尝试了多种结构,较常用的有VGG16和VGG19(VGG16网络更简单,性能也可以,应用最广泛)。
    VGG16的基本架构为conv1^2 (64) -> pool1 -> conv2^2 (128) -> pool2 -> conv3^3 (256) -> pool3 -> conv4^3 (512) -> pool4 -> conv5^3 (512) -> pool5 -> fc6 (4096) -> fc7 (4096) -> fc8 (1000) -> softmax。 ^3代表重复3次。
    VGG网络结构
    VGG16内存主要消耗在前两层卷积,而参数最主要在第一层全连接中最多。这里说的内存消耗,主要是指存储各层feature map所用的空间,对第一层而言,输入是图片,占用大小就是图片长×宽×通道数,卷积后输出占用的内存就是输出尺寸乘积;参数量中参数是网络需要学习的部分,也就是卷积和全连接层的权重矩阵大小,因为网络中权重矩阵以kernel形式存在,因此参数量就是kernel的(长x宽x通道数)x个数。
    VGG16内存和参数消耗tricks:由于主要参数消耗在fc6(各层命名见后图)这一层,可以替换为对上一层7x7x512的feature map 在7x7上做average pooling,得到512个数,也是可行的(Andrej Karpathy在2016 CS231n课上讲的),这点在GoogLeNet中有应用。

    VGGNet特点:

    • 结构简单,只有3x3,stride 1,pad 1的卷积和2x2,stride 2的max pooling,每过一次pooling,feature map大小降低一半。
    • 参数量大(参数和内存解析见上图)
    • 合适的网络初始化
    • 使用batch normalization
    • FC7提取的特征对其他任务有帮助。FC7始于AlexNet,表示某一全连接层,该层提取特征用于分类任务。

    VGG16中对各层的命名如下:
    VGG16各层命名
    需注意的是,VGGNet之所以使用更小的kernel,是因为3个3x3的conv和1个7x7的conv具有的感受野是相同的,但是3层3x3带来更深的网络结构,非线性更强,另外参数量更少:3*(3x3xCxC)vs 7x7xCxC (这里C是channel数,同时认为kernel数也是C,等价于输出的channel是C)

    GoogLeNet

    GoogLeNet是ILSVRC2014冠军,取名源自作者所处单位Google,其中L大写是为了向LeNet致敬。该网络如之前所提,使用average pooling代替了最耗参数(相应的也最耗时间)的全连接层,同时使用inception模块来代替简单的卷积层(inception的名字来源于盗梦空间中的we need to go deeper的梗);另外,使用1x1的卷积进行了降维。
    inception module

    ResNet

    ResNet是ILSVRC 2015的冠军。ResNet最大的贡献在于解决了深层网络难以训练的问题(反向传播梯度弥散),它的网络深度达到了152层!ResNet网络结构如下图所示。
    ResNet网络结构

    ResNet网络之所以能够训练下去主要得益于residual block(残差模块)的使用。残差模块是一种短路连接,如下图所示。通常的“plain”结构如左侧所示,而residual网络如右侧所示,加了一条短路路径,使得前面的输入可以直接连接到输出。原本图中几层要学习的是H(x),现在由于多加了输入x的影响,网络层需要拟合的变成了F(x) = H(x) - x
    residual blockResNet的特点:

    • 使用BN(Batch Normalization)layer在每个conv layer后
    • 每个residual block包含两个3x3 conv layer
    • 周期性的使用stride 2 pooling降低维度,相当于除2
    • 最耗时的FC层使用pool代替
    • SGD + Momentum 0.9
    • learning rate 0.1, divided by 10 when validation error plateaus
    • Mini-batch size 256
    • Weight decay 1e-5
    • 不使用dropout

    截至2017年,典型CNN网络的准确度和复杂度:
    网络复杂度

    参考资料:
    斯坦福CS231n 2016/2017 教学视频和课件
    https://zhuanlan.zhihu.com/p/31727402

    展开全文
  • 基于cnn的图像二分类算法(一)

    万次阅读 2018-07-27 14:34:54
    本算法是基于tensorflow,使用python语言进行的一种图像分类算法,参考于谷歌的mnist手写识别,包括以下几个模块:图像读取,图像处理,图像增强。卷积神经网络部分包括:卷积层1,汇合层1(部分文献也有叫池化层的...

    本算法是基于tensorflow,使用python语言进行的一种图像分类算法,参考于谷歌的mnist手写识别,包括以下几个模块:图像读取,图像处理,图像增强。卷积神经网络部分包括:卷积层1,汇合层1(部分文献也有叫池化层的),卷积层2,汇合层2,全连接层1,全连接层2,共6层神经网络。损失函数采用交叉熵,优化则采用adam优化法,由于数据集大小较小,只有200张图片,故没有采用MBGD梯度下降算法,直接采用BGD梯度下降算法。

    首先是图像读取模块,由于本方案是应用于识别渣土车顶棚是否遮盖好的算法,所以没有网上现成的数据库,目前只有从网上收集图片,并转换成数据。

    """
    定义一个遍历文件夹下所有图片,并转化为矩阵,压缩为特定大小,并传入一个总
    的矩阵中去的函数
    """      
    def creat_x_database(rootdir,resize_row,resize_col):
        #列出文件夹下所有的,目录和文件
        list = os.listdir(rootdir)
        #创建一个随机矩阵,作为多个图片转换为矩阵后传入其中
        database=np.arange(len(list)*resize_row*resize_col*3).reshape(len(list)
        ,resize_row,resize_col,3)
        for i in range(0,len(list)):
            path = os.path.join(rootdir,list[i])    #把目录和文件名合成一个路径
            if os.path.isfile(path):                ##判断路径是否为文件
                image_raw_data = tf.gfile.FastGFile(path,'rb').read()#读取图片
                with tf.Session() as sess:
                    img_data = tf.image.decode_jpeg(image_raw_data)#图片解码
                    #压缩图片矩阵为指定大小
                    resized=tf.image.resize_images(img_data,[resize_row,resize_col],method=0)
                    database[i]=resized.eval()
        return database                          
      

    以上是创建数据集,还有标签集,网上部分创建标签集的方法是直接读取已经设定好标签的图片名字创建,比较适合分类数目较多的且在一个文件夹下的图片,这里笔者因为图片数量不多加之图片全是网上搜索,故采用以下方法

    def creat_y_database(length,classfication_value,one_hot_value):
        #创建一个适当大小的矩阵来接收
        array=np.arange(length*classfication_value).reshape(length,classfication_value)
        for i in range(0,length):
            array[i]=one_hot_value #这里采用one hot值来区别合格与不合格
        return array

    下面是卷积神经网络的搭建,这里参考的mnist手写输入识别的分类的神经网络

    '''
    初步打造一个卷积神经网,使其能够对输入图片进行二分类
    '''
    #计算准确率
    
    def compute_accuracy(v_xs, v_ys):
        global prediction
        y_pre = sess.run(prediction, feed_dict={xs: v_xs, keep_prob: 1})
        correct_prediction = tf.equal(tf.argmax(y_pre,1), tf.argmax(v_ys,1))
        accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
        result = sess.run(accuracy, feed_dict={xs: v_xs, ys: v_ys, keep_prob: 1})
        return result          
    #定义各参数变量并初始化            
    def weight_variable(shape):
        initial = tf.truncated_normal(shape, stddev=0.1)
        return tf.Variable(initial)
    
    def bias_variable(shape):
        initial = tf.constant(0.1, shape=shape)
        return tf.Variable(initial)
    
    def conv2d(x, W):
        # stride [1, x_movement, y_movement, 1]
        # Must have strides[0] = strides[3] = 1
        return tf.nn.conv2d(x, W, strides=[1, 1, 1, 1], padding='SAME')
    
    def max_pool_2x2(x):
        # stride [1, x_movement, y_movement, 1]
        return tf.nn.max_pool(x, ksize=[1,2,2,1], strides=[1,2,2,1], padding='SAME')
    
    
    
    #创建训练集
    fail_x_data=creat_x_database('E:/data/muck truck pic/failed',128,128)
    true_x_data=creat_x_database('E:/data/muck truck pic/qualified',128,128) 
    x_data=np.vstack((fail_x_data,true_x_data))  #两个矩阵在列上进行合并
    #创建标签集    
    fail_y_data=creat_y_database(fail_x_data.shape[0],2,[0,1])
    true_y_data=creat_y_database(true_x_data.shape[0],2,[1,0])
    y_data=np.vstack((fail_y_data,true_y_data))
    #划分训练集和测试集
    x_train,x_test,y_train,y_test = train_test_split(x_data,y_data,test_size=0.1,random_state=0)
    #train_test_split函数用于将矩阵随机划分为训练子集和测试子集,并返回划分好的训练集测试集样本和训练集测试集标签。
        
        
    xs = tf.placeholder(tf.float32, [None, 128,128,3])/255 #归一化
    ys = tf.placeholder(tf.float32, [None, 2])
    keep_prob = tf.placeholder(tf.float32)
    #x_image = tf.reshape(xs, [-1, 50, 50, 3])
    
    W_conv1 = weight_variable([5,5, 3,32]) # patch 5x5, in size 3, out size 32
    b_conv1 = bias_variable([32])
    h_conv1 = tf.nn.relu(conv2d(xs, W_conv1) + b_conv1) # output size 128x128x32
    h_pool1 = max_pool_2x2(h_conv1)                          # output size 64x64x32
    
    W_conv2 = weight_variable([5,5, 32, 64]) # patch 5x5, in size 32, out size 64
    b_conv2 = bias_variable([64])
    h_conv2 = tf.nn.relu(conv2d(h_pool1, W_conv2) + b_conv2) # output size 64x64x64
    h_pool2 = max_pool_2x2(h_conv2) #32x32x64
    
    W_fc1 = weight_variable([32*32*64, 1024])
    b_fc1 = bias_variable([1024])
       
    h_pool2_flat = tf.reshape(h_pool2, [-1, 32*32*64])
    h_fc1 = tf.nn.sigmoid(tf.matmul(h_pool2_flat, W_fc1) + b_fc1)
    h_fc1_drop = tf.nn.dropout(h_fc1, keep_prob)
    
    W_fc2 = weight_variable([1024, 2])
    b_fc2 = bias_variable([2])
    prediction = tf.nn.softmax(tf.matmul(h_fc1_drop, W_fc2) + b_fc2)
    
    cross_entropy = tf.reduce_mean(-tf.reduce_sum(ys * tf.log(prediction+ 1e-10), reduction_indices=[1]))
    #由于 prediction 可能为 0, 导致 log 出错,最后结果会出现 NA      
    #train_step = tf.train.AdamOptimizer(1e-4).minimize(cross_entropy)
    train_step = tf.train.AdamOptimizer(1e-4).minimize(cross_entropy)    
    sess=tf.Session()
    init=tf.global_variables_initializer()
    sess.run(init)
    
    for i in range(1000):
    #    batch_xs, batch_ys = mnist.train.next_batch(100)
        sess.run(train_step, feed_dict={xs: x_train, ys: y_train, keep_prob: 0.5})
        if i % 50 == 0:
            print(compute_accuracy(x_test,y_test))
            print(sess.run(cross_entropy, feed_dict={xs: x_train, ys: y_train, keep_prob: 1}))

    这里有一个坑点要说明一下,在修改神经网络的过程中,发现精确度一直不变,这说明模型不收敛,一层一层的查找问题才发现是prediction的值可能为0,导致交叉熵出现-Naf这种情况。解决办法如上所示,在prediction的后面加一个极小数,防止log出现负无穷的情况。同时参考其他文章,在倒数第二层的激活函数上由ReLU改为sigmoid,原因是ReLU输出可能相差很大(比如0和几十),这时再经过softmax就会出现一个节点为1其它全0的情况。softmax的cost function里包含一项log(y),如果y正好是0就没法算了。

    最终训练结果如图所示:

    训练结果并不好,最高有75%,可能原因有超参数的调整没到位,图像样本太少,训练层数太少,训练次数太少等。后期需要改进这个模型。

     

     

    参考文献:【1】https://blog.csdn.net/huangbo10/article/details/24941079

                      【2】https://github.com/MorvanZhou/tutorials/blob/master/tensorflowTUT/tf18_CNN3/full_code.py

                      【3】http://wiki.jikexueyuan.com/project/tensorflow-zh/tutorials/mnist_beginners.html

    展开全文
  • CNN 中文文本挖掘 文本分类 python 深度学习 机器学习 CNN 中文文本挖掘 文本分类 python 深度学习 机器学习
  • 可见、近红外光谱和深度学习CNN-ELM算法的煤炭分类.pdf
  • 文件包含SVM,CNN,KNN三种分类算法,用于机器学习和神经网络,m文件可直接调用
  • 本篇文章主要通过Tensorflow+Opencv实现CNN自定义图像分类案例,它能解决我们现实论文或实践的图像分类问题,并与机器学习的图像分类算法进行对比实验。基础性文章,希望对您有所帮助,如果文章存在错误或不足之...

    从本专栏开始,作者正式开始研究Python深度学习、神经网络及人工智能相关知识。前一篇详细讲解了gensim词向量Word2Vec安装、基础用法,并实现《庆余年》中文短文本相似度计算及多个案例,很幸运被CSDN推荐至封面。本篇文章主要通过Tensorflow+Opencv实现CNN自定义图像分类案例,它能解决我们现实论文或实践中的图像分类问题,并与机器学习的图像分类算法进行对比实验。

    本专栏主要结合作者之前的博客、AI经验和相关文章及论文介绍,后面随着深入会讲解更多的Python人工智能案例及应用。基础性文章,希望对您有所帮助,如果文章中存在错误或不足之处,还请海涵~作者作为人工智能的菜鸟,希望大家能与我在这一笔一划的博客中成长起来。写了这么多年博客,尝试第一个付费专栏,但更多博客尤其基础性文章,还是会继续免费分享,但该专栏也会用心撰写,望对得起读者,共勉!

    在这里插入图片描述

    代码下载地址(欢迎大家关注点赞):

    展开全文
  • DL之CNN:利用CNN算法实现对句子分类+进行情感分析(预测句子情感) 目录 CNN算法设计思路 代码实现 CNN算法设计思路 b 代码实现 后期更新…… ...
  • 基于cnn的图像二分类算法(二)

    千次阅读 2018-08-03 17:32:41
    上一篇我们简单介绍了使用卷积神经网络进行图片分类算法,点这里,然而最后的效果并不理想,现在我们来考虑如何改进这个算法. 这次加入的功能是保存参数的功能.我们训练神经网络,希望损失值越低越好,test的时候希望...
  • 算法内容介绍很详细 算法步骤也容易看懂 在此分享给大家
  •   ...机器学习AI算法工程 公众号: datayx 文本分类任务是一个经久不衰的课题,其应用包括垃圾邮件检测、情感分析等。 IMPLEMENTING A CNN FOR TEXT CLASSIFICATION IN TENSORFLOW ...
  • [Python人工智能] 十.Tensorflow+Opencv实现CNN自定义图像分类案例及与机器学习KNN图像分类算法对比.pdf
  • 针对Faster R-CNN算法在目标检测准确率不高的问题,先对数据进行增强处理;然后对提取的特征图进行裁剪,利用双线性插值法代替感兴趣区域池化操作,分类时采用软非极大值抑制(Soft-NMS)算法。实验结果表明,该算法在...
  • R2CNN 算法笔记

    千次阅读 2018-09-01 09:05:10
    论文:R2CNN: Rotational Region CNN for Orientation Robust Scene Text Detection ...这篇文章提出了R2CNN(Rotational Region CNN算法解决旋转文本的检测。 Figure2是R2CNN算法的整体结构,主要是在Faster RCN...
  • 关于CNN行为识别算法的学习记录

    千次阅读 2018-10-18 15:31:28
    最近需要做一点行为识别相关的项目,于是把行为识别类的算法(特别是基于CNN算法)调研了一遍。 到目前为止,CNN行为识别类的算法主要都是基于双流和3D卷积两种方法,近年来,融合使用光流和C3D的算法逐渐增多...
  • CNN文本分类

    千次阅读 2018-09-20 08:33:46
    文本分类是NLP领域的一个重要的子任务,文本分类的目标是自动的将文本打上已经定义好的标签,常见的文本分类任务有:垃圾邮件过滤、情感分析、新闻分类等等。 代码是来自 ...
  • CNN图像分类pdf讲义超详细
  • R-CNN算法

    2017-12-27 17:56:31
    R-CNN算法序列博客共三篇,分别如下: ... 常见的CNN算法只能实现图片单一物体(对象)的识别,是一个分类问题。目标检测(Object Detection)比CNN更加复杂些,主要针对多对象图片的侦测识别,目标
  • 12 第 卷第 期 计 算 机 应 用 研 究 2017 12 Application esearch of Computers Dec 2017 年 月 一种融合AutoEncoder 与CNN 的 混合算法用于图像特征提取* 1 1 12 刘兴旺 王江晴 徐 科 ( 1 430074 ; 2 430074) ...
  • R-CNN算法详解

    万次阅读 多人点赞 2017-06-03 11:24:40
    这是一篇比较早的Object Detection算法,发表在2014年的CVPR,也是R-CNN系列算法的开山之作,网上可以搜到很多相关的博客讲解,本篇博文没有按论文顺序来讲述,而是结合自己经验来看这个算法,希望给初学者一个直观...
  • Init、ST_CNN算法(CNN+SpatialTransformer)实现多分类预测

    千次阅读 多人点赞 2021-02-27 08:56:17
    DL之Attention:基于ClutteredMNIST手写数字图片数据集分别利用CNN_Init、ST_CNN算法(CNN+SpatialTransformer)实现多分类预测 目录 基于ClutteredMNIST手写数字图片数据集分别利用CNN_Init、ST_CNN算法...
  • 主要是卷积神经网络CNN的matlab算法实现,有具体的代码解析,可直接运行
  • CNN图像识别_算法

    千次阅读 2019-03-18 23:58:05
    CNN图像识别_算法篇前言Keras该休息了,待续 前言 CNN算法方面主要参考的的zh_JNU同学的工作和Deep-Learning-ToolBox-CNN-master的Matlab源码,然后也做了些修改和解读。 Keras 数据库是5钟分类的400张训练数据和100...
  • 文章目录TensorFlow2 学习——CNN图像分类1. 导包2. 图像分类 fashion_mnist3. 图像分类 Dogs vs. Cats3.1 原始数据3.2 利用Dataset加载图片3.3 构建CNN模型,并训练 TensorFlow2 学习——CNN图像分类 1. 导包 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 50,476
精华内容 20,190
关键字:

cnn中的分类算法