数据分析-神经网络-CNN-猫狗识别案例

数据集

来源网络,经典的猫狗数据集。

引入必要的模块

import tensorflow as tf
from tensorflow import keras
import matplotlib.pyplot as plt
%matplotlib inline
import numpy as np
import glob
import os

获取猫狗图片的路径

train_image_path = glob.glob('d:/datasets/dc/train/*.jpg')

文件名中提取标签(猫为1)

train_image_label = [int(p.split('\\')[1][0:3] == 'cat') for p in train_image_path]

 定义函数,读取指定图片文件的数据(数据处理的是RGB格式的图片,不是图片的路径字符串。)。输入路径和标签,返回路径对应文件的文件内容,并解压。jpg是压缩格式的图片,要还原到非压缩的格式。

def load_preprosess_image(path, label):
    image = tf.io.read_file(path)  #读入文件内容
    image = tf.image.decode_jpeg(image, channels=3)  #jpg彩色图片(压缩)解码
    image = tf.image.resize(image, [256, 256])  #大小一致
    image = tf.cast(image, tf.float32)
    image = image/255
    label = tf.reshape(label, [1])
    return image, label

 读入图片数据

train_image_ds = tf.data.Dataset.from_tensor_slices((train_image_path, train_image_label))
AUTOTUNE = tf.data.experimental.AUTOTUNE
train_image_ds = train_image_ds.map(load_preprosess_image, num_parallel_calls=AUTOTUNE)

 构建数据集

BATCH_SIZE = 32
train_count = len(train_image_path)
train_image_ds = train_image_ds.shuffle(train_count).batch(BATCH_SIZE)
train_image_ds = train_image_ds.prefetch(AUTOTUNE)

 处理测试图片集

test_image_path = glob.glob('d:/datasets/dc/test/*.jpg')
test_image_label = [int(p.split('\\')[1] == 'cat') for p in test_image_path]
test_image_ds = tf.data.Dataset.from_tensor_slices((test_image_path, test_image_label))
test_image_ds = test_image_ds.map(load_preprosess_image, num_parallel_calls=AUTOTUNE)
test_image_ds = test_image_ds.batch(BATCH_SIZE)
test_image_ds = test_image_ds.prefetch(AUTOTUNE)

 构建模型

model = keras.Sequential([
    tf.keras.layers.Conv2D(64, (3, 3), input_shape=(256, 256, 3), activation='relu'),
    tf.keras.layers.BatchNormalization(),
    tf.keras.layers.Conv2D(256, (3, 3), activation='relu'),
    tf.keras.layers.MaxPooling2D(),
    tf.keras.layers.Conv2D(512, (3, 3), activation='relu'),
    tf.keras.layers.MaxPooling2D(),
    tf.keras.layers.Conv2D(1024, (3, 3), activation='relu'),
    tf.keras.layers.GlobalAveragePooling2D(),
    tf.keras.layers.Dense(256, activation='relu'),
    tf.keras.layers.Dense(1)
])

  编译模型

model.compile(optimizer="adam",loss="binary_crossentropy",metrics="acc")

 训练

his=model.fit(train_image_ds,epochs=30,
    steps_per_epoch=32,
    validation_data=test_image_ds
)

待完善

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
VGG-Net是一种经典的卷积神经网络模型,由牛津大学的研究团队开发。它在2014年的ImageNet图像分类挑战中取得了很好的成绩。VGG-Net的主要特点是使用了非常小的卷积核(3x3)和深层网络结构。 VGG-Net的网络结构非常简单,它由多个卷积层和池化层组成,最后接上全连接层进行分类。其中,卷积层使用了多个3x3的卷积核,通过堆叠多个卷积层来增加网络的深度。池化层则用于减小特征图的尺寸,同时保留主要特征。VGG-Net的网络结构非常深,有16层或19层,因此也被称为VGG16或VGG19。 相比于其他卷积神经网络模型,VGG-Net具有以下特点: 1. 网络结构简单明了,只使用了3x3的卷积核和池化层。 2. 拥有较深的网络结构,可以提取更复杂的特征。 3. 在ImageNet图像分类挑战中取得了较好的性能。 CNN(卷积神经网络)是一种深度学习模型,广泛应用于图像识别、语音识别等领域。CNN的核心思想是通过卷积层、池化层和全连接层来提取和学习图像的特征。 CNN的卷积层通过卷积操作对输入图像进行特征提取,可以捕捉到图像的局部信息。池化层则用于减小特征图的尺寸,同时保留主要特征。最后,全连接层将提取到的特征映射到不同的类别上。 CNN的优势在于: 1. 具有局部感知性,能够有效地处理图像等二维数据。 2. 参数共享,减少了模型的参数量,降低了过拟合的风险。 3. 可以通过堆叠多个卷积层和池化层来构建深层网络,提取更高级的特征。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ITLiu_JH

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值