实现1:
import keras
import tensorflow as tf
from keras.datasets import mnist
(train_images,train_labels),(test_images,test_labels)=mnist.load_data()
from keras import models
from keras import layers
network = models.Sequential()
network.add(layers.Dense(512,activation='relu',input_shape=(28*28,)))
network.add(layers.Dense(10,activation='softmax'))
network.compile(optimizer='rmsprop',loss='categorical_crossentropy',metrics=['accuracy'])
train_images=train_images.reshape((6000,28*28))
train_images=train_images.astpye('float32')/255
test_images=test_images.reshape((1000,28*28))
test_images=test_images.astpye('float32')/255
from keras.utils import to_categorical
train_labels=to_categorical(train_labels)
test_labels=to_categorical(test_labels)
network.fit(train_images,train_labels,epochs=5,batch_size=128)
test_loss,test_acc=network.evaluate(test_images,test_labels)
print('test_acc:',test_acc)
输出结果:
test_acc: 0.9771
实现2:
import numpy as np
np.random.seed(123)
from keras.models import Sequential
from keras.layers import Dense, Dropout, Activation, Flatten
from keras.layers.convolutional import Conv2D
from keras.layers.pooling import MaxPooling2D
from keras.layers import Embedding, LSTM
from keras.utils import np_utils
from keras.datasets import mnist
# 载入mnist数据集(第一次执行需要下载数据)
def loda_mnist():
(X_train, y_train), (X_test, y_test) = mnist.load_data()
# 5. Preprocess input data
X_train = X_train.reshape(X_train.shape[0], 28, 28, 1)
X_test = X_test.reshape(X_test.shape[0], 28, 28, 1)
X_train /= 255
X_train = X_train.astype('float32')
X_test = X_test.astype('float32')
X_test /= 255
Y_train = np_utils.to_categorical(y_train, 10)
Y_test = np_utils.to_categorical(y_test, 10)
print
X_train.shape, Y_train.shape
print
X_test.shape, Y_test.shape
return X_train, Y_train, X_test, Y_test
if __name__ == '__main__':
X_train, Y_train, X_test, Y_test = loda_mnist();
model = Sequential()
# 2个卷积层
model.add(Conv2D(32, (5, 5), activation='relu', input_shape=(28, 28, 1))) # 第一层卷积
model.add(MaxPooling2D(pool_size=(2, 2))) # 第一层池化
model.add(Conv2D(64, (5, 5), activation='relu', input_shape=(14, 14, 1))) # 第二层卷积
model.add(MaxPooling2D(pool_size=(2, 2))) # 第二层池化
model.add(Dropout(0.25)) # 添加节点keep_prob
# 2个全连接层
model.add(Flatten()) # 将多维数据压成1维,方便全连接层操作
model.add(Dense(1024, activation='relu')) # 添加全连接层
model.add(Dropout(0.5))
model.add(Dense(10, activation='softmax'))
# 编译模型
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
# 训练模型
model.fit(X_train, Y_train, batch_size=32, nb_epoch=10, verbose=1)
# 评估模型
score = model.evaluate(X_test, Y_test, verbose=0)
print(score)
运行结果
[0.03595795893389154, 0.9936]