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

代码详解

  • 代码结构
- 代码文件 - LeNet5.py - LeNet5_test.py - LeNet5_train.py - MNIST_CNN.py - MNIST_CNN_test.py - MNIST_CNN_train.py - mnist_cnn_test.py - mnist_cnn_train.py - mnist_cnn_train_acc.png - mnist_cnn_train_loss_acc.png - mnist_cnn_train_loss_acc.png - mnist_cnn_train_loss_acc.png