猫狗大战--使用VGG16迁移学习进行CIFAR10分类

本次实验主要使用VGG16模型迁移学习进行CIFAR10分类,将猫和狗的图片区分开,平台使用Google Colab平台。

VGG网络

VGG是由Simonyan 和Zisserman在文献《Very Deep Convolutional Networks for Large Scale Image Recognition》中提出卷积神经网络模型,是2014年的 ImageNet图像分类与定位挑战赛的第二名。VGG网络影响巨大,一直到今天仍然很多人在使用。在这里插入图片描述
可以看到VGG网络是一个非常庞大的网络,训练难度也很高,我们本次采用迁移学习的方式,对原网络进行 fine-tune (即固定前面若干层,作为特征提取器,只重新训练最后两层),尝试提高实验效果。

一、数据集导入

研习社为我们提供了提供了训练以及测试的数据集,以及最终实验数据的检测。(目前比赛已经结束,但仍可做为练习赛每天提交测试结果)
由于训练的数据集,我们采用了偷懒的办法,只选取了训练集其中一部分进行训练。

训练集直接从网站链接导入

! wget http://fenggao-image.stor.sinaapp.com/dogscats.zip
! unzip dogscats.zip

测试集数据,下载完成后,解压并仅压缩test文件夹,上传到Google Drive中,然后在colab左侧按钮处连接Google Drive在这里插入图片描述
然后,我们就能在drive目录中查看到我们上传的数据集的压缩包的具体位置。

训练集引入代码:

#具体位置根据自己的情况修改
from google.colab import drive
drive.mount('/content/drive')
!unzip "/content/drive/MyDrive/Colab Notebooks/test.zip"

二、训练模型

1.加载训练集数据

normalize = transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])

vgg_format = transforms.Compose([
               transforms.CenterCrop(224),
               transforms.ToTensor(),
               norma
<think>好的,用户想了解如何使用CNN进行图像分类,特别是希望有一个示例教程。首先,我需要整理已有的引用资料,看看有没有可以直接参考的内容。引用1提到用Matlab和CNN进行图像分类使用猫狗数据集,分为数据加载、网络搭建、训练和评估几个步骤。引用2则是用TensorFlow,同样用猫狗数据集,还提到了迁移学习和高级概念。引用3展示了一些经典CNN模型的计算量和精度关系图。 用户可能希望一个通用的步骤指南,而不仅仅是特定工具的实现。需要综合不同引用中的信息,给出一个结构清晰的流程。可能需要分为数据准备、模型构建、训练、评估几个部分,同时加入示例代码。考虑到用户可能对不同的框架感兴趣,选择Python和TensorFlow/Keras作为示例,因为引用2提到了TensorFlow,而Keras更易上手。 接下来需要确保步骤正确:数据预处理包括加载、划分、归一化;模型构建部分要包含卷积层、池化层、全连接层;训练部分需要编译模型、设置回调函数;评估部分包括准确率、混淆矩阵等。示例代码要简单明了,适合新手。同时,按照用户要求,生成相关问题,这些问题需要围绕CNN的应用、优化、迁移学习等方面。 需要检查是否有遗漏的步骤,比如数据增强或者迁移学习,但根据引用2和3,迁移学习属于高级内容,可能在相关问题中提及即可。还要注意引用标记的位置,比如在提到数据划分时引用1,提到迁移学习时引用2,经典模型时引用3。最后确保使用中文,LaTeX格式正确,行内公式用$...$,独立公式用$$...$$,代码块用正确语法。</think>### 基于CNN的图像分类实现步骤 #### 一、数据准备与预处理 1. **数据集加载与划分** 使用标准数据集(如CIFAR-10猫狗大战数据集)时,需按比例划分为训练集、验证集和测试集。例如猫狗数据集包含4000张图像时,可按7:2:1划分[^1]: ```python from tensorflow.keras.preprocessing.image import ImageDataGenerator train_datagen = ImageDataGenerator(rescale=1./255, validation_split=0.2) train_generator = train_datagen.flow_from_directory('data/train', subset='training') val_generator = train_datagen.flow_from_directory('data/train', subset='validation') ``` 2. **数据增强(可选)** 对训练集进行旋转、平移、翻转等操作以提升泛化能力: ```python train_datagen = ImageDataGenerator(rotation_range=20, horizontal_flip=True) ``` #### 二、CNN模型构建 1. **基础网络结构** 典型CNN包含卷积层、池化层和全连接层: ```python from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense model = Sequential([ Conv2D(32, (3,3), activation='relu', input_shape=(150,150,3)), MaxPooling2D(2,2), Conv2D(64, (3,3), activation='relu'), MaxPooling2D(2,2), Flatten(), Dense(512, activation='relu'), Dense(1, activation='sigmoid') # 二分类输出 ]) ``` 2. **迁移学习(高级优化)** 使用预训练模型(如VGG16、ResNet)提升效率[^2][^3]: ```python from tensorflow.keras.applications import VGG16 base_model = VGG16(weights='imagenet', include_top=False, input_shape=(150,150,3)) model = Sequential([ base_model, Flatten(), Dense(256, activation='relu'), Dense(1, activation='sigmoid') ]) ``` #### 三、模型训练与评估 1. **编译与训练** 配置优化器和损失函数,加入早停机制: ```python model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy']) early_stop = tf.keras.callbacks.EarlyStopping(monitor='val_loss', patience=3) history = model.fit(train_generator, epochs=20, validation_data=val_generator, callbacks=[early_stop]) ``` 2. **性能评估** 使用测试集计算准确率、混淆矩阵等指标: ```python test_loss, test_acc = model.evaluate(test_generator) print(f'测试准确率:{test_acc*100:.2f}%') ``` #### 四、关键公式说明 - **卷积操作**:$S(i,j) = (I \ast K)(i,j) = \sum_m \sum_n I(i+m, j+n)K(m,n)$ - **交叉熵损失函数**:$$L = -\frac{1}{N}\sum_{i=1}^N [y_i \log \hat{y}_i + (1-y_i)\log(1-\hat{y}_i)]$$
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值