keras 多分类一些函数参数设置

来源:互联网 发布:db2分页查询sql 编辑:程序博客网 时间:2024/06/01 10:54

用Lenet-5 识别Mnist数据集为例子:

采用下载好的Mnist数据压缩包转换成PNG图片数据集,加载图片采用keras图像预处理模块中的ImageDataGenerator。

首先import所需要的模块

from keras.preprocessing.image import ImageDataGeneratorfrom keras.models import Modelfrom keras.layers import MaxPooling2D,Input,Convolution2Dfrom keras.layers import Dropout, Flatten, Densefrom keras import backend as K

定义图像数据信息及训练参数

img_width, img_height = 28, 28  train_data_dir = 'dataMnist/train' #train data directoryvalidation_data_dir = 'dataMnist/validation'# validation data directorynb_train_samples = 60000 nb_validation_samples = 10000epochs = 50 batch_size = 32

判断使用的后台

if K.image_dim_ordering() == 'th':    input_shape = (3, img_width, img_height)else:    input_shape = (img_width, img_height, 3)

网络模型定义

主要注意最后的输出层定义
比如Mnist数据集是要对0~9这10种手写字符进行分类,那么网络的输出层就应该输出一个10维的向量,10维向量的每一维代表该类别的预测概率,所以此处输出层的定义为:
x = Dense(10,activation=’softmax’)(x)
此处因为是多分类问题,Dense()的第一个参数代表输出层节点数,要输出10类则此项值为10,激活函数采用softmax,如果是二分类问题第一个参数可以是1,激活函数可选sigmoid

img_input=Input(shape=input_shape)x=Convolution2D(32, 3, 3, activation='relu', border_mode='same')(img_input)x=MaxPooling2D((2,2),strides=(2, 2),border_mode='same')(x)x=Convolution2D(32,3,3,activation='relu',border_mode='same')(x)x=MaxPooling2D((2,2),strides=(2, 2),border_mode='same')(x)x=Convolution2D(64,3,3,activation='relu',border_mode='same')(x)x=MaxPooling2D((2,2),strides=(2, 2),border_mode='same')(x)x = Flatten(name='flatten')(x)x = Dense(64, activation='relu')(x)x= Dropout(0.5)(x)x = Dense(10,activation='softmax')(x)model=Model(img_input,x)model.compile(loss='binary_crossentropy',              optimizer='rmsprop',              metrics=['accuracy'])model.summary()

利用ImageDataGenerator传入图像数据集
注意用ImageDataGenerator的方法.flow_from_directory()加载图片数据流时,参数class_mode要设为‘categorical’,如果是二分类问题该值可设为‘binary’,另外要设置classes参数为10种类别数字所在文件夹的名字,以列表的形式传入。

train_datagen = ImageDataGenerator(    rescale=1. / 255,    shear_range=0.2,    zoom_range=0.2,    horizontal_flip=True)# this is the augmentation configuration we will use for testing:# only rescalingtest_datagen = ImageDataGenerator(rescale=1. / 255)train_generator = train_datagen.flow_from_directory(    train_data_dir,    target_size=(img_width, img_height),    batch_size=batch_size,    class_mode='categorical',    #多分类问题设为'categorical'    classes=['0','1','2','3','4','5','6','7','8','9']  #十种数字图片所在文件夹的名字    )validation_generator = test_datagen.flow_from_directory(    validation_data_dir,    target_size=(img_width, img_height),    batch_size=batch_size,    class_mode='categorical'    )

训练和保存模型及权值

model.fit_generator(        train_generator,        samples_per_epoch=nb_train_samples,        nb_epoch=epochs,        validation_data=validation_generator,        nb_val_samples=nb_validation_samples        )model.save_weights('Mnist123weight.h5')model.save('Mnist123model.h5')

至此训练结束


图片预测

注意model.save()可以将模型以及权值一起保存,而model.save_weights()只保存了网络权值,此时如果要进行预测,必须定义有和训练出该权值所用的网络结构一模一样的一个网络。
此处利用keras.models中的load_model方法加载model.save()所保存的模型,以恢复网络结构和参数。

from keras.models import load_modelfrom keras.preprocessing.image import img_to_array, load_imgimport numpy as npclasses=['0','1','2','3','4','5','6','7','8','9']model=load_model('Mnist123model.h5')while True:    img_addr=input('Please input your image address:')    if img_addr=="exit":        break    else:        img = load_img(img_addr, False, target_size=(28, 28))        x = img_to_array(img) / 255.0        x = np.expand_dims(x, axis=0)        result = model.predict(x)        ind=np.argmax(result,1)        print('this is a ', classes[ind])

本文原创,转载请注明出处

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 京东的东西退掉但是赠品怎么办 买手机7天不给退换怎么办 买的水果拒收了商家不退钱怎么办 京东第三方签收后退货怎么办 京东上买的第三方的鞋子退货怎么办 淘宝买家退货条码不符签收了怎么办 此苹果已丢失并被抹掉怎么办 苹果手机显示已丢失并被抹掉怎么办 手机在保修期内坏了售后拖延怎么办 微信图片在电脑上打印不清楚怎么办 遇到职业搞坏淘宝店铺的买家怎么办 眼破裂伤无光感半个月怎么办 出了虫的豆豆熬稀饭喝了怎么办? 果汁阳台月季叶子掉光了怎么办 近看好看远看难看该怎么办 衣服褶皱没有熨斗的情况下怎么办 裤子磨得发亮怎么办也没有电熨斗 老是在灯箱拍照对眼睛不好怎么办 电信光纤宽带账号密码忘记了怎么办 遇到尴尬的事情自己缓不过来怎么办 注销微信账号显示非法请求怎么办 微信备份以前的被覆盖了怎么办 之前微信号被新微信号覆盖了怎么办 微信发出的消息变成绿色怎么办 收了客户的资金被骗走了怎么办 淘宝退回去的衣服店家不接收怎么办 淘宝同款衣服价格相差很大该怎么办 淘宝买的衣服退回去了不退钱怎么办 淘宝客人退回的衣服有口红印怎么办 淘宝拍产品照片被投诉著作权怎么办 员工总在节假日忙的时候请假怎么办 买东西商家少给了货应该怎么办 买家退回的衣服有污渍卖家该怎么办 商家说衣服有污渍不退怎么办 退回商家换货不给寄应怎么办 毕业照跟拍摄影师拍砸了怎么办 韵达快递寄快递快递单号丢了怎么办 韵达快递把我的户口本弄丢了怎么办 淘宝卖家发货与实际货物不符怎么办 寄出去的快递不知道物流单号怎么办 淘宝买家所需要的货物填错怎么办