首页 > 其他分享 >keras分类猫狗数据(中)使用CNN分类模型

keras分类猫狗数据(中)使用CNN分类模型

时间:2022-10-26 17:03:18浏览次数:55  
标签:pre keras 分类 128 input CNN import model


​keras分类猫狗数据(上)数据预处理​​​
​​​keras分类猫狗数据(中)使用CNN分类模型​​​
​​​keras分类猫狗数据(下)迁移学习​​​
​​​keras分类猫狗数据(番外篇)深度学习CNN连接SVM分类​

1 . 如下代码,数据增强,并根据文件夹创建数据流(我的保存为了​​catvsdogs/morph.py​​)。

from keras.preprocessing.image import ImageDataGenerator

train_dir="E:/MLdata/kaggle_Dogsvs.Cats/min_trainfordata/train"

test_dir="E:/MLdata/kaggle_Dogsvs.Cats/min_trainfordata/test"

train_pic_gen=ImageDataGenerator(rescale=1./255,rotation_range=20,width_shift_range=0.2,height_shift_range=0.2,
shear_range=0.2,zoom_range=0.5,horizontal_flip=True,fill_mode='nearest')

test_pic_gen=ImageDataGenerator(rescale=1./255)


train_flow=train_pic_gen.flow_from_directory(train_dir,(128,128),batch_size=32,class_mode='binary')

test_flow=test_pic_gen.flow_from_directory(test_dir,(128,128),batch_size=32,class_mode='binary')

# print(train_flow.class_indices)

2 .构建模型并训练

from keras.models import Sequential
from keras.layers import Convolution2D,MaxPool2D,Flatten,Dense,Dropout
from keras.callbacks import TensorBoard

model=Sequential([
Convolution2D(32,3,3,input_shape=(128,128,3),activation='relu'),
MaxPool2D(pool_size=(2,2)),
Convolution2D(64,3,3,input_shape=(128,128,3),activation='relu'),
MaxPool2D(pool_size=(2,2)),
Flatten(),
Dense(64,activation='relu'),
Dropout(0.5),
Dense(1,activation='sigmoid')
])

model.summary()

model.compile(optimizer='rmsprop',loss='binary_crossentropy',metrics=['accuracy'])

import catvsdogs.morph as morph#引用上文1的数据增加代码

model.fit_generator(
morph.train_flow,steps_per_epoch=100,epochs=50,verbose=1,validation_data=morph.test_flow,validation_steps=100,
callbacks=[TensorBoard(log_dir='./logs/1')]
)

model.save('outputs/catdogs_model.h5')

keras分类猫狗数据(中)使用CNN分类模型_数据

3 .也可以将步骤2的模型数据重新加载继续训练。

from keras.callbacks import TensorBoard
from keras.models import load_model

model=load_model('outputs/catdogs_model.h5')

model.summary()

import catvsdogs.morph as morph

model.fit_generator(
morph.train_flow,steps_per_epoch=100,epochs=50,verbose=1,validation_data=morph.test_flow,validation_steps=100,
callbacks=[TensorBoard(log_dir='./logs/2')]
)

model.save('outputs/catdogs_model.h5')

4 . 以下加载模型数据并参与预测:

from keras import models
import numpy as np
import cv2

def get_inputs(src=[]):
pre_x = []
for s in src:
input = cv2.imread(s)
input = cv2.resize(input, (128, 128))
input = cv2.cvtColor(input, cv2.COLOR_BGR2RGB)
pre_x.append(input) # input一张图片
pre_x = np.array(pre_x) / 255.0
return pre_x

def put_prey(pre_y,label):
output=[]
for y in pre_y:
if y[0]<0.5:#二分类,此处只用一个神经元输出
output.append([label[0],1-y[0]])
else:
output.append([label[1], y[0]])
return output

model=models.load_model('outputs/catdogs_model.h5')

pre_x=get_inputs(['../data/rotman.jpg','../data/cat.jpg'])


pre_y=model.predict(pre_x)

import catvsdogs.morph as

[[‘dogs’, 0.8959254], [‘cats’, 0.6214156150817871]]

测试所用图片:

keras分类猫狗数据(中)使用CNN分类模型_数据_02


5 .第二次训练验证数据正确率和损失如下:

keras分类猫狗数据(中)使用CNN分类模型_h5_03


可以看到准确率在0.78左右。


标签:pre,keras,分类,128,input,CNN,import,model
From: https://blog.51cto.com/u_15847885/5798054

相关文章

  • keras分类猫狗数据(下)finetune
    ​​keras分类猫狗数据(上)数据预处理​​​​​​keras分类猫狗数据(中)使用CNN分类模型​​​​​​keras分类猫狗数据(下)迁移学习​​​​​​keras分类猫狗数据(番外篇)深度......
  • keras中的History对象
    keras中的​​fit_generator​​​和​​fit​​函数均返回History对象,那么History怎么用呢?事实上History对象已经记录了运行输出。在了解之前,我们甚至自己定义回调函数记录......
  • keras使用预训练模型inception_v3识别图片
    本文使用keras中inception_v3预训练模型识别图片。结合官方源码,如下内容。其中,数据输入借助opencv-python,程序运行至​​model=InceptionV3()​​​时按需(如果不存在就)下载......
  • 分类算法评价
    分类算法有很多,不同分类算法又用很多不同的变种。不同的分类算法有不同的特定,在不同的数据集上表现的效果也不同,因此需要根据特定的问题和任务选择合适的算法进行求解。对......
  • 详解决策树-分类树【菜菜的sklearn课堂笔记】
    文章换行有问题,望谅解视频作者:菜菜TsaiTsai链接:【技术干货】菜菜的机器学习sklearn【全85集】Python进阶_哔哩哔哩_bilibili关键概念:节点根节点:没有进边,有出边。包含......
  • 【计算机视觉(CV)】基于全连接网络实现宝石分类
    【计算机视觉(CV)】基于全连接网络实现宝石分类作者简介:在校大学生一枚,华为云享专家,阿里云专家博主,腾云先锋(TDP)成员,云曦智划项目总负责人,全国高等学校计算机教学与产业实践......
  • 【计算机视觉(CV)】基于卷积神经网络实现美食分类
    【计算机视觉(CV)】基于卷积神经网络实现美食分类作者简介:在校大学生一枚,华为云享专家,阿里云星级博主,腾云先锋(TDP)成员,云曦智划项目总负责人,全国高等学校计算机教学与产业实......
  • 概念介绍_软件架构与概念介绍_资源分类
    概念介绍_软件架构1.web概念概述 2.HTML web概念概述 JavaWeb:使用Java语言开发基于互联网的项目软件架构: 1.C/S:Cl......
  • ConvFormer: Closing the Gap Between CNN and Vision Transformers概述
    0.前言相关资料:arxivgithub论文解读论文基本信息:发表时间:arxiv2022(2022.9.16)1.针对的问题CNN虽然效率更高,能够建模局部关系,易于训练,收......
  • 第4章 最基础的分类算法-k近邻算法 kNN
    4-1k近邻算法基础 ......