100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > 用Keras搭建神经网络 简单模版(三)—— CNN 卷积神经网络(手写数字图片识别)...

用Keras搭建神经网络 简单模版(三)—— CNN 卷积神经网络(手写数字图片识别)...

时间:2023-07-04 04:59:48

相关推荐

用Keras搭建神经网络 简单模版(三)—— CNN 卷积神经网络(手写数字图片识别)...

# -*- coding: utf-8 -*-import numpy as npnp.random.seed(1337) #for reproducibility再现性from keras.datasets import mnistfrom keras.utils import np_utilsfrom keras.models import Sequential#按层from keras.layers import Dense, Activation,Convolution2D, MaxPooling2D, Flattenimport matplotlib.pyplot as pltfrom keras.optimizers import RMSpropfrom keras.optimizers import Adam

从mnist下载手写数字图片数据集,图片为28*28,将每个像素的颜色(0到255)改为(0倒1),将标签y变为10个长度,若为1,则在1处为1,剩下的都标为0。

#dowmload the mnisst the path '~/.keras/datasets/' if it is the first time to be called#x shape (60000 28*28),y shape(10000,)(x_train,y_train),(x_test,y_test) = mnist.load_data()#0-9的图片数据集#data pre-processingx_train = x_train.reshape(-1,1,28,28)#-1代表个数不限,1为高度,黑白照片高度为1x_test = x_test.reshape(-1,1,28,28)y_train = np_utils.to_categorical(y_train, num_classes=10) #把标签变为10个长度,若为1,则在1处为1,剩下的都标为0y_test = np_utils.to_categorical(y_test,num_classes=10)

接下来搭建CNN

卷积->池化->卷积->池化

使图片从(1,28,28)->(32,28,28)->(32,14,14)->(64,14,14) ->(64,7,7)

#Another way to build CNNmodel = Sequential()#Conv layer 1 output shape (32,28,28)model.add(Convolution2D(nb_filter =32,#滤波器装了32个,每个滤波器都会扫过这个图片,会得到另外一整张图片,所以之后得到的告诉是32层nb_row=5,nb_col=5,border_mode='same', #padding methodinput_shape=(1,#channels 通道数28,28), #height & width 长和宽 ))model.add(Activation('relu'))#Pooling layer 1 (max pooling) output shape (32,14,14)model.add(MaxPooling2D(pool_size=(2,2), #2*2strides=(2,2), #长和宽都跳两个再pool一次border_mode='same', #paddingmethod ))#Conv layers 2 output shape (64,14,14)model.add(Convolution2D(64,5,5,border_mode='same'))model.add(Activation('relu'))#Pooling layers 2 (max pooling) output shape (64,7,7)model.add(MaxPooling2D(pool_size=(2,2), border_mode='same'))

构建全连接神经网络

#Fully connected layer 1 input shape (64*7*7) = (3136)#Flatten 把三维抹成一维,全连接model.add(Flatten())model.add(Dense(1024))model.add(Activation('relu'))#Fully connected layer 2 to shape (10) for 10 classesmodel.add(Dense(10)) #输出10个单位model.add(Activation('softmax')) #softmax用来分类#Another way to define optimizeradam = Adam(lr=1e-4)# We add metrics to get more results you want to pile( #编译optimizer = adam,loss = 'categorical_crossentropy',metrics=['accuracy'], #在更新时同时计算一下accuracy)

训练和测试

print("Training~~~~~~~~")#Another way to train the modelmodel.fit(x_train,y_train, epochs=1, batch_size=32) #训练2大批,每批32个print("\nTesting~~~~~~~~~~")#Evalute the model with the metrics we define earlierloss,accuracy = model.evaluate(x_test,y_test)print('\ntest loss:',loss)print('\ntest accuracy:', accuracy)

全代码:

# -*- coding: utf-8 -*-import numpy as npnp.random.seed(1337) #for reproducibility再现性from keras.datasets import mnistfrom keras.utils import np_utilsfrom keras.models import Sequential#按层from keras.layers import Dense, Activation,Convolution2D, MaxPooling2D, Flattenimport matplotlib.pyplot as pltfrom keras.optimizers import RMSpropfrom keras.optimizers import Adam#dowmload the mnisst the path '~/.keras/datasets/' if it is the first time to be called#x shape (60000 28*28),y shape(10000,)(x_train,y_train),(x_test,y_test) = mnist.load_data()#0-9的图片数据集#data pre-processingx_train = x_train.reshape(-1,1,28,28)#-1代表个数不限,1为高度,黑白照片高度为1x_test = x_test.reshape(-1,1,28,28)y_train = np_utils.to_categorical(y_train, num_classes=10) #把标签变为10个长度,若为1,则在1处为1,剩下的都标为0y_test = np_utils.to_categorical(y_test,num_classes=10)#Another way to build CNNmodel = Sequential()#Conv layer 1 output shape (32,28,28)model.add(Convolution2D(nb_filter =32,#滤波器装了32个,每个滤波器都会扫过这个图片,会得到另外一整张图片,所以之后得到的告诉是32层nb_row=5,nb_col=5,border_mode='same', #padding methodinput_shape=(1,#channels 通道数28,28), #height & width 长和宽 ))model.add(Activation('relu'))#Pooling layer 1 (max pooling) output shape (32,14,14)model.add(MaxPooling2D(pool_size=(2,2), #2*2strides=(2,2), #长和宽都跳两个再pool一次border_mode='same', #paddingmethod ))#Conv layers 2 output shape (64,14,14)model.add(Convolution2D(64,5,5,border_mode='same'))model.add(Activation('relu'))#Pooling layers 2 (max pooling) output shape (64,7,7)model.add(MaxPooling2D(pool_size=(2,2), border_mode='same'))#Fully connected layer 1 input shape (64*7*7) = (3136)#Flatten 把三维抹成一维,全连接model.add(Flatten())model.add(Dense(1024))model.add(Activation('relu'))#Fully connected layer 2 to shape (10) for 10 classesmodel.add(Dense(10)) #输出10个单位model.add(Activation('softmax')) #softmax用来分类#Another way to define optimizeradam = Adam(lr=1e-4)# We add metrics to get more results you want to pile( #编译optimizer = adam,loss = 'categorical_crossentropy',metrics=['accuracy'], #在更新时同时计算一下accuracy )print("Training~~~~~~~~")#Another way to train the modelmodel.fit(x_train,y_train, epochs=1, batch_size=32) #训练2大批,每批32个print("\nTesting~~~~~~~~~~")#Evalute the model with the metrics we define earlierloss,accuracy = model.evaluate(x_test,y_test)print('\ntest loss:',loss)print('\ntest accuracy:', accuracy)

View Code

输出:

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。