导入相关库

import numpy as np
from tensorflow.keras.preprocessing.image import ImageDataGenerator
from tensorflow.keras.utils import to_categorical
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense,Dropout,Conv2D,MaxPool2D,Flatten
from tensorflow.keras.optimizers import Adam
import matplotlib.pyplot as plt
from tensorflow.keras.callbacks import LearningRateScheduler,CSVLogger,ReduceLROnPlateau

定义超参数

num_classes = 2
epochs = 100
batch_size = 32
image_size = 224

数据增强

train_datasets = ImageDataGenerator(rotation_range = 30,width_shift_range = 0.2,height_shift_range = 0.2,rescale = 1 / 255,shear_range = 10,   # 剪切变换zoom_range = 0.1,  # 随机放大horizontal_flip = True, # 水平翻转brightness_range = (0.5, 1.2), fill_mode = 'constant'
)test_datasets = ImageDataGenerator(rescale = 1 / 255
)

定义构造器

train_datasets = train_datasets.flow_from_directory('Canidae/train',target_size = (image_size, image_size),batch_size = batch_size,
)test_datasets = test_datasets.flow_from_directory('Canidae/val',target_size = (image_size, image_size),batch_size = batch_size,
)
print(train_datasets.class_indices)

搭建网络结构

# 定义网络结构
model = Sequential()# 第一层卷积
model.add(Conv2D(filters = 96, kernel_size = (11, 11),strides = (4, 4),padding = 'valid',activation = 'relu',input_shape = (image_size, image_size, 3))
)
model.add(MaxPool2D(pool_size = (2, 2),strides = (2, 2),padding = 'valid')
)# 第二层卷积
model.add(Conv2D(filters = 256,kernel_size = (5, 5),strides = (1, 1),padding = 'valid',activation = 'relu')
)
model.add(MaxPool2D(pool_size = (3, 3),strides = (2, 2),padding = 'valid')
)# 第三层卷积
model.add(Conv2D(filters = 256,kernel_size = (3, 3),strides = (1, 1),padding = 'valid',activation = 'relu')
)# 第四层卷积
model.add(Conv2D(filters = 384,kernel_size = (3, 3),strides = (1, 1),padding = 'valid',activation = 'relu')
)# 第五层卷积
model.add(Conv2D(filters = 384,kernel_size = (3, 3),strides = (1, 1),padding = 'valid',activation = 'relu')
)
model.add(MaxPool2D(pool_size = (3, 3),strides = (2, 2),padding = 'valid')
)# 第六层----全连接
model.add(Flatten())
model.add(Dense(4096, activation='relu'))
# 第七层----全连接
model.add(Dropout(0.5))
model.add(Dense(4096, activation='relu'))
# 第八层----全连接
model.add(Dropout(0.5))
model.add(Dense(num_classes, activation='softmax'))
model.summary()

输出:

Model: "sequential"
_________________________________________________________________
Layer (type)                 Output Shape              Param #
=================================================================
conv2d (Conv2D)              (None, 54, 54, 96)        34944
_________________________________________________________________
max_pooling2d (MaxPooling2D) (None, 27, 27, 96)        0
_________________________________________________________________
conv2d_1 (Conv2D)            (None, 23, 23, 256)       614656
_________________________________________________________________
max_pooling2d_1 (MaxPooling2 (None, 11, 11, 256)       0
_________________________________________________________________
conv2d_2 (Conv2D)            (None, 9, 9, 256)         590080
_________________________________________________________________
conv2d_3 (Conv2D)            (None, 7, 7, 384)         885120
_________________________________________________________________
conv2d_4 (Conv2D)            (None, 5, 5, 384)         1327488
_________________________________________________________________
max_pooling2d_2 (MaxPooling2 (None, 2, 2, 384)         0
_________________________________________________________________
flatten (Flatten)            (None, 1536)              0
_________________________________________________________________
dense (Dense)                (None, 4096)              6295552
_________________________________________________________________
dropout (Dropout)            (None, 4096)              0
_________________________________________________________________
dense_1 (Dense)              (None, 4096)              16781312
_________________________________________________________________
dropout_1 (Dropout)          (None, 4096)              0
_________________________________________________________________
dense_2 (Dense)              (None, 2)                 8194
=================================================================
Total params: 26,537,346
Trainable params: 26,537,346
Non-trainable params: 0
_________________________________________________________________

训练

# 构造优化器
adam = Adam(lr=1e-4)callbacks = []callbacks.append(CSVLogger('AlexNet_1/Captcha_tfdata.csv')
) # 保存数据
callbacks.append(ReduceLROnPlateau(monitor='val_loss', factor=0.1, patience=10, verbose=1)
) # # ReduceLROnPlateau学习率调整策略,连续10个周期val_loss没有下降当前学习率乘以0.1model.compile(optimizer=adam, loss='categorical_crossentropy', metrics=['accuracy'])history = model.fit(x=train_datasets,epochs = epochs,validation_data = test_datasets,callbacks = callbacks
)

可视化

# 画出训练集准确率曲线图
plt.plot(np.arange(epochs),history.history['accuracy'],c='b',label='train_accuracy')
# 画出验证集准确率曲线图
plt.plot(np.arange(epochs),history.history['val_accuracy'],c='y',label='val_accuracy')
# 图例
plt.legend()
# x坐标描述
plt.xlabel('epochs')
# y坐标描述
plt.ylabel('accuracy')
# 显示图像
plt.show()

AlexNet_tensorflow2.1_实现狼狗分类相关推荐

  1. python3解释器执行not 1 and 1_编程语言的分类,python解释器多版本共存.执行python的两种方式,变量,用户与程序交互...

    一.编程语言的分类? 机器语言:直接使用二进制指令编程,直接操作硬件,必须考虑硬件细节. 汇编语言:用简写的英文标识符取代二进制去编写程序,直接操作硬件,必须考虑硬件细节. 高级语言:通过人类能够理解 ...

  2. 吴恩达老师深度学习视频课笔记:单隐含层神经网络公式推导及C++实现(二分类)

    关于逻辑回归的公式推导和实现可以参考: http://blog.csdn.net/fengbingchun/article/details/79346691 下面是在逻辑回归的基础上,对单隐含层的神经 ...

  3. 机器学习笔记I: 基于逻辑回归的分类预测

    逻辑回归的介绍 逻辑回归(Logistic regression,简称LR)虽然其中带有"回归"两个字,但逻辑回归其实是一个分类模型,并且广泛应用于各个领域之中.虽然现在深度学习相 ...

  4. 实验三:CART分类决策树python实现(两个测试集)(一)|机器学习

    目录 python实现 分步 源代码(全部) 测试集1(鸢尾花集) 测试集2(红酒品类数据集) 总结 python实现 分步 划分数据子集(注意区分离散特征值和连续特征值) #获取数据子集,分类与回归 ...

  5. Transformer在细粒度分类上的应用

    TransFG :Transformer在细粒度分类上的应用 摘要 1.引言 2.相关工作 ==细粒度视觉分类== **==Transformer==** 3.方法 3.1作为特征提取的vision ...

  6. sicily题目分类

    sicily题目分类 1. 编程入门 2. 数据结构 3. 字符串 4. 排序 5. 图遍历 6. 图算法 7. 搜索:剪枝,启发式搜索 8. 动态规划/递推 9. 分治/递归 10. 贪心 11. ...

  7. [sicily]部分题目分类

    sicily题目分类 1. 编程入门 2. 数据结构 3. 字符串 4. 排序 5. 图遍历 6. 图算法 7. 搜索:剪枝,启发式搜索 8. 动态规划/递推 9. 分治/递归 10. 贪心 11. ...

  8. 利用预训练网络打造自己的分类网络

    卷积神经网络的训练是耗时的,很多场合不可能每次都从随机初始化参数开始训练网络. 1.训练 pytorch中自带几种常用的深度学习网络预训练模型,如VGG.ResNet等.往往为了加快学习的进度,在训练 ...

  9. [运放滤波器]5_滤波器的分类

    [运放滤波器]4_积分微分电路 [动态系统的建模与分析]15_伯德图,bode图,为什么是20logM?分贝又是什么? [动态系统的建模与分析]9_一阶系统的频率响应_低通滤波器 [动态系统的建模与分 ...

最新文章

  1. Java map 知识
  2. 攻克指针(三)~自我总结篇
  3. PCA和白化练习之处理图像
  4. Allegro跨分割检查
  5. 计算机系统组成_网络教育统考计算机应用基础题库(计算机系统的组成2)
  6. 活久见!巴菲特被诈骗50亿,股神真的糊涂了?
  7. ionic 安卓apk签名_安卓 APP 三代加壳方案的研究报告
  8. windows phone 7.1 RC 版 SDK
  9. python 线性拟合 图_python线性拟合
  10. UVa10006 Carmichael Numbers【素数判定+快速模幂】
  11. vs2010制作安装包-vs2010打包教程
  12. java 汽车租赁系统
  13. javaweb汽车租赁系统
  14. 取消参考文献自动编号_参考文献的自动编号及引用
  15. python变现实现新浪微博登陆
  16. 前端面试宝典 html css js ajax es6
  17. Android-仿QQ表情库、表情混合文字聊天图文
  18. scada java_SCADA开源项目lite版本
  19. 贪心算法_排队不等式_绝对值不等式_推公式
  20. linux机器上crontab定时任务将日志输出到以日期命名的log文件

热门文章

  1. Prege(图计算框架)l: A System for Large-Scale Graph Processing(译)
  2. 外贸网站如何进行推广
  3. php大商创商城,news.php · Mihok/ecshop大商创商城 - Gitee.com
  4. Xcode 工程清理瘦身
  5. COS461-普林斯顿大学计算机网络课程-assignment1实现
  6. phpmailer的使用方法
  7. 自己动手写一个推荐系统,推荐系统小结,推荐系统:总体介绍、推荐算法、性能比较, 漫谈“推荐系统”, 浅谈矩阵分解在推荐系统中的应用...
  8. 微生物 Alpha多样性 作图 16S 菌群 R语言
  9. java 反编译器源码分析
  10. 加密市场中的14个心智模型