565/DeepLearning
/LeNet5.py
# -*- coding:utf-8 -*-
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec
import os
import datetime
from tensorflow.examples.tutorials.mnist import input_data
# 可视化
from keras.utils import plot_model
# 模型的生成
from keras.models import Sequential
from keras.layers import Dense, Conv2D, MaxPooling2D, Flatten, Dropout, BatchNormalization
from keras.callbacks import ModelCheckpoint, EarlyStopping
from keras.optimizers import SGD, Adam
from keras.preprocessing.image import ImageDataGenerator
# 读取MNIST数据
mnist = input_data.read_data_sets('./data/mnist', one_hot=True)
# 训练集
train_images = mnist.train.images
train_labels = mnist.train.labels
# 测试集
test_images = mnist.test.images
test_labels = mnist.test.labels
# 数据预处理
train_images = train_images.reshape(-1, 28, 28, 1) / 255.
test_images = test_images.reshape(-1, 28, 28, 1) / 255.
# 数据增强
train_datagen = ImageDataGenerator(
rotation_range=15,
width_shift_range=0.1,
height_shift_range=0.1,
horizontal_flip=True,
fill_mode='nearest')
train_datagen.fit(train_images)
# 读取模型
model = tf.keras.models.load_model('mnist_cnn.h5')
# 模型可视化
plot_model(model, to_file='mnist_cnn.png', show_shapes=True)
# 读取训练结果
train_acc = np.load('train_acc.npy')
train_loss = np.load('train_loss.npy')
test_acc = np.load('test_acc.npy')
test_loss = np.load('test_loss.npy')
# 绘制训练结果
plt.style.use('ggplot')
fig = plt.figure()
gs = gridspec.GridSpec(2, 2)
fig.suptitle('MNIST CNN', fontsize=16)
ax1 = fig.add_subplot(gs[0, 0])
ax1.plot(train_acc, label='train acc')
ax1.plot(test_acc, label='test acc')
ax1.set_xlabel('Epoch')
ax1.set_ylabel('Acc')
ax1.legend()
ax2 = fig.add_subplot(gs[0, 1])
ax2.plot(train_loss, label='train loss')
ax2.plot(test_loss, label='test loss')
ax2.set_xlabel('Epoch')
ax2.set_ylabel('Loss')
ax2.legend()
ax3 = fig.add_subplot(gs[1, 0])
ax3.plot(train_acc, label='train acc')
ax3.plot(test_acc, label='test acc')
ax3.set_xlabel('Epoch')
ax3.set_ylabel('Acc')
ax3.legend()
ax4 = fig.add_subplot(gs[1, 1])
ax4.plot(train_loss, label='train loss')
ax4.plot(test_loss, label='test loss')
ax4.set_xlabel('Epoch')
ax4.set_ylabel('Loss')
ax4.legend()
plt.savefig('mnist_cnn_train_loss_acc.png', format='png', dpi=100)
# 保存模型
model.save('mnist_cnn.h5')
# 保存训练结果
np.save('train_acc.npy', train_acc)
np.save('train_loss.npy', train_loss)
np.save('test_acc.npy', test_acc)
np.save('test_loss.npy', test_loss)
# 保存模型结构图
model_json = model.to_json()
with open('mnist_cnn.json', 'w') as json_file:
json_file.write(model_json)
/README.md
# 深度学习入门
项目描述
本项目主要讲述深度学习的入门知识,通过几个简单的项目,能够帮助大家了解深度学习的入门知识,也能够帮助大家理解深度学习的强大之处。项目介绍
本项目主要分成以下几部分: 1. 项目介绍 - 项目概述 - 项目使用的软件 - 项目使用的数据 - 项目使用的工具 2. 代码详解 - 代码结构 - 代码细节 - 代码注释 - 代码测试 3. 项目总结 - 项目总结 - 项目反思 - 项目展望 4. 项目成果 - 项目成果展示 - 项目成果分享 5. 项目成果展示 - 项目成果展示项目概述
本项目主要讲述深度学习的入门知识,通过几个简单的项目,能够帮助大家了解深度学习的入门知识,也能够帮助大家理解深度学习的强大之处。项目使用的软件
- Tensorflow
- Keras
- Matplotlib
- Numpy
- Pandas
- Scipy
- Scikit-learn
- Skimage
- Seaborn
项目使用的数据
- MNIST数据
项目使用的工具
- Git
- Jupyter Notebook
代码详解
- 代码结构