简介
本程序基于VGG16的进行迁移学习,通过训练自己的数据集实现三分类,通过冻结原网络的特征提取层,使卷积层和池化层的权重保持不变。由于待分类的数据与原先 VGG16 的分类数据不同,删除原来的全连接层,在特征提取层之后添加全局平均池化层(Global Average pooling),再增加两个全新的全连接层(Fully-connected layer ),最后一层全连接层分类数与数据集的类数相匹配,通过重新训练确定最后几层的参数信息,来实现分类目标。并用plot画出Training acc,validation acc,Training loss,validation loss。基于VGG16的迁移学习模型如图所示。![在这里插入图片描述](https://img-blog.csdnimg.cn/20210325184301245.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1
Nvbmd5b25nY2hhbzE5OTU=,size_16,color_FFFFFF,t_70)
import os
import numpy as np
from keras import Model
from keras.applications import VGG16
import matplotlib.pyplot as plt
from tensorflow.keras.preprocessing import image
from keras.layers import GlobalMaxPooling2D, Flatten, Dense, Dropout, GlobalAveragePooling2D
import random
def DataSet():
train_path_A = 'C:/Users/HASee/Desktop/shilu/A/'
train_path_B = 'C:/Users/HASee/Desktop/shilu/B/'
train_path_C = 'C:/Users/HASee/Desktop/shilu/C/'
imglist_train_A = os.listdir(train_path_A)
imglist_train_B = os.listdir(train_path_B)
imglist_train_C = os.listdir(train_path_C)
X_train = np.empty((len(imglist_train_A) + len(imglist_train_B)+ len(imglist_train_C), 224, 224,