keras构建卷积神经网络识别cifar10
2017-07-21 13:05
357 查看
环境keras ,python2.7
#coding:utf-8 from keras.models import Sequential from keras.layers import Dense,Activation,Flatten,Convolution2D,MaxPooling2D,Dropout from keras.utils import np_utils from keras.optimizers import Adam from sklearn.metrics import confusion_matrix,classification_report import numpy as np import scipy.io as sio import datetime """ cifar文件包含训练集50000张,测试集合10000张 数据集为matlab类型 data_batch_1训练集样本数据10000张 data_batch_2训练集样本数据10000张 data_batch_3训练集样本数据10000张 data_batch_4训练集样本数据10000张 data_batch_5训练集样本数据10000张 """ start_time = datetime.datetime.now() #learning_rate = 0.0001 #batch_size = 128 #读取数据 def read_data(filename): with open(filename,'rb') as f: dict = sio.loadmat(f) #图片维度要变换 return np.array(dict['data']).reshape(10000,3,32,32).transpose(0,2,3,1),np.array(dict['labels']).reshape(10000,1) #将图片转为灰度图 def to4d(img): return img.reshape(img.shape[0],32,32,3).astype(np.float32)/255 train_total_data,train_total_labels = read_data('/mnt/data/chuanhuang/cifar-10-batches-mat/data_batch_1.mat') #将数据集合并 for batch_num in range(2,6): train_data,train_labels = read_data('/mnt/data/chuanhuang/cifar-10-batches-mat/data_batch_'+str(batch_num)+'.mat') train_total_data = np.vstack((train_total_data,train_data)) train_total_labels = np.vstack((train_total_labels,train_labels)) #train_data,train_labels = read_data('/home/tuoxin/mytensorflow/my_project/project3/cifar-10-batches-py/data_batch_0') train_data = to4d(train_total_data) train_labels = np_utils.to_categorical(train_total_labels,10) test_data,test_labels = read_data('/mnt/data/chuanhuang/cifar-10-batches-mat/test_batch.mat') test_data = to4d(test_data) test_labels = np_utils.to_categorical(test_labels,10) #开始构建模型 model = Sequential() model.add(Convolution2D(32,3,3,border_mode='same',input_shape=(32,32,3),)) model.add(Activation('relu')) model.add(Convolution2D(32,3,3,border_mode='valid')) model.add(Activation('relu')) model.add(MaxPooling2D(pool_size=(2,2))) model.add(Dropout(0.25)) model.add(Convolution2D(64,3,3,border_mode='same')) model.add(Activation('relu')) model.add(Convolution2D(64,3,3,border_mode='valid')) model.add(Activation('relu')) model.add(MaxPooling2D(pool_size=(2,2))) model.add(Dropout(0.25)) model.add(Flatten()) model.add(Dense(512)) model.add(Activation('relu')) model.add(Dropout(0.5)) model.add(Dense(10)) model.add(Activation('softmax')) model.compile(optimizer=Adam(lr=0.0001),loss='categorical_crossentropy',metrics=['accuracy']) model.fit(train_data,train_labels,nb_epoch=200,batch_size=128,shuffle=True,verbose=1) test_score,test_accuracy = model.evaluate(test_data,test_labels) predictions = model.predict(test_data,batch_size=32) #混淆矩阵 print(confusion_matrix(test_labels,predictions)) #report print(classification_report(test_labels,np.array(predictions))) #模型训练了多久 end_time = datetime.datetime.now() total_time = (end_time - start_time).seconds print('total time is:',total_time)
结果:
训练时间太久,手动暂停,从训练分析的趋势看,检测精度还会继续上升相关文章推荐
- 卷积神经网络和CIFAR-10:Yann LeCun专访 Convolutional Nets and CIFAR-10: An Interview with Yann LeCun
- 卷积神经网络实战(可视化部分)——使用keras识别猫咪_
- DeepLearning (五) 基于Keras的CNN 训练cifar-10 数据库
- 卷积神经网络和CIFAR-10:Yann LeCun专访 Convolutional Nets and CIFAR-10: An Interview with Yann LeCun
- Tensorflow在CIFAR-10构建CNN
- 卷积神经网络实战(可视化部分)——使用keras识别猫咪
- tensorflow1.1/构建卷积神经网络识别文本
- Deep Learning-TensorFlow (4) CNN卷积神经网络_CIFAR-10进阶图像分类模型(上)
- tensorflow和Keras 实现kaggle手写识别Digit Recognizer(三)卷积神经网络
- 卷积神经网络实战(可视化部分)——使用keras识别猫咪
- Deep Learning-TensorFlow (5) CNN卷积神经网络_CIFAR-10进阶图像分类模型(下)
- 【caffe学习】caffe第二个比较典型的识别例子CIFAR_10的运行详解
- 机器学习实验(五):用迁移学习方法基于keras建立卷积神经网络进行人体动作识别(HAR)
- Pytorch打怪路(一)pytorch进行CIFAR-10分类(2)定义卷积神经网络
- 基于Keras框架的简易验证码识别网络的构建
- keras/构建卷积神经网络识别mnist
- ConvNetJS CIFAR-10 demo 卷积神经网络分类demo
- keras入门 利用卷积神经网络进行手写数字识别
- CIFAR-10 最近邻分类识别 python3 NearestNeighbor
- TensorFlow应用之进阶版卷积神经网络CNN在CIFAR-10数据集上分类