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"
}
l 与教程中不同的是加了最后一行"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()