IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 猫狗识别神经网络搭建 -> 正文阅读

[人工智能]猫狗识别神经网络搭建

下载数据集

网上找的数据集,和项目的数据集数目不同,但是无所谓了
提取码:jzyc

划分数据

需要向整体的数据划分位训练集和测试集
下载下来的zip文件中有img文件夹,内部图片0.xx.jpeg是猫类型图片
1.xx.jpeg是狗的类型图片,总共有12000张图片,每个种类个6000张
需要将器划分为
在这里插入图片描述

import random

cat_dir = "E:/datasets/tmp/cat_dog/cat_dog/cat/"
dog_dir = "E:/datasets/tmp/cat_dog/cat_dog/dog/"
train_cat_dir = "E:/datasets/tmp/cat_dog/training/cat/"
train_dog_dir = "E:/datasets/tmp/cat_dog/training/dog/"
test_cat_dir = "E:/datasets/tmp/cat_dog/testing/cat/"
test_dog_dir = "E:/datasets/tmp/cat_dog/testing/dog/"
def split_data(source, train, test, split_size):
    """
    根据传入的源文件夹,将总共的图片经过一定的比例放到训练和测试的文件夹中
    param:
        source: 要切分的所有图片的总文件夹
        train: 要保存训练集图片的文件夹
        test: 要保存测试集图片的文件夹
        split_size: 切分的比例
    return:
        None
    """
    files = []
    for filename in os.listdir(source):
        file = source + '/' + filename
        files.append(filename)
    train_len = int(len(files) * split_size)
    test_len = len(files) - train_len
    shuffled_set = random.sample(files, len(files))
    train_set = shuffled_set[0 : train_len]
    test_set = shuffled_set[-test_len: ]
    for filename in train_set:
        this_file = source + filename
        destination = train + filename
        copyfile(this_file, destination)
    for filename in test_set:
        this_file = source + filename
        destination = test + filename
        copyfile(this_file, destination)
    print("{}文件写入成功 训练集大小{}, 测试集大小{}".format(source.split('/')[-2] ,len(os.listdir(train)), len(os.listdir(test))))
    
        
split_data(cat_dir, train_cat_dir, test_cat_dir, 0.9)
split_data(dog_dir, train_dog_dir, test_dog_dir, 0.9)

在这里插入图片描述

数据预处理

图片格式归一化,规定batch_size,以及class类型

train_dir = "E:/datasets/tmp/cat_dog/training/"
validation_dir = "E:/datasets/tmp/cat_dog/testing/"
train_datagen = ImageDataGenerator(rescale=1/255)
train_generator = train_datagen.flow_from_directory(train_dir,batch_size=54, class_mode='binary', target_size=(100, 100))

validation_datagen = ImageDataGenerator(rescale=1/255)
validation_generator = validation_datagen.flow_from_directory(validation_dir,batch_size=60, class_mode='binary', target_size=(100, 100))

搭建神经网络

采用Le_Net5网络

def netWork():
    model = tf.keras.Sequential()
    model.add(tf.keras.layers.Conv2D(32,(3, 3), input_shape=(100, 100, 3), activation='relu', name='conv-1'))
    model.add(tf.keras.layers.MaxPooling2D((2, 2), name='pool-1'))
    model.add(tf.keras.layers.Conv2D(64, (3, 3), activation='relu', name='conv-2'))
    model.add(tf.keras.layers.MaxPooling2D((2, 2), name='pool-2'))
    model.add(tf.keras.layers.Conv2D(128, (3, 3), activation='relu', name='conv-3'))
    model.add(tf.keras.layers.MaxPooling2D((2, 2), name='pool-3'))
    model.add(tf.keras.layers.Flatten())
    model.add(tf.keras.layers.Dense(512, activation='relu', name='fully-1'))
    model.add(tf.keras.layers.Dense(1, activation='sigmoid', name='sigmoid-1'))
    model.compile(optimizer=RMSprop(learning_rate=0.01), loss=tf.losses.binary_crossentropy, metrics=['accuracy'])
    model.summary()
    return model

在这里插入图片描述

fit操作

model = netWork()
model.fit(train_generator,
	epochs=3,
	verbose=1,
	validation_data=validation_generator)

在这里插入图片描述

制作散点图

import matplotlib.pyplot as plt

acc = history.history['accuracy']
val_acc = history.history['val_accuracy']
loss = history.history['loss']
val_loss = history.history['val_loss']

epochs = range(len(acc))
plt.plot(epochs, acc, 'r', "Train accuracy")
plt.plot(epochs, val_acc, 'b', f"Test accuracy")
plt.figure()

plt.plot(epochs, loss, 'r', "Train loss")
plt.plot(epochs, val_loss, 'b', "Test loss")
plt.figure()

在这里插入图片描述

自测数据

自己添加数据到项目中,来检查模型训练的好坏

from tensorflow.keras.preprocessing import image
import numpy as np

path = './image/'

index = 1
for file in os.listdir(path):
    img = image.load_img(path+file, target_size=(100, 100))
    x= image.img_to_array(img)
    x = np.expand_dims(x, axis=0)
    
    images = np.vstack([x])
    classes = model.predict(images, batch_size=10)
    print(classes[0])
    plt.subplot(1,5,index)
    plt.imshow(img)
    num = file.split('.')[0]
    if num == '0':
        plt.title('cat')
    else:
        plt.title('dog')
    if classes[0]>0.5:
        
        print(file + " is dog")
    else:
        print(file + " is cat")
    index += 1

在这里插入图片描述

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-05-01 15:44:16  更:2022-05-01 15:44:43 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 8:24:42-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码