4·基于tensorflow的keras库介绍

  • keras是基于tensorflow的一个库,我们装好了tensorflow之后只需要
sudo pip install keras

即可完成keras的安装

  • 我们使用的是一个图片训练集合,包含24种类型,对集合进行预处理:
import os
from PIL import Image
import numpy as np
def load_data():
    data = np.empty((1028,200,200,3),dtype="float32")     
    #我们输入的训练数据是1028个200×200×3的图片
    label = np.empty((1028),dtype="uint8")        
    #1028维的标签,对应一个0~23的整数
    imgs = os.listdir("./bmp")          
    #os.listdir()可以读取当前文件夹目录下所有文件的名字,放到一个list中
    del imgs[0]                         
    #注意,在mac下读取时第一个文件名是'.DS_Store',将其删除
    num = len(imgs)              
    for i in range(num): #一共1028张图,注意range函数从0开始
        img = Image.open("./bmp/"+imgs[i])      #Image.open()读取图片,使用PIL下的Image
        arr = np.asarray(img,dtype="float32")   #将图片转化为一个200×200×3的张量   
        data[i,:,:,:] = arr                     #张量赋值给data[i]
        label[i] = int((imgs[i].split('.')[0]).split('_')[1])   
        #"11027_07.wav.bmp"这是图片名称的格式,从中读取标签07
        #将名称用‘.’分割成一个list,取第一个,然后再用‘_’分割取第二个,转化为整数作为标签
    return data,label
  • 加载数据
data, label = load_data()   #当别的模型需要使用load_data()函数时,直接import的就行
label = np_utils.to_categorical(label, 24)
#label为0~23共24个类别,keras要求格式为binary class matrices,转化一下,直接调用keras提供的这个函数
#此时的label是1028×24维的,数字22对应[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0]
  • 分离训练集和数据集
from sklearn.cross_validation import train_test_split
#用到sklearn里面的一个库
x_train,x_test,y_train,y_test=train_test_split(data,label,random_state=33,test_size=0.1)
#x对应图片矩阵,y对应label,test集合占10%
  • 建立CNN模型
model = Sequential()#生成一个model,后面的操作都是在此model的基础上
model.add(Convolution2D(4 ,5, 5, border_mode='valid' ,input_shape=(200,200,3))) 
#4个卷积核,每个卷积核大小5*5。得到196×196。valid表示只卷积矩阵内部,图像会缩小
#与tensorflow不同的是,我们不需要显式的表示输入的通道数
model.add(Activation('tanh'))     #激活函数
model.add(MaxPooling2D(pool_size=(2, 2)))#池化操作,得到98×98
model.add(Convolution2D(8, 5, 5, border_mode='valid')) 
#8个卷积核,每个卷积核大小5*5。得到94×94
model.add(Activation('tanh'))
model.add(MaxPooling2D(pool_size=(2, 2)))#池化操作,得到47×47
model.add(Convolution2D(16, 4, 4, border_mode='valid')) 
#16个卷积核,每个卷积核大小3*3。得到44×44
model.add(Activation('tanh'))
model.add(MaxPooling2D(pool_size=(2, 2)))#池化操作,得到22×22
model.add(Convolution2D(16, 3, 3, border_mode='valid')) 
#16个卷积核,每个卷积核大小3*3。得到20×20
model.add(Activation('tanh'))
model.add(MaxPooling2D(pool_size=(2, 2)))#池化操作,得到10×10
model.add(Convolution2D(32, 3, 3, border_mode='valid'))
 #16个卷积核,每个卷积核大小3*3。得到8×8
model.add(Activation('tanh'))
model.add(MaxPooling2D(pool_size=(2, 2)))#池化操作,得到4×4
model.add(Flatten())              #压扁平准备全连接
model.add(Dense(512))             #标准一维全连接层。
model.add(Activation('tanh'))
#你还可以在model.add(Activation('tanh'))后加上dropout的技巧: model.add(Dropout(0.5))
model.add(Dense(24, init='normal'))         #最后全连接到24个节点上
model.add(Activation('softmax'))            #Softmax分类,输出是24类别
  • 开始训练模型
sgd = SGD(lr=0.05, decay=1e-6, momentum=0.9, nesterov=True)
model.compile(loss='categorical_crossentropy', optimizer=sgd, metrics=['accuracy'])
#交叉熵作为损失函数,SGD作为优化器,计算准确度
  • 调用fit方法,就是一个训练过程
model.fit(x_train, y_train , batch_size=50 ,nb_epoch=10 , shuffle=True, verbose=1,validation_data=(x_test, y_test))
#训练的epoch数设为10,即训练10轮,batch_size为50每轮中每次训练用50个数据
#数据经过随机打乱shuffle=True。verbose=1,训练过程中输出的信息,0、1、2三种方式都可以,无关紧要。训练时每一个epoch都输出accuracy。
  • 测试另外的数据
model.evaluate(x_test, y_test)#对另外的测试数据进行测试,输出loss和accuracy
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,980评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,178评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,868评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,498评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,492评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,521评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,910评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,569评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,793评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,559评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,639评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,342评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,931评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,904评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,144评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,833评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,350评论 2 342

推荐阅读更多精彩内容