深度学习--猫狗图像分类

1、环境介绍
python3.6,tensorflow1.4版本,pycharm编译器
2、函数库导入

import cv2
import matplotlib.pyplot as plt
import os, PIL, pathlib
import numpy as np
from tensorflow.keras.layers import Conv2D,MaxPooling2D,Dropout,Dense,Flatten,Activation
import pandas as pd
from tensorflow.keras.models import Sequential
import warnings
from tensorflow import keras
import pathlib
from tensorflow.keras.layers import BatchNormalization
import tensorflow as tf

3、数据集获取
数据集链接,含有猫狗两类图像,图像尺寸不等,猫狗图片各1000张。
在这里插入图片描述
猫:
在这里插入图片描述

狗:在这里插入图片描述
4、神经网络搭建:

def createModel(num_classes):model = Sequential()  # 顺序模型model.add(Conv2D(16, (5, 5), strides=(2, 2), padding="same", input_shape=(256, 256, 3), data_format='channels_last',kernel_initializer='uniform', activation="relu"))model.add(MaxPooling2D(pool_size=(2, 2), strides=(2, 2)))model.add(Conv2D(32, (3, 3), strides=(2, 2), activation="relu"))model.add(MaxPooling2D(pool_size=(2, 2), strides=(2, 2)))model.add(Conv2D(64, (3, 3), activation="relu"))model.add(Conv2D(128, (3, 3), activation="relu"))model.add(MaxPooling2D(pool_size=(2, 2), strides=(2, 2), name="pool5"))model.add(Conv2D(256, (1, 1), activation="relu"))model.add(Dropout(0.25))model.add(Flatten())model.add(Dense(256))model.add(BatchNormalization())model.add(Activation('relu'))model.add(BatchNormalization())model.add(Dropout(0.5))model.add(Dense(num_classes))model.add(BatchNormalization())model.add(Activation("softmax"))model.summary()return model

神经网络结构如下:

Model: "sequential"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
conv2d (Conv2D)              (None, 128, 128, 16)      1216      
_________________________________________________________________
max_pooling2d (MaxPooling2D) (None, 64, 64, 16)        0         
_________________________________________________________________
conv2d_1 (Conv2D)            (None, 31, 31, 32)        4640      
_________________________________________________________________
max_pooling2d_1 (MaxPooling2 (None, 15, 15, 32)        0         
_________________________________________________________________
conv2d_2 (Conv2D)            (None, 13, 13, 64)        18496     
_________________________________________________________________
conv2d_3 (Conv2D)            (None, 11, 11, 128)       73856     
_________________________________________________________________
pool5 (MaxPooling2D)         (None, 5, 5, 128)         0         
_________________________________________________________________
conv2d_4 (Conv2D)            (None, 5, 5, 256)         33024     
_________________________________________________________________
dropout (Dropout)            (None, 5, 5, 256)         0         
_________________________________________________________________
flatten (Flatten)            (None, 6400)              0         
_________________________________________________________________
dense (Dense)                (None, 256)               1638656   
_________________________________________________________________
batch_normalization (BatchNo (None, 256)               1024      
_________________________________________________________________
activation (Activation)      (None, 256)               0         
_________________________________________________________________
batch_normalization_1 (Batch (None, 256)               1024      
_________________________________________________________________
dropout_1 (Dropout)          (None, 256)               0         
_________________________________________________________________
dense_1 (Dense)              (None, 2)                 514       
_________________________________________________________________
batch_normalization_2 (Batch (None, 2)                 8         
_________________________________________________________________
activation_1 (Activation)    (None, 2)                 0         
=================================================================
Total params: 1,772,458
Trainable params: 1,771,430
Non-trainable params: 1,028

5、训练结果展示:

print(history.history.keys())
plt.plot(history.history['accuracy'])
plt.plot(history.history['val_accuracy'])
plt.title('model1 accuracy')
plt.ylabel('accuracy')
plt.xlabel('epoch')
plt.legend(['trian','test'],loc='upper left')
plt.show()plt.plot(history.history['loss'])
plt.plot(history.history['val_loss'])
plt.title('model1 loss')
plt.ylabel('loss')
plt.xlabel('epoch')
plt.legend(['trian','test'],loc='upper left')
plt.show()

在这里插入图片描述
在这里插入图片描述

6、完整代码:

import cv2
import matplotlib.pyplot as plt
import os, PIL, pathlib
import numpy as np
from tensorflow.keras.layers import Conv2D,MaxPooling2D,Dropout,Dense,Flatten,Activation
import pandas as pd
from tensorflow.keras.models import Sequential
import warnings
from tensorflow import keras
import pathlib
from tensorflow.keras.layers import BatchNormalization
import tensorflow as tf
os.environ["CUDA_VISIBLE_DEVICES"] = "0"
warnings.filterwarnings("ignore")  # 忽略警告信息
plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号
# 数据集路径
trainpath='.\data\cats_and_dogs_v2\\train'
testpath='.\data\cats_and_dogs_v2\\test'
trainpath1 = pathlib.Path(trainpath)
# testpath1 = pathlib.Path(testpath)
m= len(list(trainpath1.glob('*/*')))
m2= len(list(trainpath1.glob('*/*')))
# 图片尺寸
batch_size = 16
# img_height = 50
# img_width  = 50
# 二分类
num_classes=2
def changeDim(img):#扩展维度变4维img=np.expand_dims(img,axis=2)#return img
def Generator(path, batch_size):data = []label = []while True:file = os.listdir(path)i = 0img1 = []img2 = []imgname1 = os.listdir(path + '/' + file[0])imgname2 = os.listdir(path + '/' + file[1])# print(imgname1)for name1 in imgname1:img1.append(path + '/' + file[0] + '/' + name1)for name2 in imgname2:img2.append(path + '/' + file[1] + '/' + name2)imgname = img1 + img2  ######横向连接# print(imgname)# print((len(imgname)))np.random.shuffle(imgname)# 猫是0,狗是1for finame in imgname:im = cv2.imread(finame)im = cv2.resize(im,(256,256))label_a = finame.split('/')[-2]# print(label_a)if label_a=='cats':label_a=0else:label_a = 1# im = changeDim(im)# print(im.shape)data.append(im)# print(data.shape)label.append(label_a)if (len(label) == batch_size):data = np.array(data)data = data.astype('float32')data /= 255.0label = keras.utils.to_categorical(label, 2)yield data, labeldata = []label = []i += 1
def createModel(num_classes):model = Sequential()  # 顺序模型model.add(Conv2D(16, (5, 5), strides=(2, 2), padding="same", input_shape=(256, 256, 3), data_format='channels_last',kernel_initializer='uniform', activation="relu"))model.add(MaxPooling2D(pool_size=(2, 2), strides=(2, 2)))model.add(Conv2D(32, (3, 3), strides=(2, 2), activation="relu"))model.add(MaxPooling2D(pool_size=(2, 2), strides=(2, 2)))model.add(Conv2D(64, (3, 3), activation="relu"))model.add(Conv2D(128, (3, 3), activation="relu"))model.add(MaxPooling2D(pool_size=(2, 2), strides=(2, 2), name="pool5"))model.add(Conv2D(256, (1, 1), activation="relu"))model.add(Dropout(0.25))model.add(Flatten())model.add(Dense(256))model.add(BatchNormalization())model.add(Activation('relu'))model.add(BatchNormalization())model.add(Dropout(0.5))model.add(Dense(num_classes))model.add(BatchNormalization())model.add(Activation("softmax"))model.summary()return model
model = createModel(num_classes)
model.compile(optimizer="adam",loss='binary_crossentropy',metrics=['accuracy'])
from tensorflow.keras.callbacks import ModelCheckpoint, Callback, EarlyStopping, ReduceLROnPlateau, LearningRateSchedulerNO_EPOCHS = 50
PATIENCE  = 5
VERBOSE   = 1# 设置动态学习率
annealer = LearningRateScheduler(lambda x: 1e-3 * 0.99 ** (x+NO_EPOCHS))# 设置早停
earlystopper = EarlyStopping(monitor='loss', patience=PATIENCE, verbose=VERBOSE)#
checkpointer = ModelCheckpoint('best_model.h5',monitor='val_accuracy',verbose=VERBOSE,save_best_only=True,save_weights_only=True)
history=model.fit_generator(Generator(trainpath, batch_size),steps_per_epoch=int(m) // batch_size,epochs=NO_EPOCHS,verbose=1,shuffle=True,callbacks=[earlystopper, checkpointer, annealer])# 保存训练模型model.save('best_model.h5')
# score = model.evaluate(Generator(testpath, batch_size), verbose=0)
score = model.evaluate_generator(Generator(testpath,batch_size),steps=int(m2) // batch_size)
print(history.history.keys())
plt.plot(history.history['acc'])
# plt.plot(history.history['val_accuracy'])
plt.title('model1 accuracy')
plt.ylabel('accuracy')
plt.xlabel('epoch')
plt.legend(['trian','test'],loc='upper left')
plt.show()plt.plot(history.history['loss'])
# plt.plot(history.history['val_loss'])
plt.title('model1 loss')
plt.ylabel('loss')
plt.xlabel('epoch')
plt.legend(['trian','test'],loc='upper left')
plt.show()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/43247.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Kaggle-猫狗图像分类全流程实践(支持迁移学习和其他分类任务迁移)

1、insatll environment|安装环境 !pip install torchtoolbox !pip install torchsummary2、import package|导入三方库 # 基础库 import os import time import random import shutil import pandas as pd import csv from math import exp from PIL import Image import nu…

神经网络实战--使用迁移学习完成猫狗分类

前言: Hello大家好,我是Dream。 今天来学习一下如何使用基于tensorflow和keras的迁移学习完成猫狗分类,欢迎大家一起前来探讨学习~ 本文目录: 一、加载数据集1.调用库函数2.加载数据集3.数据集管理 二、猫狗数据集介绍1.猫狗数据集…

基于Pytorch的猫狗分类

无偿分享~ 猫狗二分类文件下载地址 在下一章说 猫狗分类这个真是困扰我好几天,找了好多资料都是以TensorFlow的猫狗分类,但我们要求的是以pytorch的猫狗分类。刚开始我找到了也运行成功了觉得可以了,最后看了一眼实践要求傻眼了,…

猫舍 靶场

目标url:http://117.41.229.122:8003/?id1 第一步,判断是否存在sql注入漏洞 构造 ?id1 and 11 ,回车 页面返回正常 构造 ?id1 and 12 ,回车 页面不正常,初步判断这里 可能 存在一个注入漏洞 第二步:判断字段数 构造 ?id1 and 11 order…

Olaparib 有望治疗 UBQLN4 过表达型肿瘤

基因组的不稳定性是人类遗传病和癌症的一大特点。在这篇文章当中,研究人员在常染色体隐性遗传病家族中发现了有害的 UBQLN4 突变。蛋白酶体穿梭因子UBQLN4 被 ATM 磷酸化并与泛素化的 MRE11 相互作用,从而介导早期的同源重组修复 (HRR)。在体外和体内实验…

神经内分泌肿瘤治疗新进展,神经内分泌肿瘤进展

脑肿瘤复发 。 颅内及椎管内肿瘤【概述】1.原发性肿瘤:起源于头颅、椎管内各种组织结构,如颅骨、脑膜、脑组织、颅神经、脑血管、脑垂体、松果体、脉络丛、颅内结缔组织、胚胎残余组织、脊膜、脊神经、脊髓、脊髓血管及脂肪组织等&#xff…

Nature Cancer | 发现非肿瘤药物的抗癌潜力

今天给大家介绍美国Broad Institute of MIT and Harvard的 Todd R. Golub团队发表在Nature cancer上的一篇文章:“Discovering the anticancer potential of nononcology drugs by systematic viability profiling“。在这个研究中,作者试图创建一个公共…

文献分享:定义的肿瘤抗原特异性T细胞增强了个性化的TCR-T细胞治疗和免疫治疗反应的预测

《Defifined tumor antigen-specifific T cells potentiate personalized TCR-T cell therapy and prediction of immunotherapy response》 简介 从患者体内自然发生的肿瘤抗原特异性T(Tas)细胞中提取的T细胞受体(TCRs)设计的T细胞将靶向其肿瘤中的个人TSAs。为了建立这种个性…

Irinotecan和vandetanib在治疗胰腺癌患者时产生协同效应(Irinotecan and vandetanib create synergies for t)

1. 摘要 背景:在胰腺癌(PAAD)中最常突变的基因对是KRAS和TP53,文章的目标是阐明KRAS/TP53突变的多组学和分子动力学图景,并为KRAS和TP53突变的PAAD患者获得有前景的新药物。此外,文章根据多组学数据尝试发现KRAS与TP53之间可能的联系。    …

癌症/肿瘤免疫治疗最新研究进展(2022年4月)

近年来,免疫治疗一直都是国内外肿瘤治疗研究领域的火爆热点,可以称之为革命性的突破。 除了大家熟知的PD-1/PD-L1已经先后斩获了包括肺癌、胃肠道肿瘤、乳腺癌、泌尿系统肿瘤、皮肤癌、淋巴瘤等在内的近20大实体肿瘤,成为免疫治疗的第一张王牌…

MCE | 癌症诊断和靶向治疗的“遍地开花”

据研究报道,很多癌细胞分泌的外泌体 (Exosome) 比正常细胞分泌的多 10 倍以上。外泌体参与了癌症的发生、进展、转移和耐药性,并通过转运蛋白和核酸,建立与肿瘤微环境的联系。例如,外泌体可导致免疫逃逸,癌细胞的免疫逃…

泛癌分析·找出各个癌症的预后相关基因

泛癌分析找出各个癌症的预后相关基因 ` 其他相关文章: 万物皆可pan分析高分文章登山梯for循环的熟练操作 前言 pan分析的第二篇我想写一下如何在TCGA整个基因集内实现COX单因素分析,将所有的预后相关基因筛选出来,同时得到这些基因的基本参数、统计量等信息。这样的分析的…

饮食干预减轻癌症治疗相关症状和毒性

现代化疗,放射疗法在摧毁癌细胞的同时,对健康细胞也造成了伤害,引发相关毒性,反应例如便秘,腹泻,疲劳,恶心,呕吐等。 癌症患者的营养状况可能是癌症治疗相关毒性的核心决定因素&…

边缘计算,是在炒概念吗?

导读:边缘计算概念刚出来的时候,很多人的第一反应是“这是哪个行业组织或者公司为了拉动市场需求而创造出来的新词汇吧?” 边缘计算究竟是什么?为什么会有边缘计算?它是一个全新的概念吗?谁在担任边缘计算的…

移动边缘计算笔记

该篇文章是阅读《移动边缘计算综述》所整理的笔记和心得,仅供参考,欢迎指正。 移动边缘计算(MEC),mobile edgecomputing,后来慢慢过渡为“多接入边缘计算”(multi-access edge computing&#x…

关于边缘计算和边云协同,看这一篇就够了~

几年前,大多数人都期望将物联网部署至云端,这的确可以给个人用户带来便捷的使用体验,但构建企业级的物联网解决方案,仍然需要采用云计算和边缘计算的结合方案。与纯粹的云端解决方案相比,包含边缘侧的混合方案可以减少…

边缘计算简介以及几款边缘计算开源平台

边缘计算中的边缘(edge)指的是网络边缘上的计算和存储资源,这里的网络边缘与数据中心相对,无论是从地理距离还是网络距离上来看都更贴近用户。作为一种新的计算范式,边缘计算将计算任务部署于接近数据产生源的网络边缘…

什么是边缘计算?

注:本篇翻译自施巍松教授的论文《Edge Computing : Vision and Challenges》 目录 文章目录 摘要简介什么是边缘计算什么是边缘计算边缘计算的优点 案例研究云卸载视频分析智能家居智慧城市 机遇和挑战编程可行性命名数据抽象服务管理私密性最优化指标 小结 摘要 …

中国电信边缘计算最佳实践

大数据、云计算、AI 等新一代信息技术的高速发展,在为新兴互联网行业提供强劲驱动之外,也在引领传统行业实施数字化、智能能化转型,并催生出智能制造、智慧金融等一系列全新智能产业生态。在中国电信 MEC 平台中,中国电信正依托自…

为什么需要边缘计算?哪些场景需要边缘计算?

为什么需要边缘计算? 边缘计算(Edge Computing)是一种将数据处理和计算功能移到接近数据源头的边缘设备上进行的计算模式。相比传统的云计算模式,边缘计算能够在接近数据源头的地方进行实时的数据处理,这为计算机视觉…