keras搭建CNN卷积神经网络模板

import keras
from keras.datasets import mnist
from keras import layers
from keras.utils import np_utils
from keras.optimizers import Adam
from keras.model import load_model
# 画出模型的结构

from keras.utils.vis_utils import plot_model
# 载入数据
(x_train, y_train), (x_test, y_test) = mnist.load_data()

# (60000,28,28)->(60000,28,28,1)
x_train = x_train.reshape(-1,28,28,1)/255.0
x_test = x_test.reshape(-1,28,28,1)/255.0

# 换为one_hot形式
y_train = np_utils.to_categorical(y_train, num_classes=10)
y_test = np_utils.to_categorical(y_test, num_classes=10)

# 定义模型
model = keras.Sequential()

'''
第一个卷积层
input_shape 输入平面
filters 卷积核/滤波器个数
kernel_size 卷积窗口大小
stride 步长
padding padding方式 same/valid
activation 激活函数
'''
model.add(layers.Convolution2D(input_shape=(28,28,1), filters=32, kernel_size=5,\
                               strides=1, padding='same', activation='relu'))
# 第一个池化层
model.add(layers.MaxPooling2D(pool_size=2, strides=2, padding='same'))
# 第二个卷积层
model.add(layers.Convolution2D(filters=64, kernel_size=5,\
                               strides=1, padding='same', activation='relu'))
# 第二个池化层
model.add(layers.MaxPooling2D(pool_size=2, strides=2, padding='same'))
# 把第二个池化层额输出扁平化
model.add(layers.Flatten())
# 第一个全连接层
model.add(layers.Dense(1024, activation='relu'))
# 第二个全连接层
model.add(layers.Dense(10, activation='softmax'))

# 定义优化器
adam = Adam(lr=0.001)

# 定义优化器,loss function, 训练过程中计算准确率
model.compile(optimizer=adam, loss='categorical_crossentropy', metrics=['acc'])

# 画出网络结构
plot_model(model, to_file='model21111111.png', show_shapes=True, show_layer_names='False', rankdir='TB')
# 训练模型
model.fit(x_train, y_train, batch_size=64, epochs=2)

# 保存模型
model = load_model('model1.h5')
# 评估模型
loss, accuracy = model.evaluate(x_test, y_test)
print("test loss:", loss)
print("test accuracy", accuracy)

你可能感兴趣的:(神经网络,卷积,神经网络,卷积神经网络,深度学习,tensorflow)