Keras入门例子:cnn实现手写识别
来源:互联网 发布:最优化方法第四章答案 编辑:程序博客网 时间:2024/05/23 11:43
import numpy as np
from keras.datasets import mnist
from keras.models import Sequential
from keras.layers import Dense, Dropout, Activation, Flatten
from keras.layers import Convolution2D, MaxPooling2D
from keras.utils import np_utils
from keras import backend as K
img_rows, img_cols = 28, 28
# 卷积核个数
nb_filters = 32
# 池化层大小
pool_size = (2,2)
# 卷积核大小
kernel_size = (3,3)
# 加载keras中的mnist数据集 分为60,000个训练集,10,000个测试集
(X_train, y_train), (X_test, y_test) = mnist.load_data()
# 将100张RGB三通道的16*32彩色图表示为(100,16,32,3),
# 第一个维度是样本维,表示样本的数目,
# 第二和第三个维度是高和宽,
# 最后一个维度是通道维,表示颜色通道数
X_train = X_train.reshape(X_train.shape[0], img_rows, img_cols, 1)
X_test = X_test.reshape(X_test.shape[0], img_rows, img_cols, 1)
input_shape = (img_rows, img_cols, 1)
# 将X_train, X_test的数据格式转为float32
X_train = X_train.astype('float32')
X_test = X_test.astype('float32')
# 归一化
X_train /= 255
X_test /= 255
# 将类别向量(从0到nb_classes的整数向量)映射为二值类别矩阵,
# 相当于将向量用one-hot重新编码
Y_train = np_utils.to_categorical(y_train, nb_classes)
Y_test = np_utils.to_categorical(y_test, nb_classes)
# 建立序贯模型
model = Sequential()
# 卷积层,对二维输入进行滑动窗卷积
# 当使用该层为第一层时,应提供input_shape参数,在tf模式中,通道维位于第三个位置
# border_mode:边界模式,为"valid","same"或"full",即图像外的边缘点是补0
# 还是补成相同像素,或者是补1
model.add(Convolution2D(nb_filters, kernel_size[0] ,kernel_size[1],
border_mode='valid',
input_shape=input_shape))
model.add(Activation('relu'))
# 卷积层,激活函数是ReLu
model.add(Convolution2D(nb_filters, kernel_size[0], kernel_size[1]))
model.add(Activation('relu'))
# 池化层,选用Maxpooling,给定pool_size,dropout比例为0.25
model.add(MaxPooling2D(pool_size=pool_size))
model.add(Dropout(0.25))
# Flatten层,把多维输入进行一维化,常用在卷积层到全连接层的过渡
model.add(Flatten())
# 包含128个神经元的全连接层,激活函数为ReLu,dropout比例为0.5
model.add(Dense(128))
model.add(Activation('relu'))
model.add(Dropout(0.5))
# 包含10个神经元的输出层,激活函数为Softmax
model.add(Dense(nb_classes))
model.add(Activation('softmax'))
# 输出模型参数信息
model.summary()
# 编译
model.compile(loss='categorical_crossentropy',
optimizer='adadelta',
metrics=['accuracy'])
# 开始训练
model.fit(X_train, Y_train, batch_size=batch_size, nb_epoch=nb_epoch,
verbose=1, validation_data=(X_test, Y_test))
# 误差计算
score = model.evaluate(X_test, Y_test, verbose=0)
print('Test score:', score[0])
from keras.datasets import mnist
from keras.models import Sequential
from keras.layers import Dense, Dropout, Activation, Flatten
from keras.layers import Convolution2D, MaxPooling2D
from keras.utils import np_utils
from keras import backend as K
#参数初始化
batch_size = 128nb_classes = 10
nb_epoch = 12
np.random.seed(1337)
img_rows, img_cols = 28, 28
# 卷积核个数
nb_filters = 32
# 池化层大小
pool_size = (2,2)
# 卷积核大小
kernel_size = (3,3)
# 加载keras中的mnist数据集 分为60,000个训练集,10,000个测试集
(X_train, y_train), (X_test, y_test) = mnist.load_data()
# 将100张RGB三通道的16*32彩色图表示为(100,16,32,3),
# 第一个维度是样本维,表示样本的数目,
# 第二和第三个维度是高和宽,
# 最后一个维度是通道维,表示颜色通道数
X_train = X_train.reshape(X_train.shape[0], img_rows, img_cols, 1)
X_test = X_test.reshape(X_test.shape[0], img_rows, img_cols, 1)
input_shape = (img_rows, img_cols, 1)
# 将X_train, X_test的数据格式转为float32
X_train = X_train.astype('float32')
X_test = X_test.astype('float32')
# 归一化
X_train /= 255
X_test /= 255
# 将类别向量(从0到nb_classes的整数向量)映射为二值类别矩阵,
# 相当于将向量用one-hot重新编码
Y_train = np_utils.to_categorical(y_train, nb_classes)
Y_test = np_utils.to_categorical(y_test, nb_classes)
# 建立序贯模型
model = Sequential()
# 卷积层,对二维输入进行滑动窗卷积
# 当使用该层为第一层时,应提供input_shape参数,在tf模式中,通道维位于第三个位置
# border_mode:边界模式,为"valid","same"或"full",即图像外的边缘点是补0
# 还是补成相同像素,或者是补1
model.add(Convolution2D(nb_filters, kernel_size[0] ,kernel_size[1],
border_mode='valid',
input_shape=input_shape))
model.add(Activation('relu'))
# 卷积层,激活函数是ReLu
model.add(Convolution2D(nb_filters, kernel_size[0], kernel_size[1]))
model.add(Activation('relu'))
# 池化层,选用Maxpooling,给定pool_size,dropout比例为0.25
model.add(MaxPooling2D(pool_size=pool_size))
model.add(Dropout(0.25))
# Flatten层,把多维输入进行一维化,常用在卷积层到全连接层的过渡
model.add(Flatten())
# 包含128个神经元的全连接层,激活函数为ReLu,dropout比例为0.5
model.add(Dense(128))
model.add(Activation('relu'))
model.add(Dropout(0.5))
# 包含10个神经元的输出层,激活函数为Softmax
model.add(Dense(nb_classes))
model.add(Activation('softmax'))
# 输出模型参数信息
model.summary()
# 编译
model.compile(loss='categorical_crossentropy',
optimizer='adadelta',
metrics=['accuracy'])
# 开始训练
model.fit(X_train, Y_train, batch_size=batch_size, nb_epoch=nb_epoch,
verbose=1, validation_data=(X_test, Y_test))
# 误差计算
score = model.evaluate(X_test, Y_test, verbose=0)
print('Test score:', score[0])
print('Test accuracy:', score[1])
阅读全文
0 0
- Keras入门例子:cnn实现手写识别
- keras 实现CNN 进行手写字符识别
- Keras入门课2 -- 使用CNN识别mnist手写数字
- keras 入门 --手写数字识别
- cnn实现手写数字识别
- keras入门实战:手写数字识别
- cnn 识别手写数字的实现
- cnn实现手写识别字体代码详解
- 用Tensorflow实现CNN手写数字识别
- tensorflow实现CNN识别手写数字
- CNN实现MNIST手写数字识别
- keras---minist手写识别
- Keras CNN 数字识别
- keras入门 利用卷积神经网络进行手写数字识别
- Keras 入门课1 -- 用MLP识别mnist手写字符
- CNN 手写数字识别
- cnn-mnist手写识别
- Keras入门课3 -- 使用CNN识别cifar10数据集
- Linux用户空间增加i2c设备
- ScrollView嵌套ListView,listview高度问题全展示
- 记录web项目部署到阿里云服务器步骤
- 海康摄像头iDS-2CD6810F/C linux64位SDK
- iFunk双子变形本,乐享即刻升级
- Keras入门例子:cnn实现手写识别
- 表达式求值(C实现,实现多括号,浮点数)---栈的实现以及运用。
- 用SharedPreferences存储集合
- C语言之旅(10)a++和++a的区别
- Linux下ssh免密钥登录
- ES6新特性概览
- Java基础——Java NIO详解(二)
- TensorFlow入门(九)使用 tf.train.Saver()保存模型
- IntelliJ IDEA Community Edition 2017.2.5配置