keras下对60000张图片的学习训练测试其准确率与损失率
使用深度学习新秀框架keras对图片进行学习其特征并识别用到了一些重要的模块。具体代码如下:
from future import print_function
import numpy as np
np.random.seed(1337)
import keras
from keras.datasets import mnist
from keras.models import Sequential
from keras.layers.core import Dense, Dropout, Activation
from keras.optimizers import SGD, Adam, RMSprop
from keras.utils import np_utils
import matplotlib.pyplot as plt
class LossHistory(keras.callbacks.Callback):
def on_train_begin(self, logs={}):
self.losses = {‘batch’:[], ‘epoch’:[]}
self.accuracy = {‘batch’:[], ‘epoch’:[]}
self.val_loss = {‘batch’:[], ‘epoch’:[]}
self.val_acc = {‘batch’:[], ‘epoch’:[]}
def on_batch_end(self, batch, logs={}):
self.losses['batch'].append(logs.get('loss'))
self.accuracy['batch'].append(logs.get('acc'))
self.val_loss['batch'].append(logs.get('val_loss'))
self.val_acc['batch'].append(logs.get('val_acc'))
def on_epoch_end(self, batch, logs={}):
self.losses['epoch'].append(logs.get('loss'))
self.accuracy['epoch'].append(logs.get('acc'))
self.val_loss['epoch'].append(logs.get('val_loss'))
self.val_acc['epoch'].append(logs.get('val_acc'))
def loss_plot(self, loss_type):
iters = range(len(self.losses[loss_type]))
plt.figure()
plt.plot(iters, self.accuracy[loss_type], 'r', label='train acc')
plt.plot(iters, self.losses[loss_type], 'g', label='train loss')
if loss_type == 'epoch':
plt.plot(iters, self.val_acc[loss_type], 'b', label='val acc')
plt.plot(iters, self.val_loss[loss_type], 'k', label='val loss')
plt.grid(True)
plt.xlabel(loss_type)
plt.ylabel('acc-loss')
plt.legend(loc="upper right")
plt.show()
batch_size = 128
nb_classes = 10
nb_epoch = 20
(X_train, y_train), (X_test, y_test) = mnist.load_data()
X_train = X_train.reshape(60000, 784)
X_test = X_test.reshape(10000, 784)
X_train = X_train.astype(‘float32’)
X_test = X_test.astype(‘float32’)
X_train /= 255
X_test /= 255
print(X_train.shape[0], ‘train samples’)
print(X_test.shape[0], ‘test samples’)
Y_train = np_utils.to_categorical(y_train, nb_classes)
Y_test = np_utils.to_categorical(y_test, nb_classes)
model = Sequential()
model.add(Dense(512, input_shape=(784,)))
model.add(Activation(‘relu’))
model.add(Dropout(0.2))
model.add(Dense(512))
model.add(Activation(‘relu’))
model.add(Dropout(0.2))
model.add(Dense(10))
model.add(Activation(‘softmax’))
model.summary()
model.compile(loss=’categorical_crossentropy’,
optimizer=RMSprop(),
metrics=[‘accuracy’])
history = LossHistory()
model.fit(X_train, Y_train,
batch_size=batch_size, nb_epoch=nb_epoch,
verbose=1,
validation_data=(X_test, Y_test),
callbacks=[history])
score = model.evaluate(X_test, Y_test, verbose=0)
print(‘Test score:’, score[0])
print(‘Test accuracy:’, score[1])
history.loss_plot(‘epoch’)
运行后结果如下所示:
runfile(‘E:/xlx/untitled13.py’, wdir=’E:/xlx’)
Using TensorFlow backend.
A local file was found, but it seems to be incomplete or outdated because the auto file hash does not match the original value of 8a61469f7ea1b51cbae51d4f78837e45 so we will re-download the data.
Downloading data from https://s3.amazonaws.com/img-datasets/mnist.npz
11493376/11490434 [==============================] - 165s 14us/step
60000 train samples
10000 test samples
dense_1 (Dense) (None, 512) 401920
activation_1 (Activation) (None, 512) 0
dropout_1 (Dropout) (None, 512) 0
dense_2 (Dense) (None, 512) 262656
activation_2 (Activation) (None, 512) 0
dropout_2 (Dropout) (None, 512) 0
dense_3 (Dense) (None, 10) 5130
Total params: 669,706
Trainable params: 669,706
Non-trainable params: 0
E:/xlx/untitled13.py:107: UserWarning: The nb_epoch
argument in fit
has been renamed epochs
.
callbacks=[history])
Train on 60000 samples, validate on 10000 samples
Epoch 1/20
60000/60000 [==============================] - 10s 162us/step - loss: 0.2433 - acc: 0.9245 - val_loss: 0.1141 - val_acc: 0.9634
Epoch 2/20
60000/60000 [==============================] - 9s 151us/step - loss: 0.1005 - acc: 0.9691 - val_loss: 0.0856 - val_acc: 0.9751
Epoch 3/20
60000/60000 [==============================] - 9s 152us/step - loss: 0.0751 - acc: 0.9772 - val_loss: 0.0807 - val_acc: 0.9768
Epoch 4/20
60000/60000 [==============================] - 9s 147us/step - loss: 0.0603 - acc: 0.9816 - val_loss: 0.1068 - val_acc: 0.9700
Epoch 5/20
60000/60000 [==============================] - 9s 151us/step - loss: 0.0504 - acc: 0.9854 - val_loss: 0.0829 - val_acc: 0.9795
Epoch 6/20
60000/60000 [==============================] - 9s 150us/step - loss: 0.0434 - acc: 0.9870 - val_loss: 0.0881 - val_acc: 0.9777
Epoch 7/20
60000/60000 [==============================] - 9s 154us/step - loss: 0.0392 - acc: 0.9883 - val_loss: 0.0796 - val_acc: 0.9812
Epoch 8/20
60000/60000 [==============================] - 10s 159us/step - loss: 0.0345 - acc: 0.9899 - val_loss: 0.0767 - val_acc: 0.9818
Epoch 9/20
60000/60000 [==============================] - 10s 165us/step - loss: 0.0330 - acc: 0.9902 - val_loss: 0.0953 - val_acc: 0.9805
Epoch 10/20
60000/60000 [==============================] - 9s 151us/step - loss: 0.0289 - acc: 0.9916 - val_loss: 0.0842 - val_acc: 0.9828
Epoch 11/20
60000/60000 [==============================] - 10s 160us/step - loss: 0.0239 - acc: 0.9933 - val_loss: 0.0850 - val_acc: 0.9828
Epoch 12/20
60000/60000 [==============================] - 11s 177us/step - loss: 0.0255 - acc: 0.9930 - val_loss: 0.1030 - val_acc: 0.9813
Epoch 13/20
60000/60000 [==============================] - 9s 153us/step - loss: 0.0225 - acc: 0.9936 - val_loss: 0.0861 - val_acc: 0.9846
Epoch 14/20
60000/60000 [==============================] - 10s 163us/step - loss: 0.0220 - acc: 0.9939 - val_loss: 0.1039 - val_acc: 0.9814
Epoch 15/20
60000/60000 [==============================] - 9s 156us/step - loss: 0.0213 - acc: 0.9942 - val_loss: 0.0932 - val_acc: 0.9841
Epoch 16/20
60000/60000 [==============================] - 9s 149us/step - loss: 0.0205 - acc: 0.9944 - val_loss: 0.0867 - val_acc: 0.9854] - ETA: 5s - loss: 0.0155 - acc: 0.9950
Epoch 17/20
60000/60000 [==============================] - 9s 151us/step - loss: 0.0204 - acc: 0.9945 - val_loss: 0.1035 - val_acc: 0.9818
Epoch 18/20
60000/60000 [==============================] - 9s 146us/step - loss: 0.0187 - acc: 0.9952 - val_loss: 0.1266 - val_acc: 0.9799
Epoch 19/20
60000/60000 [==============================] - 9s 148us/step - loss: 0.0176 - acc: 0.9954 - val_loss: 0.1091 - val_acc: 0.9836
Epoch 20/20
60000/60000 [==============================] - 9s 143us/step - loss: 0.0171 - acc: 0.9956 - val_loss: 0.1091 - val_acc: 0.9838
Test score: 0.10906359108943482
Test accuracy: 0.9838