首页 > 其他分享 >实验12-使用keras预训练模型完成猫狗识别

实验12-使用keras预训练模型完成猫狗识别

时间:2024-05-14 22:31:36浏览次数:23  
标签:#%% 12 keras train test 识别 os dir history

win10

python3.7

tensorflow-gpu2.6.0

keras2.6.0

 

出现

ValueError: Asked to retrieve element 0, but the Sequence has length 0

原因:老师给的代码中标红的文件夹下没有所需文件或缺失

 解决办法:

将image文件夹下的test下的cat和dog文件夹分别复制到dc下的test和train

 最终效果:

 

运行截图:

 

代码:

#-*- codeing = utf-8 -*-
#@Time : 2022/10/2 11:44
#@Author : 程浩
#@File : 猫狗识别.py
#@Software: PyCharm
import tensorflow as tf
import keras
from keras import layers
import numpy as np
import os
import shutil
from tensorflow.keras.applications import VGG16
from tensorflow.keras.optimizers import Adam

#%%

base_dir = './dc'
train_dir = base_dir + '/train'
train_dog_dir = train_dir + '/dog'
train_cat_dir = train_dir + '/cat'
test_dir = base_dir + '/test'
test_dog_dir = test_dir + '/dog'
test_cat_dir = test_dir + '/cat'
dc_dir = './dc/train'


#%%

if not os.path.exists(base_dir):

    os.mkdir(base_dir)

    os.mkdir(train_dir)
    os.mkdir(train_dog_dir)
    os.mkdir(train_cat_dir)
    os.mkdir(test_dir)
    os.mkdir(test_dog_dir)
    os.mkdir(test_cat_dir)

    fnames = ['cat.{}.jpg'.format(i) for i in range(1000,2000)]
    for fname in fnames:
        src = os.path.join(dc_dir, fname)
        dst = os.path.join(train_cat_dir, fname)
        shutil.copyfile(src, dst)
    #
    fnames = ['cat.{}.jpg'.format(i) for i in range(1000, 1500)]
    for fname in fnames:
        src = os.path.join(dc_dir, fname)
        dst = os.path.join(test_cat_dir, fname)
        shutil.copyfile(src, dst)

    fnames = ['dog.{}.jpg'.format(i) for i in range(1000)]
    for fname in fnames:
        src = os.path.join(dc_dir, fname)
        dst = os.path.join(train_dog_dir, fname)
        shutil.copyfile(src, dst)

    fnames = ['dog.{}.jpg'.format(i) for i in range(1000, 1500)]
    for fname in fnames:
        src = os.path.join(dc_dir, fname)
        dst = os.path.join(test_dog_dir, fname)
        shutil.copyfile(src, dst)

#%%

from keras.preprocessing.image import ImageDataGenerator
train_datagen = ImageDataGenerator(rescale=1./255)
test_datagen = ImageDataGenerator(rescale=1./255)

#%%

train_generator = train_datagen.flow_from_directory(
    train_dir,
    target_size=(200, 200),
    batch_size=20,
    class_mode='binary'
)

test_generator = test_datagen.flow_from_directory(
    test_dir,
    target_size=(200, 200),
    batch_size=20,
    class_mode='binary'
)

#%% md

# keras内置经典网络实现

#%%
covn_base = VGG16(weights=None, include_top=False)


#%%

covn_base.summary()

#%%

model = keras.Sequential()
model.add(covn_base)
model.add(layers.GlobalAveragePooling2D())
model.add(layers.Dense(512, activation='relu'))
model.add(layers.Dense(1, activation='sigmoid'))

#%%

model.summary()

#%%

covn_base.trainable = False #设置权重不可变,卷积基不可变

#%%

model.summary()

#%%
model.compile(optimizer=Adam(lr=0.001),
              loss='binary_crossentropy',
              metrics=['acc'])


#%%

history = model.fit_generator(
    train_generator,
    steps_per_epoch=100,
    epochs=15,
    validation_data=test_generator,
    validation_steps=50)

#%%

import matplotlib.pyplot as plt
# %matplotlib inline

#%%
print(history.history)

plt.plot(history.epoch, history.history['loss'], 'r', label='loss')
# plt.plot(history.epoch, history.history['val_loss'], 'b--', label='val_loss')
plt.legend()

#%%

plt.plot(history.epoch, history.history['acc'], 'r')
# plt.plot(history.epoch, history.history['val_acc'], 'b--')

 

标签:#%%,12,keras,train,test,识别,os,dir,history
From: https://www.cnblogs.com/liucaizhi/p/18192387

相关文章

  • 实验10-使用keras完成线性回归
    VMware虚拟机Ubuntu20-LTSpython3.6tensorflow1.15.0keras2.3.1运行截图:   代码:importnumpyasnpnp.random.seed(1337)fromkeras.modelsimportSequentialfromkeras.layersimportDensefromsklearn.metricsimportr2_scorefrommatplotlibimportp......
  • 实验11-使用keras完成逻辑回归
    VMware虚拟机Ubuntu20-LTSpython3.6tensorflow1.15.0keras2.3.1运行截图:   代码:importnumpyasnpfromkeras.modelsimportSequentialfromkeras.layersimportDense,Dropout,Activation,Flattenimportmatplotlib.pyplotaspltfromsklearnimport......
  • 实验7-使用TensorFlow完成MNIST手写体识别
    VMware虚拟机Ubuntu20-LTSpython3.6tensorflow1.15.0keras2.3.1运行截图:  代码:importosos.environ['TF_CPP_MIN_LOG_LEVEL']='2'importnumpyasnpimporttensorflowastffromtensorflow_core.examples.tutorials.mnistimportinput_datai......
  • C121 李超树+DP P4655 [CEOI2017] Building Bridges
    视频链接:C121李超树+DPP4655[CEOI2017]BuildingBridges_哔哩哔哩_bilibili   LuoguP4655[CEOI2017]BuildingBridges#include<iostream>#include<cstring>#include<algorithm>usingnamespacestd;#definelllonglong#definelsu<<......
  • 基于毫米波的人体跟踪和识别算法
    具体的软硬件实现点击http://mcu-ai.com/MCU-AI技术网页_MCU-AI准确的人类活动识别(HAR)是实现新兴的上下文感知应用程序的关键,这些应用程序需要了解和识别人类行为,例如监测独居的残疾人或老年人。传统上,HAR是通过环境传感器(例如,相机)或通过可穿戴设备(例如,具有惯性测量单元(IMU)的智......
  • macOS Monterey 12.7.5 (21H1222) 正式版发布,ISO、IPSW、PKG 下载
    macOSMonterey12.7.5(21H1222)正式版发布,ISO、IPSW、PKG下载5月13日凌晨,macOSSonoma14.5发布,同时带来了macOSVentru13.6.7和macOSMonterey12.7.5安全更新。本站下载的macOS软件包,既可以拖拽到Applications(应用程序)下直接安装,也可以制作启动U盘安装,或者......
  • macOS Monterey 12.7.5 (21H1222) Boot ISO 原版可引导镜像下载
    macOSMonterey12.7.5(21H1222)BootISO原版可引导镜像下载5月13日凌晨,macOSSonoma14.5发布,同时带来了macOSVentru13.6.7和macOSMonterey12.7.5安全更新。本站下载的macOS软件包,既可以拖拽到Applications(应用程序)下直接安装,也可以制作启动U盘安装,或者在......
  • 如何将截图快速识别成文字?
    随着数字化时代的发展,截图已经成为我们日常工作中必不可少的一环。无论是截取程序界面、聊天记录、网页内容还是电子邮件,截图都是传递信息和记录内容的重要手段。然而,由于截图本身是一种图像文件,如果我们需要将其中的文字提取出来进行编辑、复制或搜索,就需要转换截图为可编辑的......
  • 痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU启动那些事(12.A)- uSDHC eMMC启动时间(RT1170)
    大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是恩智浦i.MXRT1170uSDHCeMMC启动时间。本篇是i.MXRT1170启动时间评测第五弹,前四篇分别给大家评测了RawNAND启动时间(基于MIMXRT1170-EVK_Rev.B)、SerialNOR启动时间(基于MIMXRT1170-EVB_Rev.A2)、1......
  • js车牌识别接口开发示例、Vin解析接口
    采用手机app扫描车牌来管理停车场车位或其他场景车位的方式已成为主流,车辆管理员们不再像以前一样使用一个小本子和笔来记录下车牌号码。如此一来,工作也仿佛变得轻松了不少,下面就让翔云为您介绍如何应用OCR技术来实现车牌识别功能。首先,我们来看一下车牌识别的功能一般都......