[置顶] 如何用keras cnn 做kaggle猫狗大战图片识别
2017-05-17 19:29
302 查看
1、数据简介
这份数据集来源于Kaggle,原数据集有12500只猫和12500只狗,因单机cpu跑,这里我只选取了2000张图片,工具用的是基于tensorflow的keras。数据如下所示:2、数据预处理
这部分代码如下:import os # 处理字符串路径 import glob # 查找文件 from keras.models import Sequential # 导入Sequential模型 from keras.layers.core import Flatten, Dense, Dropout from keras.layers.convolutional import Convolution2D, MaxPooling2D, ZeroPadding2D from keras.optimizers import SGD import numpy as np from pandas import Series, DataFrame 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 from keras.optimizers import SGD, Adadelta, Adagrad from keras.utils import np_utils, generic_utils from six.moves import range #加载数据 import os from PIL import Image import numpy as np #读取文件夹train下的42000张图片,图片为彩色图,所以为3通道, #如果是将彩色图作为输入,图像大小224*224 def load_data(): sed = 1000 data = np.empty((2000,224,224,3),dtype="float32") label = np.empty((2000,)) imgs = os.listdir("d:/cat_dog/train/") num = len(imgs) times = 0 time = 0 for i in range(num): if imgs[i].split('.')[0] == 'cat': if times ==1000: continue img = Image.open("d:/cat_dog/train/" + imgs[i]) arr = np.asarray(img, dtype="float32") arr.resize((224,224,3)) data[i, :, :, :] = arr label[i] = 0 times +=1 else: img = Image.open("d:/cat_dog/train/" + imgs[i]) arr = np.asarray(img, dtype="float32") arr.resize((224, 224, 3)) data[1000+time, :, :, :] = arr label[1000+time] = 1 time +=1 if time == 1000: break return data,label data,label = load_data() print(data.shape) train_data = data[:1800] train_labels = label[:1800] validation_data = data[1800:] validation_labels = label[1800:]
3、使用cnn训练
本来想用vgg-16训练,无奈机子太渣,先上cnn,不过也能达到七八十正确率model = Sequential() #第一个卷积层,4个卷积核,每个卷积核大小5*5。 #激活函数用tanh #你还可以在model.add(Activation('tanh'))后加上dropout的技巧: model.add(Dropout(0.5)) model.add(Convolution2D(4, 5, 5,input_shape=(224, 224,3))) model.add(Activation('relu')) model.add(MaxPooling2D(pool_size=(2, 2))) #第二个卷积层,8个卷积核,每个卷积核大小3*3。 #激活函数用tanh #采用maxpooling,poolsize为(2,2) model.add(Convolution2D(8, 3, 3)) 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)) model.add(Activation('relu')) model.add(MaxPooling2D(pool_size=(2, 2))) #全连接层,先将前一层输出的二维特征图flatten为一维的。 model.add(Flatten()) model.add(Dense(128)) model.add(Activation('relu')) model.add(Dropout(0.5)) #sigmoid分类,输出是2类别 model.add(Dense(1)) model.add(Activation('sigmoid')) model.compile(loss='binary_crossentropy', optimizer='rmsprop', metrics=['accuracy']) model.fit(train_data, train_labels, nb_epoch=10, batch_size=100, validation_data=(validation_data, validation_labels))
代码很简单,相信大家都能看懂,所以不多做解释。
相关文章推荐
- 如何通过图片识别用的什么字体?
- [置顶] 如何高效使用和管理Bitmap--图片缓存管理模块的设计与实现
- linux系统如何使用tess4j(java)进行ocr图片文字识别
- 图片中的文字要如何识别?具体怎样操作?
- 如何使用tesseract-ocr4.0识别图片文字
- 教您如何识别真假ZIPPO打火机『图片鉴别』
- 图片如何实现局部识别
- 如何识别图片中的文字
- 不用软件如何识别并提取图片上的文字
- [置顶] 微信小程序识别二维码跳转 图片预览,放大图片 + 识别图中二维码 出现的坑2个
- 如何设置图片以及plist文件,使能够自动识别ipad以及iphone
- [置顶] 使用ImageLoader加载网络图片时,如何获取加载进度,如何设置进度条
- [置顶] viewPager+photoView实现图片轮播和手势缩放功能 支持手势缩放的imageView 如何实现相册左右滑动和手势缩放 如何让图片自适应控件大小 photoView如何使用(上)
- 如何在图片中加入噪点骗过Google最顶尖的图像识别AI
- 如何识别图片中的文字内容
- [置顶] 安卓图片OCR识别技术 tesseract研究文档-20130328-v1
- 如何识别图片中的文字
- [置顶] 简述如何嵌套使用Viewpager,点击图片放大查看图片,并且使用PhotoView进行图片处理
- [置顶] 如何将本地图片嵌入网页?
- 如何识别图片上的文字?怎么将图片中的文字识别