简单CNN的实现-基于Cifar10数据集

1.数据加载

  数据来源为Cifar10,可以从这里下载,我下载的是二进制版本,好像python版本更方便.下载完成后需要处理数据,代码如下所示,最后得到的数据格式为32*32*3的矩阵.

def load_cifar10(path):

    train_data=np.ones((1,3073),dtype=np.uint8)

    #将训练数据进行拼接
    for i in range(1,6):
        data_path=os.path.join(path,'data_batch_'+str(i)+'.bin')

        with open(data_path,'rb') as f:
            data=np.fromfile(f,dtype=np.uint8).reshape(10000,3073)
            train_data=np.concatenate((train_data,data))

    #调整训练数据维度,原因见cifar10的数据说明
    train_labels=train_data[1:,:1]
    train_images=train_data[1:,1:].reshape(50000,3,32,32).transpose(0,2,3,1)

    #获取训练数据
    data_path = os.path.join(path, 'test_batch.bin')
    with open(data_path,'rb') as f:
        test_data=np.fromfile(data_path,dtype=np.uint8).reshape(10000,3073)
    test_labels=test_data[:,:1]
    test_images=test_data[:,1:].reshape(10000,3,32,32).transpose(0,2,3,1)

    return (train_images,train_labels),(test_images,test_labels)

2.模型定义及训练

import dataLoad
from keras.utils import np_utils
from keras.models import Sequential
from keras.layers import Dense,Conv2D,MaxPooling2D,Dropout,Flatten,BatchNormalization

#加载数据
(x_train,y_train),(x_test,y_test)=dataLoad.load_cifar10('Cifar10_data')

#数据预处理
x_train=x_train.astype('float32')/255   #归一化处理
x_test=x_test.astype('float32')/255

y_train=np_utils.to_categorical(y_train,num_classes=10) #将标签转化为one-hot向量
y_test=np_utils.to_categorical(y_test,num_classes=10)

#定义模型
model=Sequential()

model.add(Conv2D(32,(3,3),padding='same',input_shape=x_train.shape[1:],activation='relu'))
model.add(Conv2D(32,(3,3),padding='same',input_shape=(32,32,3),activation='relu'))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Dropout(0.25))

model.add(Conv2D(64,(3,3),padding='same',input_shape=(32,32,3),activation='relu'))
model.add(Conv2D(64,(3,3),padding='same',input_shape=(32,32,3),activation='relu'))
model.add(MaxPooling2D(pool_size=(2,2)))

model.add(Flatten())
model.add(Dense(512,activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(10,activation='softmax'))

model.compile(loss='categorical_crossentropy',optimizer='adam',metrics=['accuracy'])

model.summary()

#训练模型
print('-----------Training-----------')
model.fit(x_train,y_train,batch_size=32,epochs=30,verbose=2)

#评估模型
print('-----------Testing-------------')
scores=model.evaluate(x_test,y_test,verbose=0)
print('loss:%s,accuracy:%s' % (scores[0],scores[1]))

#模型保存
model.save('cifar10_cnn_model.h5')

 3.参考内容

  https://www.cnblogs.com/Jerry-Dong/p/8109938.html  

 

 

转载于:https://www.cnblogs.com/ylsj/p/9887454.html

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值