海盐网站建设,wordpress不停刷y,网页设计和平面设计哪个工资高,中国人可以做的c2c网站前言#xff1a; Hello大家好#xff0c;我是Dream。 今天来学习一下如何使用基于tensorflow和keras的迁移学习完成猫狗分类#xff0c;欢迎大家一起前来探讨学习~ 本文目录#xff1a;一、加载数据集1.调用库函数2.加载数据集3.数据集管理二、猫狗数据集介绍1.猫狗数据集介… 前言 Hello大家好我是Dream。 今天来学习一下如何使用基于tensorflow和keras的迁移学习完成猫狗分类欢迎大家一起前来探讨学习~ 本文目录一、加载数据集1.调用库函数2.加载数据集3.数据集管理二、猫狗数据集介绍1.猫狗数据集介绍2.图片展示三、MobileNetV2网络介绍1.加载tensorflow提供的预训练模型2.轻量级网络——MobileNetV23.MobileNetV2的网络模块四、搭建迁移学习1.训练2.训练结果可视化3.输出训练的准确率4.用cnn工具可视化一批数据的预测结果5.数据输出6.用cnn工具可视化一个数据样本的各层输出7.输出结果图像五、源码获取说明在此试验下我们使用的是使用tf2.x版本在jupyter环境下完成在本文中我们将主要完成以下任务实现基于tensorflow和keras的迁移学习 加载tensorflow提供的数据集不得使用cifar10 需要使用markdown单元格对数据集进行说明 加载tensorflow提供的预训练模型不得使用vgg16 需要使用markdown单元格对原始模型进行说明 网络末端连接任意结构的输出端网络 用图表显示准确率和损失函数 用cnn工具可视化一批数据的预测结果 用cnn工具可视化一个数据样本的各层输出
一、加载数据集
1.调用库函数
import matplotlib.pyplot as plt
import numpy as np
import os
import tensorflow as tf
import cnn_utils
from tensorflow.keras.preprocessing import image_dataset_from_directory
from tensorflow.keras.layers import GlobalAveragePooling2D,Dense,Input,Dropout2.加载数据集
数据集加载数据是通过这个网站下载的猫狗数据集http://aimaksen.bslience.cn/cats_and_dogs_filtered.zip实验中为了训练方便我们取了一个较小的数据集。
path_to_zip tf.keras.utils.get_file(data.zip,originhttp://aimaksen.bslience.cn/cats_and_dogs_filtered.zip,extractTrue,
)
PATH os.path.join(os.path.dirname(path_to_zip), cats_and_dogs_filtered)train_dir os.path.join(PATH, train)
validation_dir os.path.join(PATH, validation)BATCH_SIZE 32
IMG_SIZE (160, 160)3.数据集管理
使用image_dataset_from_director进行数据集管理使用ImageDataGenerator训练过程中会出现错误不知道是什么原因就使用了原始的image_dataset_from_director方法进行数据集管理。
train_dataset image_dataset_from_directory(train_dir,shuffleTrue,batch_sizeBATCH_SIZE,image_sizeIMG_SIZE)validation_dataset image_dataset_from_directory(validation_dir,shuffleTrue,batch_sizeBATCH_SIZE,image_sizeIMG_SIZE)二、猫狗数据集介绍
1.猫狗数据集介绍
猫狗数据集包括25000张训练图片12500张测试图片包括猫和狗两种图片。在此次实验中为了训练方便我们取了一个较小的数据集。 数据解压之后会有两个文件夹一个是 “train”一个是 “test”顾名思义一个是用来训练的另一个是作为检验正确性的数据。 在train文件夹里边是一些已经命名好的图像有猫也有狗。而在test文件夹中是只有编号名的图像。
2.图片展示
下面是数据集中的图片展示
class_names [cats, dogs]plt.figure(figsize(10, 10))
for images, labels in train_dataset.take(1):for i in range(9):ax plt.subplot(3, 3, i 1)plt.imshow(images[i].numpy().astype(uint8))plt.title(class_names[labels[i]])plt.axis(off)这里是输出的结果✨✨✨
三、MobileNetV2网络介绍
1.加载tensorflow提供的预训练模型
val_batches tf.data.experimental.cardinality(validation_dataset)
test_dataset validation_dataset.take(val_batches // 5)
validation_dataset validation_dataset.skip(val_batches // 5)2.轻量级网络——MobileNetV2
使用轻量级网络——MobileNetV2进行数据预处理 说明 MobileNetV2是基于倒置的残差结构普通的残差结构是先经过 1x1 的卷积核把 feature map的通道数压下来然后经过 3x3 的卷积核最后再用 1x1 的卷积核将通道数扩张回去即先压缩后扩张而MobileNetV2的倒置残差结构是先扩张后压缩。
3.MobileNetV2的网络模块
MobileNetV2的网络模块样子是这样的 MobileNetV2是基于深度级可分离卷积构建的网络它是将标准卷积拆分为了两个操作深度卷积 和 逐点卷积深度卷积和标准卷积不同对于标准卷积其卷积核是用在所有的输入通道上而深度卷积针对每个输入通道采用不同的卷积核就是说一个卷积核对应一个输入通道所以说深度卷积是depth级别的操作。而逐点卷积其实就是普通的卷积只不过其采用1x1的卷积核。 MobileNetV2的模型如下图所示其中t为Bottleneck内部升维的倍数c为通道数n为该bottleneck重复的次数s为sride
其中当stride1时才会使用elementwise 的sum将输入和输出特征连接如下图左侧stride2时无short cut连接输入和输出特征下图右侧
四、搭建迁移学习
1.训练
inital_input tf.keras.applications.mobilenet_v2.preprocess_inputIMG_SHAPE IMG_SIZE (3,)
base_model tf.keras.applications.MobileNetV2(input_shapeIMG_SHAPE,include_topFalse,weightsimagenet)base_model.trainable False
base_model.summary()这里是输出的结果✨✨✨
2.训练结果可视化
用图表显示准确率和损失函数
# 训练结果可视化用图表显示准确率和损失函数
acc history.history[accuracy]
val_acc history.history[val_accuracy]loss history.history[loss]
val_loss history.history[val_loss]epochs_rangerange(initial_epochs)
plt.figure(figsize(8,8))
plt.subplot(2,1,1)
plt.plot(epochs_range, acc, labelTraining Accuracy)
plt.plot(epochs_range, val_acc,labelValidation Accuracy)
plt.legend()
plt.title(Training and Validation Accuracy)plt.subplot(2,1,2)
plt.plot(epochs_range, loss, labelTraining Loss)
plt.plot(epochs_range, val_loss,labelValidation Loss)
plt.legend()
plt.title(Training and Validation Loss)
plt.show()这里是输出的结果✨✨✨
3.输出训练的准确率
# 输出训练的准确率
test_loss, test_accuracy model.evaluate(test_dataset)
print(test accuracy: {:.2f}.format(test_accuracy))这里是输出的结果✨✨✨
4.用cnn工具可视化一批数据的预测结果
label_dict {0: cat,1: dog
}test_image_batch, test_label_batch test_dataset.as_numpy_iterator().next()
# 编码成uint8 以图片形式输出
test_image_batch test_image_batch.astype(uint8)cnn_utils.plot_predictions(model, test_image_batch, test_label_batch, label_dict, 32, 5, 5)这里是输出的结果✨✨✨
5.数据输出
# 数据输出数字化特征图
test_image_batch, test_label_batch train_dataset.as_numpy_iterator().next()img_idx 0
random_batch np.random.permutation(np.arange(0,len(test_image_batch)))[:BATCH_SIZE]
image_activation test_image_batch[random_batch[img_idx]:random_batch[img_idx]1]cnn_utils.get_activations(base_model, image_activation[0])这里是输出的结果✨✨✨
6.用cnn工具可视化一个数据样本的各层输出
cnn_utils.display_activations(cnn_utils.get_activations(base_model, image_activation[0]))这里是输出的结果✨✨✨
7.输出结果图像 这里是输出的结果✨✨✨ 五、源码获取
关注此公众号人生苦短我用Pythons回复 神经网络源码获取源码快点击我吧 好啦这就是今天要分享给大家的全部内容了我们下期再见 ❤️❤️❤️如果你喜欢的话就不要吝惜你的一键三连了~
最后有任何问题欢迎关注下面的公众号获取第一时间消息、作者联系方式及每周抽奖等多重好礼 ↓↓↓