基于vgg16的猫狗识别(二分类)

基于vgg16的猫狗识别(二分类)

python代码如下:
from tensorflow.keras.applications import VGG16
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Flatten
from tensorflow.keras.preprocessing.image import ImageDataGenerator
from tensorflow.keras.optimizers import RMSprop
import matplotlib.pyplot as plt

train_path = r"D:\Desktop\Dog_Cat\train" #训练集目录
valid_path = r"D:\Desktop\Dog_Cat\valid" #验证集目录
i1 = ImageDataGenerator(rescale=1/255, rotation_range=40, width_shift_range=0.2)
i2 = ImageDataGenerator(rescale=1/255)
f1 = i1.flow_from_directory(train_path, target_size=(150, 150), batch_size=20, class_mode="binary")
f2 = i1.flow_from_directory(valid_path, target_size=(150, 150), batch_size=20, class_mode="binary")
# 2.构建模型
model = Sequential()
vgg = VGG16(include_top=False, input_shape=(150, 150, 3))
vgg.summary()
for i, j in enumerate(vgg.layers):
    if i >= 17:
        j.trainable = True
    else:
        j.trainable = False
vgg.summary()
model.add(vgg)
model.add(Flatten())
model.add(Dense(units=1, activation="sigmoid"))
model.compile(optimizer=RMSprop(learning_rate=1E-4), loss="binary_crossentropy", metrics=["acc"])
model.summary()
history = model.fit_generator(generator=f1, epochs=15, validation_data=f2)
plt.rcParams['font.family'] = ['sans-serif']
plt.rcParams['font.sans-serif'] = ['SimHei']
accuracy = history.history['acc']
val_accuracy = history.history['val_acc']
epochs = range(1, len(accuracy)+1)
plt.plot(epochs, accuracy, label='训练精度', c = 'r')
plt.plot(epochs, val_accuracy, label='验证精度', c = 'b')
plt.xlabel('epochs')
plt.ylabel('accuracy')
plt.title('author:peiyuanman')
plt.legend()
plt.show()

model.save('DogCatModelVGG16.h5')


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
课程导语:    人工智能可谓是现阶段最火的行业,在资本和技术协同支持下正在进入高速发展期。当今全球市值前五大公司都指向同一发展目标:人工智能。近几年,人工智能逐渐从理论科学落地到现实中,与生活越来越息息相关,相关的各种职位炙手可热,而深度学习更是人工智能无法绕开的重要一环。 从AlphaGo打败李世石开始,深度学习技术越来越引起社会各界的广泛关注。不只学术界,甚至在工业界也取得了重大突破和广泛应用。其中应用最广的研究领域就是图像处理和自然语言处理。而要入门深度学习,CNN和RNN作为最常用的两种神经网络是必学的。网上关于深度学习的资料很多,但大多知识点分散、内容不系统,或者以理论为主、代码实操少,造成学员学习成本高。本门课程将从最基础的神经元出发,对深度学习的基础知识进行全面讲解,帮助大家迅速成为人工智能领域的入门者,是进阶人工智能深层领域的基石。 讲师简介:赵辛,人工智能算法科学家。2019年福布斯科技榜U30,深圳市海外高层次人才(孔雀人才)。澳大利亚新南威尔士大学全奖博士,SCI收录其发表过的10篇国际期刊学术文章。曾任深圳市微埃智能科技有限公司联合创始人。CSDN人工智能机器学习、深度学习方向满分级精英讲师。授课风格逻辑严谨、条理清晰、循序渐进、循循善诱,化枯燥为如沐春风,所教学生人数过万。 课程设计: 本课程分为5大模块,19小节,共计540时长(约9小时): 第一部分,课程介绍、目标与内容概览。主要学习人工智能深度学习应用场景;熟悉深度学习主流技术;掌握使用keras解决深度学习主要问题(神经网络、卷积神经网络、循环神经网络),以及深度学习主要内容:神经网络、卷积神经网络、循环神经网络;案例简介。 第二部分,深度学习之多层感知器(MLP)。主要学习多层感知器(MLP);MLP实现非线性分类深度学习实战准备;Python调用keras实现MLP。 MLP技术点实战案例:第三部分,深度学习之卷积神经网络(CNN)。主要学习卷积神经网络 ; CNN模型分析;主流CNN模型; Python调用keras实现CNN; CNN技术点实战案例:第四部分,深度学习之循环神经网络(RNN)。主要学习循环神经网络;RNN模型分析;Python调用keras实现RNN。 RNN技术点实战案例: 第五部分,综合提升。主要进行迁移学习;混合模型;实战准备+综合实战,以及最后进行课程内容总结。 混合模型技术点实战案例
好的,下面是一个基于vgg16模型的猫狗识别的PyTorch代码: ```python import torch import torch.nn as nn import torchvision import torchvision.transforms as transforms from torch.autograd import Variable # 定义超参数 num_epochs = 5 batch_size = 10 learning_rate = 0.001 # 定义数据预处理 transform = transforms.Compose( [transforms.Resize(224), transforms.CenterCrop(224), transforms.ToTensor(), transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))]) # 加载数据集 train_dataset = torchvision.datasets.ImageFolder(root='./data/train', transform=transform) train_loader = torch.utils.data.DataLoader(train_dataset, batch_size=batch_size, shuffle=True) test_dataset = torchvision.datasets.ImageFolder(root='./data/test', transform=transform) test_loader = torch.utils.data.DataLoader(test_dataset, batch_size=batch_size, shuffle=False) # 加载预训练的vgg16模型 vgg16 = torchvision.models.vgg16(pretrained=True) # 冻结vgg16模型的所有参数 for param in vgg16.parameters(): param.requires_grad = False # 替换vgg16模型的最后一个全连接层 num_features = vgg16.classifier[6].in_features vgg16.classifier[6] = nn.Linear(num_features, 2) # 定义损失函数和优化器 criterion = nn.CrossEntropyLoss() optimizer = torch.optim.Adam(vgg16.classifier[6].parameters(), lr=learning_rate) # 训练模型 for epoch in range(num_epochs): for i, (images, labels) in enumerate(train_loader): images = Variable(images) labels = Variable(labels) # 前向传播和反向传播 optimizer.zero_grad() outputs = vgg16(images) loss = criterion(outputs, labels) loss.backward() optimizer.step() # 输出训练结果 if (i + 1) % 100 == 0: print('Epoch [{}/{}], Step [{}/{}], Loss: {:.4f}'.format(epoch + 1, num_epochs, i + 1, len(train_dataset) // batch_size, loss.item())) # 测试模型 vgg16.eval() correct = 0 total = 0 for images, labels in test_loader: images = Variable(images) outputs = vgg16(images) _, predicted = torch.max(outputs.data, 1) total += labels.size(0) correct += (predicted == labels).sum() print('Accuracy of the model on the test images: {} %'.format(100 * correct / total)) ``` 在这个代码中,我们首先定义了超参数,然后使用`transforms`模块对数据进行预处理,包括将图像缩放到224x224像素、在中心进行裁剪、将图像转换为张量和进行归一化。接着,我们通过`ImageFolder`类加载数据集,并使用`DataLoader`类将数据集转换为批处理数据。然后,我们加载预训练的`vgg16`模型,并替换其最后一个全连接层以适应猫狗分类任务。我们还定义了损失函数和优化器。在训练期间,我们首先将数据和标签变量化,然后执行前向传播和反向传播,并更新模型参数。最后,我们测试模型并计算其在测试集上的准确性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值