Keras CNN卷积神经网络(三)

时间:2021-11-22 13:54:51

导入所需要的lib:

import numpy as np
from keras.datasets import mnist
from keras.utils import np_utils
from keras.models import Sequential
from keras.optimizers import Adam
from keras.layers import Dense,Activation,Convolution2D,MaxPooling2D,Flatten,Dropout

设置随机种子:

np.random.seed(1337) #设置随机种子

加载数据:

(x_train,y_train),(x_test,y_test)=mnist.load_data() #加载数据

数据预处理:

#数据预处理
X_train=x_train.reshape(-1,28,28,1) # (n,单色道,28,28)
X_test=x_test.reshape(-1,28,28,1)
Y_train=np_utils.to_categorical(y_train,num_classes=10)
Y_test=np_utils.to_categorical(y_test,num_classes=10)

标准化:

# 将X_train, X_test的数据格式转为float32
X_train = X_train.astype('float32')
X_test = X_test.astype('float32')
# 归一化
X_train /= 255
X_test /= 255


创建模型:
#建模model =Sequential()

建层:

#卷积 1层
model.add(Convolution2D(
filters=32, # 32个滤波器 -》生成 32深度
kernel_size=3, # 滤波器窗口 大小(3,3)
strides=1,
padding='same', # 过滤模式
# activation='relu', # 激活函数 (可以在这里写)
input_shape=(28,28,1), # 输入形状 就是 图片形状
))
model.add(Activation('relu')) #激活函数
#池化 1层model.add(MaxPooling2D(    pool_size=(2, 2),  # 池化扫描 窗口 大小    strides=2,   # 扫描窗口 每次 移动的步长 2     padding='same' #默认 是 valid))
#卷积 2层model.add(Convolution2D(    filters=64, # 64个滤波器 -》生成 64深度    kernel_size=3, # 滤波器窗口 大小(3,3)    padding='same', # 过滤模式    activation='relu',    # 激活函数 (可以在这里写)))
#池化 2层model.add(MaxPooling2D(    pool_size=(2, 2),  # 池化扫描 窗口 大小    strides=2,    padding='same', #默认 是 valid))model.add(Dropout(0.25)) #防止过拟合
#扁平化model.add(Flatten())
#全连接model.add(Dense(128))model.add(Activation('relu'))model.add(Dropout(0.5))model.add(Dense(10))model.add(Activation('softmax'))
#自己定义 优化器adam=Adam(lr=1e-4)# 输出模型的参数信息model.summary()


搭建模型:

#搭建模型
model.compile(optimizer='Adam',loss='categorical_crossentropy',metrics=['accuracy'])

训练:

model.fit(X_train,Y_train,epochs=1,batch_size=32)
#评估
loss,accuracy=model.evaluate(X_test,Y_test)
print(loss)
print(accuracy)


结果:

10000/10000 [==============================] - ETA: 0s
0.0454092171811
0.9847