keras从入门到放弃(十)

导入手写数字识别

import keras
from keras import layers
import matplotlib.pyplot as plt
%matplotlib inline
import keras.datasets.mnist as mnist
(train_image, train_label), (test_image, test_label) = mnist.load_data()
train_image.shape
OUT:
(60000, 28, 28)

即有60000张图片 28*28像素

用切片的方法去取出图片

plt.imshow(train_image[0])
train_label[0]
OUT:
0

在这里插入图片描述

模型训练

model = keras.Sequential()
model.add(layers.Flatten())     # (60000, 28, 28) --->  (60000, 28*28)
model.add(layers.Dense(64, activation='relu'))
model.add(layers.Dense(10, activation='softmax'))
model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['acc']
)
model.fit(train_image, train_label, epochs=50, batch_size=512)

模型评估

model.evaluate(train_image, train_label)
OUT:
[0.30629094220472769, 0.97965000000000002]

model.evaluate(test_image, test_label)
OUT:
[0.46858452253225152, 0.96919999999999995]

numpy方法预测

import numpy as np
np.argmax(model.predict(test_image[:10]),axis=1)
test_label[:10]
OUT:
array([7, 2, 1, 0, 4, 1, 4, 9, 6, 9], dtype=int64)
array([7, 2, 1, 0, 4, 1, 4, 9, 5, 9], dtype=uint8)

模型的优化

  • 增大网络容量,直到过拟合
  • 采取措施抑制过拟合
  • 继续增大网络容量,直到过拟合

增大网络容量

#增加几层
model = keras.Sequential()
model.add(layers.Flatten())     # (60000, 28, 28) --->  (60000, 28*28)
model.add(layers.Dense(64, activation='relu'))
model.add(layers.Dense(64, activation='relu'))
model.add(layers.Dense(64, activation='relu'))
model.add(layers.Dense(10, activation='softmax'))
model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['acc']
)
model.fit(train_image, train_label, epochs=50, batch_size=512, validation_data=(test_image, test_label))

模型的再优化

#添加dropout层
model = keras.Sequential()
model.add(layers.Flatten())     # (60000, 28, 28) --->  (60000, 28*28)
model.add(layers.Dense(64, activation='relu'))
model.add(layers.Dense(64, activation='relu'))
model.add(layers.Dropout(0.5))
model.add(layers.Dense(64, activation='relu'))
model.add(layers.Dropout(0.5))
model.add(layers.Dense(10, activation='softmax'))
model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['acc']
)
model.fit(train_image, train_label, epochs=200, batch_size=512, validation_data=(test_image, test_label))

来源:https://study.163.com/course/courseLearn.htm?courseId=1209172857#/learn/video?lessonId=1278768856&courseId=1209172857

强烈推荐

猜你喜欢

转载自blog.csdn.net/weixin_44510615/article/details/88872695