Keras手写数字识别

Keras安装:

http://www.360doc.com/content/17/0126/22/40028542_624943620.shtml

l 在C:\Users\唐正\.keras内建一个keras.json文件,内容如下:(创建.keras文件夹时会提示没有文件名,此时在keras后面加一个.就可以创建了)

{  
    "image_dim_ordering": "th",   
    "epsilon": 1e-07,   
    "floatx": "float32",   
    "backend": "theano",
    "image_data_format": "channels_first"	
} 

与教程中不同的是加了最后一行"image_data_format": "channels_first",不加的时候会报ValueError: ('The specified size contains a dimension with value <= 0', (-768, 128))错误。原因在于后台使用的是theano。

l 在C:\Users\唐正内创建.theanorc.txt,内容如下:

[global]  
  
openmp=False  
  
device = cuda
  
optimizer_including=cudnn  
  
floatX = float32  
  
allow_input_downcast=True  
  
[lib]  
  
cnmem = 0.8  
  
[blas]  
  
ldflags=  
  
[gcc]  
  
cxxflags=-ID:\Anaconda3\MinGW
  
[nvcc]  
  
flags = -LD:\Anaconda3\libs  
  
compiler_bindir = D:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin 
  
fastmath = True

l 教程中添加了PYTHONPATH路径,实际不用添加。

数字识别代码:

#coding: utf-8
#Simple CNN
import gzip
import pickle
import numpy
from keras.models import Sequential
from keras.layers import Dense
from keras.layers import Dropout
from keras.layers import Flatten
from keras.layers.convolutional import Convolution2D
from keras.layers.convolutional import MaxPooling2D
from keras.utils import np_utils

seed = 7
numpy.random.seed(seed)
def load_data():
    with gzip.open('D:/学习/网易云课堂-深度学习/mnist.pkl.gz') as fp:
        training_data, valid_data, test_data = pickle.load(fp, encoding="bytes")
    return training_data, valid_data, test_data
#加载数据
(X_train, y_train), (x_validation, y_validation),(X_test, y_test) = load_data()
# reshape to be [samples][channels][width][height]
X_train = X_train.reshape(X_train.shape[0], 1, 28, 28).astype('float32')
X_test = X_test.reshape(X_test.shape[0], 1, 28, 28).astype('float32')

# normalize inputs from 0-255 to 0-1
X_train = X_train / 255
X_test = X_test / 255

# one hot encode outputs
y_train = np_utils.to_categorical(y_train)
y_test = np_utils.to_categorical(y_test)
num_classes = y_test.shape[1]

# define a simple CNN model
def baseline_model():
    # create model
    model = Sequential()
    model.add(Convolution2D(32, 5, 5, border_mode='valid', input_shape=(28, 28, 1), activation='relu'))
    model.add(MaxPooling2D(pool_size=(2, 2)))
    model.add(Dropout(0.2))
    model.add(Flatten())
    model.add(Dense(128, activation='relu'))
    model.add(Dense(num_classes, activation='softmax'))
    # Compile model
    model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
    return model

# build the model
model = baseline_model()

# Fit the model
model.fit(X_train, y_train, validation_data=(X_test, y_test), nb_epoch=10, batch_size=128, verbose=2)

# Final evaluation of the model
scores = model.evaluate(X_test, y_test, verbose=0)
print("CNN Error: %.2f%%" % (100-scores[1]*100))


l 注意

pickle.load(fp, encoding="bytes")
  处需要加一个参数encoding=”bytes”,否则会出编码错误,原因在于使用的是python3

l 可以使用如下代码查看图片:

from PIL import Image
I = (X_train, y_train)[0][0]
I.resize((28, 28))
im = Image.fromarray((I*256).astype('uint8'))
im.show()


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,我可以为你提供一个使用Keras实现数字识别的简单示例。 首先,你需要安装Keras和NumPy库。然后,你可以使用MNIST数据集来训练模型,该数据集包含大量数字图像。 下面是一个使用Keras实现数字识别的示例代码: ```python import keras from keras.datasets import mnist from keras.models import Sequential from keras.layers import Dense, Dropout, Flatten from keras.layers import Conv2D, MaxPooling2D # 加载MNIST数据集 (x_train, y_train), (x_test, y_test) = mnist.load_data() # 将图像数据转换为4D张量 x_train = x_train.reshape(x_train.shape[0], 28, 28, 1) x_test = x_test.reshape(x_test.shape[0], 28, 28, 1) input_shape = (28, 28, 1) # 将图像数据转换为浮点数并归一化 x_train = x_train.astype('float32') x_test = x_test.astype('float32') x_train /= 255 x_test /= 255 # 将标签转换为One-hot编码 y_train = keras.utils.to_categorical(y_train, 10) y_test = keras.utils.to_categorical(y_test, 10) # 构建模型 model = Sequential() model.add(Conv2D(32, kernel_size=(3, 3), activation='relu', input_shape=input_shape)) model.add(Conv2D(64, (3, 3), activation='relu')) model.add(MaxPooling2D(pool_size=(2, 2))) model.add(Dropout(0.25)) model.add(Flatten()) model.add(Dense(128, activation='relu')) model.add(Dropout(0.5)) model.add(Dense(10, activation='softmax')) # 编译模型 model.compile(loss=keras.losses.categorical_crossentropy, optimizer=keras.optimizers.Adadelta(), metrics=['accuracy']) # 训练模型 batch_size = 128 epochs = 10 model.fit(x_train, y_train, batch_size=batch_size, epochs=epochs, verbose=1, validation_data=(x_test, y_test)) # 评估模型 score = model.evaluate(x_test, y_test, verbose=0) print('Test loss:', score[0]) print('Test accuracy:', score[1]) ``` 这个示例代码使用了一个卷积神经网络来训练模型,这种网络结构能够有效地识别图像中的特征。你可以根据你的需求对模型进行调整,比如增加更多的卷积层、池化层或全连接层等,以提高模型的准确率。 当你运行这个代码时,模型将会被训练并评估。在训练完成后,模型将对测试集中的图像进行预测,并输出测试准确率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值