• 有关keras(Ubuntu14.04,python2.7)


    第一部分:安装

         由于我的电脑之前已经已经配置好了caffe,因此有关python的一切相关包都已经安装完成。因此,即使不用Anaconda安装依然很简单。

         sudo pip install tensorflow

         sudo pip install keras

         测试:

         python

         from keras.models import Sequential

    第二部分:如何用keras从本地中读取图片,并做一个二分类的神经网络,直接贴出代码:

    # coding=utf-8
    ##
    
    import os   ##和文件目录相关的都用到该模块"""  
    from PIL import Image  ##python imaging library""" 
    import numpy as np
    
    #导入各种用到的模块组件
    #from keras.preprocessing.image import ImageDataGenerator
    from keras.models import Sequential
    from keras.layers.core import Dense, Dropout, Activation, Flatten
    from keras.layers.advanced_activations import PReLU
    from keras.layers.convolutional import Convolution2D, MaxPooling2D, ZeroPadding2D
    from keras.optimizers import SGD, Adadelta, Adagrad
    from keras.utils import np_utils, generic_utils
    
    def __getnum__(path):         ##统计样本数目的函数
        fm=os.listdir(path)
        i=0
        for f in fm:           ##对于在fm中的文件
            i+=1
    
        return i      
    
    def load_data(path,count):     ##数据转换函数
        data = np.empty((count,100,100,3),dtype="float32")   
        label = np.empty((count,),dtype="int") 
        imgs = os.listdir(path)  
        num = len(imgs) 
        
        for i in range(num):  
            img = Image.open(path+imgs[i])  
            arr = np.asarray(img,dtype="float32")
            data[i,:,:,:] = arr     
            ##print i
            if i<num/2:             ##前一半label为0,后一部分数据label为1
                label[i] = int(0)  
            else:  
                label[i] = int(1) 
    
            return data,label         
    
    ###############
    #开始建立CNN模型
    ###############
    
    #生成一个model
    def __CNN__(testdata,testlabel,traindata,trainlabel):
        model = Sequential()
    #第一个卷积层,4个卷积核,每个卷积核大小5*5。1表示输入的图片的通道,灰度图为1通道。
        model.add(Convolution2D(20 , 5 , 5, border_mode='valid',input_shape=(100,100,3))) 
        model.add(Activation('relu'))
        model.add(Dropout(0.5))
        model.add(MaxPooling2D(pool_size=(2, 2)))
    
        #第二个卷积层,30个卷积核,每个卷积核大小5*5。
        #采用maxpooling,poolsize为(2,2)
        model.add(Convolution2D(20 , 3 , 3, border_mode='valid'))
        model.add(Activation('relu'))
        model.add(MaxPooling2D(pool_size=(2, 2)))
    
        #第三个卷积层,16个卷积核,每个卷积核大小3*3
        #激活函数用tanh
        #采用maxpooling,poolsize为(2,2)
        model.add(Convolution2D(16 , 3 , 3, border_mode='valid')) 
        model.add(Activation('tanh'))
        model.add(MaxPooling2D(pool_size=(2, 2)))
    
         model.add(Flatten())
        model.add(Dense(128, init='normal'))
        model.add(Activation('relu'))
    
        #Softmax分类,输出是4类别
        model.add(Dense(2, init='normal'))
        model.add(Activation('softmax'))
    
    
    ####训练模型
     #使用SGD + momentum冲量
        sgd = SGD(lr=0.05, decay=1e-6, momentum=0.9, nesterov=True)
        model.compile(loss='binary_crossentropy', optimizer=sgd,metrics=['accuracy'])
    
        #开始训练, show_accuracy在每次迭代后显示正确率 。  batch_size是每次带入训练的样本数目 , nb_epoch 是迭代次数,  shuffle 是打乱样本随机。  
        model.fit(traindata, trainlabel, batch_size=20,epochs=100)
        #设置测试评估参数,用测试集样本
        model.evaluate(testdata, testlabel, batch_size=20)
    
    ############
    #主模块
    ############
    trainpath = '/home/lyyang/keras/data/train/'
    testpath = '/home/lyyang/keras/data/test/'
    
    testcount=__getnum__(testpath)
    traincount=__getnum__(trainpath)
    
    #print testcount
    #print traincount
    
    testdata,testlabel= load_data(testpath,testcount)
    traindata,trainlabel= load_data(trainpath,traincount)
    
    #print testlabel.shape
    #print testlabel
    #print trainlabel.shape
    #print trainlabel
    
    #label为0~1共2个类别,keras要求格式为binary class matrices,转化一下,直接调用keras提供的这个函数
    testlabel = np_utils.to_categorical(testlabel, 2)      
    trainlabel = np_utils.to_categorical(trainlabel, 2)
    
    __CNN__(testdata, testlabel, traindata, trainlabel)

        使用猫狗数据进行分类,数据可以在kaggle网站上下载。

        运行的话,

        python

        python   ***.py 

         不过,我没有配置python 的 IDE,感觉写大的project还是不太方便。

  • 相关阅读:
    [js对象]JS入门之Date对象
    从Microsoft SqlServer 2005中返回有一定顺序的记录集
    [js对象]JS入门之Global对象
    [JS.IntelliSense]VS2008(Orcas) So Cool
    即插即用插件式框架的程序集处理遐想(TypeFinder)
    [C#3.0体验]Orcas中内置的LinQ,XLinQ[DLinQ]扩展方法
    [ASP.NET入门]页面生命周期
    [IE]IE6&IE7运行于同一个系统中
    [js对象]JS入门之Boolean&Object对象
    RSS(Really Simple Syndication)常用标签
  • 原文地址:https://www.cnblogs.com/lyyang/p/6666748.html
Copyright © 2020-2023  润新知