CNN: MiniVGG
此项目使用了 MiniVGG, MiniVGG with data augmentation 和 ResNet 三种CNN网络结构训练cifar10数据集,大概需要120多分钟(GTX1650, WIN10, I5-9300H),trian:20000,, valid: 20000, test:10000,在电脑上跑一跑熟悉CNN建立和不同网络比较还是比较练手的项目. VGG 网络论证了CNN 网络的深度对性能的影响。
结论
先说结论
- Accuracy: 当数据集小一点时,如10000,使用ImageDataAugmentation 差不多可以提高0.1%,当使用多一点的数据时,两者不相上下,都是在71% 左右,而ResNet为0.57,可能是构造的ResNet网络比较简单,此网络参数不到4000,远小于另外两个网络参数
- Time Cost: ResNet 运行时间最长,其次MiniVGG_data_aug,MiniVGG
- 构造稍多层的CNN网络结构,了解feature map, filter 作用,为减少运行时间,下次可以尝试使用 (9,9)的filter shape。
- 实现一个mini VGG 网络结构
代码 训练过程
1.Import所需的库
tensroflow2.0 GPU 版本
import csv
import tensorflow as tf
from tensorflow import keras
from keras import datasets, models, layers
import matplotlib.pyplot as plt
from keras import backend as K
import numpy as np
import os, time
from resnet import ResNet
from keras.preprocessing.image import ImageDataGenerator
os.environ['CUDA_VISIBLE_DEVICES'] = '/device:GPU:0' # use GPU
K.clear_session() # Some memory clean-up
2. 获取数据
def load_cifar_data():
(X_train_full, y_train_full), (X_test, y_test) = datasets.cifar10.load_data()
X_train_full, X_test = X_train_full / 255.0, X_test / 255.0
print(X_train_full.shape, y_train_full.shape)
print(X_test.shape, y_test.shape)
# shuffle the trianing dataset
idxs = np.arange(X_train_full.shape[0])
np.random.shuffle(idxs)
X_train_full = X_train_full[idxs]
y_train_full = y_train_full[idxs]
X_train, y_train = X_train_full[