人工智能--预训练的卷积神经网络
学习目标:
- 掌握使用预训练好的ResNet对自己的数据再次进行训练的方法。
- 掌握函数式建立Keras模型的方法。
学习内容:
- 利用ImageDataGenerator类直接从硬盘中读取猫和狗(cat-and-dog)数据,自定义合适的卷积神经网络进行分类。
- 对猫和狗(cat-and-dog)数据,在预训练好的ResNet上添加合适的网络层,构造网络进行训练。并调整网络参数,对比分析相应的结果。
学习过程:
1.用Adam优化器,学习率为0.0001,batch_size为16,统一resize图片的大小为128*128,进行10次迭代的结果如下:
用Adam优化器,学习率为0.0001,batch_size为16,统一resize图片的大小为256*256,进行15次迭代的结果如下:
最后测试集的识别率为0.7420。
优化器 |
学习率 |
批量大小 |
图片大小 |
迭代次数 |
识别率 |
Adam |
0.0001 |
16 |
128*128 |
10 |
0.7830 |
Adam |
0.0001 |
16 |
256*256 |
15 |
0.7420 |
图像放大后进行测试的效果反而没有没放大之前的好。
2.
模型各层的输出大小:
预训练好的ResNet上调整优化器为Adam,学习率为0.0001,batch_size为16,统一resize图片的大小为128*128,进行10次迭代的结果如下:
调整优化器为Adam,学习率为0.0001,batch_size为16,统一resize图片的大小为64*64,进行20次迭代的结果如下:
训练结果如下表:
优化器 |
学习率 |
批量大小 |
图片大小 |
迭代次数 |
识别率 |
Adam |
0.0001 |
16 |
128*128 |
10 |
0.7123 |
Adam |
0.0001 |
16 |
64*64 |
20 |
0.6653 |
图像缩小后进行测试的效果也没有图片像素为128*128的好。
源码:
第一问:
# In[0]:构造网络
from tensorflow.keras import Sequential,Input,layers,optimizers
model = Sequential( [Input(shape=(256,256,3)), # 二维卷积操作的输入数据要求:[样本数,宽度,高度,通道数]layers.Conv2D(32, kernel_size=(3, 3), activation="relu"), # 3x3的卷积核,输出32个通道layers.MaxPooling2D(pool_size=(2, 2)), # 取2x2网格的最大值进行下采样layers.Conv2D(64, kernel_size=(3, 3), activation="relu"), layers.MaxPooling2D(pool_size=(2, 2)),layers.Conv2D(64, kernel_size=(3, 3), activation="relu"),layers.Flatten(), # 把上一层得到的结果展平成一维向量(3*3*64=576)layers.Dropout(0.5), # 训练时,每个batch随机选50%的权重固定不更新layers.Dense(64, activation="relu"), layers.Dense(2, activation="softmax"),
])model.summary()# 自定义优化器
optimizer = optimizers.Adam(lr=0.0001)model.compile(optimizer,loss='categorical_crossentropy', metrics=['accuracy'])# In[1]: 加载数据
from tensorflow.keras.preprocessing.image import ImageDataGenerator
datagen_train = ImageDataGenerator(rescale = 1. / 255 ,#rotation_range = 20, # width_shift_range = 0.2,#height_shift_range = 0.2 #shear_range = 0.2, #zoom_range = 0.2,#horizontal_flip = True,)# In[2]:从硬盘分批读取数据并测试
generator_train = datagen_train.flow_from_directory(r'D:\Cadabra_tools002\course_data\cat-and-dog\training_set', # 训练集所在路径,子目录为类别target_size=(256, 256), # 统一resize所有图片的大小为 (28,28)batch_size=16, # 输入到fit函数中的批的大小
)model.fit(generator_train,epochs=15)# In[3]:从硬盘分批读取数据并测试
datagen_validation = ImageDataGenerator(rescale = 1. / 255)
generator_validation = datagen_validation.flow_from_directory(r'D:\Cadabra_tools002\course_data\cat-and-dog\test_set', target_size=(256, 256), #依次换成128*128和256*256 batch_size=16,
)# In[4]:测试
loss, accuracy = model.evaluate(generator_validation)
第二问:
#-------------------------------------------
# 用预训练好的ResNet50网络进行图像分类,并根据自己的数据微调网络权重
#-------------------------------------------
from tensorflow.keras.applications.resnet50 import ResNet50
from tensorflow.keras.layers import Flatten, Dense
from tensorflow.keras.models import Model
from tensorflow.keras.regularizers import l2
from tensorflow.keras import Sequential,optimizers
import numpy as np
#import cv2# In[1]: 加载数据
from tensorflow.keras.preprocessing.image import ImageDataGenerator
datagen_train = ImageDataGenerator(rescale = 1. / 255 ,)# In[2]:从硬盘分批读取数据并测试
generator_train = datagen_train.flow_from_directory(r'D:\Cadabra_tools002\course_data\cat-and-dog\training_set', # 训练集所在路径,子目录为类别target_size=(64, 64), # 统一resize所有图片的大小为 (28,28)batch_size=16, # 输入到fit函数中的批的大小
)# In[2]: ResNet50模型,加载预训练权重
# 若没有模型文件,则自动下载(由于下载速度很慢,所以建议先把文件放进相应的目录)
# C:\Users\Administrator\.keras\models\resnet50_weights_tf_dim_ordering_tf_kernels_notop.h5
base_model = ResNet50(input_shape=(64, 64, 3), include_top=False, weights='imagenet')
base_model.trainable=False
x = base_model.output
x = Flatten()(x)
x = Dense(512,activation='relu',kernel_regularizer=l2(0.0003))(x)
predictions = Dense(2, activation='softmax')(x)
model = Model(inputs=base_model.input, outputs=predictions)#自定义优化器
optimizer = optimizers.Adam(lr=0.0001)model.compile(optimizer, loss='categorical_crossentropy',metrics=['accuracy'])
model.summary() # 打印模型各层的输出大小# In[3]: 训练
# 更改迭代此处 epochs=50,才能获得比较高的识别率
model.fit(generator_train,epochs=20, batch_size=16,)
#model.save_weights('resnet_turn_cifar10.h5') # In[4]:测试
datagen_validation = ImageDataGenerator(rescale = 1. / 255)
generator_validation = datagen_validation.flow_from_directory(r'D:\Cadabra_tools002\course_data\cat-and-dog\test_set', target_size=(64, 64), #依次换成128*128和64*64 batch_size=16,
)# In[5]:测试识别率
loss, accuracy = model.evaluate(generator_validation)
print('测试识别率为:', np.round(accuracy,4))
源码下载
学习产出:
1.跑起来有点费时,通过调整图像的大小,图像越大费时越多,最后只能往小了调整,但图片的像素小,最后测试的识别率不高。
人工智能--预训练的卷积神经网络相关推荐
- Python深度学习(使用预训练的卷积神经网络)--学习笔记(十一)
5.3 使用预训练的卷积神经网络 想要将深度学习应用于小型图像数据集,一种常用且非常高效的方法是使用预训练网络.预训练网络(pretrained network)是一个保存好的网络,之前已经在大型数据 ...
- 从零开始学keras之使用预训练的卷积神经网络
想要将深度学习应用于小型图像数据集,一种常用且非常高效的方法是使用预训练网络. 预训练网络(pretrained network)是一个保存好的网络,之前已在大型数据集(通常是大规模图像分类任务)上训 ...
- 使用预训练的卷积神经网络
想要将深度学习应用于小型图像数据集,使用预训练网络就是一种常用且高效的方法. 预训练网络就是一个保存好的网络,之前已在大型数据集上训练(通常是大规模图像分类任务). 如果训练的原始数据集足够大且足够通 ...
- 深度学习--使用预训练的卷积神经网络
文章目录 前言 一.使用预训练网络 二.将VGG16卷积基实例化 三.使用卷积基进行特征提取 1.不使用数据增强的快速特征提取 2.使用数据增强的特征提取 四.微调模型 前言 想要将深度学习应用于小型 ...
- 使用预训练的卷积神经网络(猫狗图片分类)
本次所用数据来自ImageNet,使用预训练好的数据来预测一个新的数据集:猫狗图片分类.这里,使用VGG模型,这个模型内置在Keras中,直接导入就可以了. from keras.applicatio ...
- 【深度学习】预训练的卷积模型比Transformer更好?
引言 这篇文章就是当下很火的用预训练CNN刷爆Transformer的文章,LeCun对这篇文章做出了很有深意的评论:"Hmmm".本文在预训练微调范式下对基于卷积的Seq2Seq ...
- 卷积神经网络的训练过程,卷积神经网络如何训练
深度神经网络是如何训练的? Coursera的Ng机器学习,UFLDL都看过.没记错的话Ng的机器学习里是直接给出公式了,虽然你可能知道如何求解,但是即使不知道完成作业也不是问题,只要照着公式写就行. ...
- TensorFlow2使用预训练的卷积网络(ConvNet)进行迁移学习
本案例使用预训练的模型对猫狗数据集进行分类任务.使用预训练的模型有两种方式: 一是利用特征提取器.利用预训练模型的前几层对新数据进行特征提取,最后加入分类的层即可完成新模型的创建. 二是Fine Tu ...
- 卷积神经网络的训练算法,卷积神经网络算法实现
卷积神经网络算法是什么? 一维构筑.二维构筑.全卷积构筑. 卷积神经网络(Convolutional Neural Networks, CNN)是一类包含卷积计算且具有深度结构的前馈神经网络(Feed ...
最新文章
- 使用FileItem获取文件名时注意事项
- 百练OJ:2728:第一个C++程序
- Spring bean - scope详解
- java http服务端例子_简单的用 Java Socket 编写的 HTTP 服务器应用
- linux实现shell,linux
- 计算机第二课堂教学计划,小学的第二课堂教学计划
- sql科学计数法转换为普通数字_Python3数据类型之数字-Python入门到精通
- 中国互联网大会首届智能网联论坛举行 数字技术驱动交通出行行业创新发展
- 大话西游之程序员做项目
- 论文降重,你都用了什么奇特的方法?
- Win10更新后BUG——任务栏点不动、卡死、加载不出来解决办法
- 微信小程序点击事件(bindtap)传递参数的方法
- tl-wdr5620千兆版设置虚拟服务器,TP-LINK无线路由TL-WDR5620千兆版使用步骤图解
- WSJ0中的wv文件如何转换为wav文件
- Photoshop CC 2018 安装包安装教程
- 基于matlab特征脸Eigenface算法的实现
- R语言快速运行脚本程序
- 程序员在网吧敲代码,这波操作真的太秀了!
- face to face
- 知道python程序设计基础期末答案_Python程序设计基础_知到答案章节作业期末答案...
热门文章
- 解决servlet请求转发、响应重定向无法实现页面跳转问题
- 基于智慧灯杆的行人检测与识别
- 计算机局域网组建与互建,实验4 局域网组建与网络互连认识实验指导
- 《厚黑学》| 读书三诀
- VC窗口刷新InvalidateRect和…
- 苹果变了:Mac 用自研芯片、iPhone 替代车钥匙
- CSDN PC端网站及其部分功能产品体验的一点分析
- I won't tell you this is about graph theory----zjfc bellman-ford算法与spfa算法
- 响铃:连续三季翻番,在收入问题上腾讯云如何体现发展质量优势?
- 手机有监控功能?分分钟查询手机使用记录!早点知道就好了!