和tensorflow一样,用keras库建立MLP神经网络。构建网络加载数据集,进行建模,然后训练模型,进行模型测试以及对模型的评估。
从keras中导入模块
import tensorflow as tf
import keras
import os
from keras.models import Sequential
from keras.layers import Dense,Activation
from keras.optimizers import SGD
from tensorflow.examples.tutorials.mnist import input_data
加载数据集,可以用注释的部分,由于我的还是报错,所以我换了这一种方法,效果也还是差不多。
# mnist_home=os.path.join(datasetslib.datasets_root,'mnist')
# mnist=input_data.read_data_sets(mnist_home,one_hot=True)
mnist = input_data.read_data_sets('MNIST_data',one_hot=True)
x_train=mnist.train.images
x_test=mnist.test.images
y_train=mnist.train.labels
y_test=mnist.test.labels
#print(x_train.shape,y_train.shape)
#print(x_test.shape,x_test.shape)
定义超参数
num_inputs=784
num_outputs=10
num_layers=2
num_neurons=[]
for i in range(num_layers):
num_neurons.append(256)
learning_rate=0.01
n_epochs=50
batch_size=100
建立模型
#创建一个顺序模型
model=Sequential()
#添加第一个隐藏层,在第一个隐藏层中必须添加张量的形状
model.add(Dense(units=num_neurons[0],activation='relu',
input_shape=(num_inputs,)))
#添加第二个隐藏层
model.add(Dense(units=num_neurons[1],activation='relu'))
#添加具有激活函数softmax的输出层
model.add(Dense(units=num_outputs,activation='softmax'))
#输出模型的详细信息
model.summary()
模型建立好以后得到结果:
使用SGD优化器编译模型和训练模型
#使用SGD优化器编译模型
model.compile(loss='categorical_crossentropy',
optimizer=SGD(lr=learning_rate),
metrics=['accuracy'])
#训练模型
model.fit(x_train,y_train,
batch_size=batch_size,
epochs=n_epochs)
在模型训练的过程中可以看到每次训练迭代的损失函数值和分类精度:
10-40省略
评估模型并输出损失函数值和分类精度
score=model.evaluate(x_test,y_test)
print('\n Test loss:',score[0])
print('Test accuracy:',score[1])
输出结果: