import numpy as np
import os,random,shutil
np.random.seed(7)
train_data_dir='C:/Users/Administrator/Desktop/p and j and w/train'
val_data_dir='C:/Users/Administrator/Desktop/p and j and w/validation'
train_samples_num=90
val_samples_num=60
IMG_W,IMG_H,IMG_CH=224,224,3
batch_size=6
epochs=20
class_num=3
save_folder='C:/Users/Administrator/Desktop/many classfier'
from keras.preprocessing.image import ImageDataGenerator
from keras.models import Sequential
from keras import layers
from keras.layers import Dropout,Flatten,Dense
from keras import applications
def save_bottlebeck_features():
datagen=ImageDataGenerator(rescale=1./255)
model=applications.VGG16(include_top=False,weights='imagenet')
generator=datagen.flow_from_directory(train_data_dir,target_size=(IMG_W,IMG_H),batch_size=batch_size,class_mode='categorical',shuffle=False)
bottleneck_features_train=model.predict_generator(generator,train_samples_num//batch_size)
np.save(os.path.join(save_folder,'bottleneck_features_train.npy'),bottleneck_features_train)
print('bottleneck features of train set is saved.')
generator = datagen.flow_from_directory(val_data_dir, target_size=(IMG_W, IMG_H), batch_size=batch_size,
class_mode='categorical', shuffle=False)
#多分类问题 class_mode='categorical'
bottleneck_features_validation=model.predict_generator(generator,val_samples_num//batch_size)
np.save(os.path.join(save_folder,'bottleneck_features_val.npy'),bottleneck_features_validation)
print('bottleneck features of test set is saved.')
save_bottlebeck_features()
from keras import optimizers
def my_model():
model=Sequential()
model.add(Flatten(input_shape=train_data.shape[1:]))
model.add(Dense(256,activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(class_num,activation='softmax'))
rms=optimizers.RMSprop(lr=0.00001)
model.compile(optimizer=rms,loss='categorical_crossentropy',metrics=['acc'])
return model
from keras.utils import to_categorical
train_data=np.load(os.path.join(save_folder,'bottleneck_features_train.npy'))
train_labels=np.array([0]*int((train_samples_num/class_num))+[1]*int((train_samples_num/class_num))+[2]*int((train_samples_num/class_num)))
train_labels=to_categorical(train_labels,class_num)
validation_data=np.load(os.path.join(save_folder,'bottleneck_features_val.npy'))
validation_labels=np.array([0]*int((val_samples_num/class_num))+[1]*int((val_samples_num/class_num))+[2]*int((val_samples_num/class_num)))
validation_labels=to_categorical(validation_labels,class_num)
#构建模型分类器
clf_model=my_model()
history_ft=clf_model.fit(train_data,train_labels,epochs=epochs,batch_size=batch_size,validation_data=(validation_data,validation_labels))
import matplotlib.pyplot as plt
def plot_training(history):
plt.figure(12)
plt.subplot(121)
train_acc=history.history['acc']
val_acc=history.history['val_acc']
epochs=range(1,len(train_acc)+1)
plt.plot(epochs,train_acc,'b',label='train_acc')
plt.plot(epochs,val_acc,'r',label='test_acc')
plt.title('train and test acc')
plt.legend()
plt.subplot(122)
train_loss=history.history['loss']
val_loss=history.history['val_loss']
epochs=range(1,len(train_loss)+1)
plt.plot(epochs,train_loss,'b',label='train_loss')
plt.plot(epochs,val_loss,'r',label='test_loss')
plt.title('train and test loss')
plt.legend()
plt.show()
plot_training(history_ft)
clf_model.save_weights(os.path.join(save_folder,'top_FC_model'))
新建文本文档_VGG16_迁移学习_卷积神经网络_多分类_迁移图像分类_
版权申诉
18 浏览量
2021-09-30
01:38:34
上传
评论
收藏 1KB ZIP 举报
何欣颜
- 粉丝: 69
- 资源: 4732
最新资源
- 校园帮项目,毕业设计/课程设计/javaWeb/SSM
- C++ plotting library,matplotlib-cpp-master.zip
- 案例源码matplotlib-examples-master.zip
- 基于JavaScript 实现的KMP 算法
- 基于C++实现二叉树的创建,遍历,添加,查找与删除
- 基于C语言实现二叉树的基本操作
- 毕业设计基于STM32的测量温度与压力的数据处理设计C语言完整源码+论文.zip
- 基于MATLAB的PCA算法人脸识别项目源码+GUI界面+说明文档.zip
- 基于STM32的测量温度与压力的数据处理设计源码+论文(毕业设计).zip
- Vision Transformer 网络对不同氨气氧气浓度轨迹RAS 图像数据集的分类,包含训练权重和数据集、迁移学习
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈