keras用CNN识别mnist

本文展示了如何使用Keras构建一个卷积神经网络(CNN)来识别MNIST数据集的手写数字。首先,加载并预处理MNIST数据,然后搭建CNN模型,包括两个卷积层和两个最大池化层,最后接全连接层。模型训练1个周期,评估测试集的损失和准确率。
摘要由CSDN通过智能技术生成
import numpy as np
np.random.seed(1337) #重复性
from keras.datasets import mnist
from keras.utils import np_utils
from keras.models import Sequential
from keras.layers import Dense
from keras.layers import Activation,Convolution2D,MaxPool2D,Flatten
from keras.optimizers import Adam
from tensorflow.examples.tutorials.mnist import input_data

mnist = input_data.read_data_sets("/Users/wutao/PycharmProjects/手写数字识别/MNIST_data", one_hot=True)
X_train, Y_train = mnist.train.images, mnist.train.labels
X_test, Y_test = mnist.test.images, mnist.test.labels
X_train = X_train.reshape(-1, 1, 28, 28).astype('float32')
X_test = X_test.reshape(-1, 1, 28, 28).astype('float32')

# 搭建CNN
model = Sequential()

# conv1
model.add(Convolution2D(
    nb_filter=32,
    nb_row = 5,
    nb_col = 5,
    border_mode='same',
    input_shape= (1,28,28),
    ))
model.add(Activation('relu'))

# pooling1
model.add(MaxPool2D(
    pool_size=(2,2),
    strides=(3,3),
    border_mode='same'
    ))

# conv2
model.add(Convolution2D(64,5,5,border_mode="same"))
model.add(Activation('relu'))

# pooling2
model.add(MaxPool2D(pool_size=(2,2),border_mode='same'))

# 全连接层1
model.add(Flatten())
model.add(Dense(1024))
model.add(Activation('relu'))

# 全连接层2
model.add(Dense(10))
model.add(Activation('softmax'))

# optimizer
adam = Adam(lr=1e-4)

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

print('Training...................')
model.fit(X_train,Y_train,nb_epoch=1,batch_size=32)

print('\nTesting..................')
loss,accuracy = model.evaluate(X_test,Y_test)

print('test loss:',loss)
print('test accuracy:',accuracy)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值