Bootstrap

如何利用训练好的神经网络进行预测

如何利用训练好的神经网络进行预测?首先重构训练好的神经网络,上一篇文章有介绍,这里只是贴出重构的代码:

import h5py from keras.models import model_from_json  
#读取model  
model=model_from_json(open('my_model_architecture.json').read())  
model.load_weights('my_model_weights.h5')  

然后要输入所预测的手写数字的图片,这里下载了手写数字的图片集。这里是下载地址:
http://dl.download.csdn.net/down11/20161108/673b49764f34b451ef1552babf01cb39.zip?response-content-disposition=attachment%3Bfilename%3D%22train_set.zip%22&OSSAccessKeyId=9q6nvzoJGowBj4q1&Expires=1491384978&Signature=C8WwVZ0x4ufivI1pfFo%2ByzSVvJo%3D

下载解压好之后,复制一张图片到py文件的路径之下。接下来就开始读取图片。

如何利用matplotlib来读取图片呢?

import matplotlib.pyplot as plt # plt 用于显示图片
import matplotlib.image as mpimg # mpimg 用于读取图片
import numpy as np
lena = mpimg.imread('lena.png') # 读取和代码处于同一目录下的 lena.png此时 lena 就已经是一个 np.array 了,可以对它进行任意处理
lena.shape #(512, 512, 3)
plt.imshow(lena) # 显示图片
plt.axis('off') # 不显示坐标轴
plt.show()

接下来就可以预测我们复制到py文件的路径之下的图片中手写数字是多少了,下面贴上代码:

#coding: utf-8
from keras.models import model_from_json
import matplotlib.pyplot as plt # plt 用于显示图片
import matplotlib.image as mpimg # mpimg 用于读取图片
lena = mpimg.imread('38.jpg') # 读取和代码处于同一目录下的
plt.imshow(lena)
plt.show()  # 显示图片
lena = lena.reshape(1, 1, 28, 28).astype('float32')
lena = lena/255    #统一格式
model = model_from_json(open('my_model_architecture.json').read())
model.load_weights('my_model_weights.h5')    #加载模型
pre=model.predict_classes(lena)   #  预测
print(pre)

复制的预测图片:

这里写图片描述

我们预测出来的结果:

这里写图片描述

这里笔者碰在对读取的图片的格式进行修改的时候,出现了一个错误:

ValueError: Error when checking : expected conv2d_1_input to have 4 dimensions, but got array with shape (28, 28)

需要加上这样两句:

lena = lena.reshape(1, 1, 28, 28).astype('float32')
lena = lena/255    #统一格式

这是需要用reshape定义出例子的个数,图片的 通道数,图片的长与宽。具体的参加keras文档。

参考文献:
1、http://www.cnblogs.com/yinxiangnan-charles/p/5928689.html 2017.4.5
2、http://stackoverflow.com/questions/43076259/how-to-predict-my-own-image-using-cnn-in-keras-after-training-on-mnist-dataset 2017.4.5
3、http://keras-cn.readthedocs.io/en/latest/ 2017.4.5

;