听说越来越卷,那我们就用卷积神经网络CNN来识别狗狗吧

2023-10-14 16:30

本文主要是介绍听说越来越卷,那我们就用卷积神经网络CNN来识别狗狗吧,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

听说越来越卷,那我们就用卷积神经网络CNN来识别狗狗吧!!

文章目录

    • 听说越来越卷,那我们就用卷积神经网络CNN来识别狗狗吧!!
      • 一、识别狗狗
      • 二、CNN简介
      • 三、环境的配置
        • 1、Python
        • 2、模块
          • 1)numpy
          • 2)pandas
          • 3)sklearn
          • 4)keras
          • 5)matplotlib.pyplot
          • 6)os
          • 7)TensorFlow
      • 四、获取狗狗的图片信息
      • 五、数据的读取
      • 六、数据的预处理
      • 七、数据集的分割(划分为训练集以及测试集)
      • 八、CNN 卷积神经网络的搭建
      • 九、训练CNN 卷积神经网络
      • 十、得到模型
      • 十一、进行测试检查预测的效果(检验测试集)
      • 十二、完整的代码(全部源码)
      • 十三、总结

一、识别狗狗

首先介绍博文的内容;

在这篇博文中,

我们将借助Python使用CNN卷积神经网络来进行狗脸的识别,我们知道狗狗是有120多种类别,我们本次的目标就是要通过深度学习使得机器可以区分出来这120种狗狗的类别并且较为准确的将结果告诉使用者。

总之一句话,识别不同狗狗的种类。
(下图有一只猫,但是我们应该忽略它,因为我们在做狗脸识别。)

在这里插入图片描述

当然了,

想要区分猫和狗比给狗狗分类要简单多了,毕竟,猫和狗,这是二元的分类问题;

而,狗狗的不同种类,多打120种,是一个比较多的多元分类,明显会比较复杂了啦。

本文是要讲解识别不同狗狗的种类了啦。

二、CNN简介

CNN是卷积神经网络,

CNNs是深度卷积神经网络。

神经网络(neual networks)
是人工智能研究领域的一部分,当前最流行的神经网络是深度卷积神经网络(deep convolutional neural networks, CNNs)以及卷积神经网络(CNN),虽然卷积网络也存在浅层结构,但是因为准确度和表现力等原因很少使用。

目前提到CNNs和卷积神经网络(CNN),学术界和工业界不再进行特意区分,一般都指深层结构的卷积神经网络,层数从”几层“到”几十上百“不定。

基础的CNN由
卷积(convolution), 激活(activation), and 池化(pooling)三种结构组成。

CNN输出的结果是每幅图像的特定特征空间。当处理图像分类任务时,我们会把CNN输出的特征空间作为全连接层或全连接神经网络(fully connected neural network, FCN)的输入,用全连接层来完成从输入图像到标签集的映射,即分类。

当然,整个过程最重要的工作就是如何通过训练数据迭代调整网络权重,也就是后向传播算法。

目前主流的卷积神经网络(CNNs),比如VGG, ResNet都是由简单的CNN调整,组合而来。

例如,

对于数字八的识别,我们有如下的操作:

在这里插入图片描述

它的本质其实就是下面所示的啦,这就是卷积神经网络哦:

在这里插入图片描述

如果需要进行简单的描述,那么就是,下面举一个简单的例子,如下所示:

将这个简化
在这里插入图片描述

于是就变为了:
在这里插入图片描述

其实,CNN的本质还是梯度下降,只不过这里的反馈与前面的反馈有所不同而已,但是还是同样的思路。

对于狗狗:
在这里插入图片描述
(卷积的操作)

在读入狗狗的数据以后,还会进行例如下图的类似操作,进行卷积以及池化:
在这里插入图片描述
还有:(RGB是通过红、绿、蓝三种颜色组合而成的颜色)
在这里插入图片描述

三、环境的配置

1、Python

人工智能我们还是建议使用Python来完成相关的工作。

同时,Python版本需要3.x的。

2、模块

在Python中,我们在这个案例中需要用到不少的模块;

此次我们将使用如下模块:

1)numpy

这个模块十分常用,是一个Python处理数据的科学模块,此处我们会用来处理数组、矩阵等数据类型的数据。

2)pandas

这个模块也是十分常用的数据分析模块,这里我们将主要用来处理DataFrame对象,其实本质上就是张量。

3)sklearn

这个是机器学习的一个模块。

我们会用它来划分数据集等等。

4)keras

这是构建卷积神经网络所需要的模块,我们在这里将会通过Keras模块来构建卷积神经网络。

5)matplotlib.pyplot

这个是绘图模块,可以较为清晰的呈现学习的状况。

6)os

我们需要读取数据,因此,os模块可以较为方便的帮助我们处理文件的查找以及路径的寻找等问题。

7)TensorFlow

我们会间接的使用到TensorFlow模块。

四、获取狗狗的图片信息

原本这些信息可以在Kaggle上面获得:

(任意点击一个就可以了。)

链接:
狗狗图片汇总数据

链接是:https://www.kaggle.com/jessicali9530/stanford-dogs-dataset

但是,如果你不懂什么魔法之类的东西,那么你下载起来是很费劲的啦。

因此对于不懂魔法的用户呢,我将这一份数据放在了我的资源里面,而且是永久免费的哦!!!

截图为证:
在这里插入图片描述

这份永久免费的资源的地址是:

有些无良人士直接放空的资源,为了防止大家以为我是这样的人,于是这个资源是免费的啦。

资源:
Stanford Dogs Dataset.zip

地址;
https://download.csdn.net/download/m0_54218263/21360497?spm=1001.2014.3001.5501

数据集里面的数据有:

120种狗狗的照片,每一种狗狗有150张照片。

在这里插入图片描述

五、数据的读取

在读取数据之前,我们首先导入一些模块:

import os
import cv2
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
# this is the split module
from tensorflow import keras
# keras
# use this method to import keras will not appear error
from tensorflow.keras import models, layers
from tensorflow.keras.utils import to_categorical
from sklearn.preprocessing import LabelEncoder
from tensorflow.keras.layers import Dense, Dropout, Flatten, Conv2D, MaxPooling2D

接下来,我们进行数据的读取操作;
(由于数据量巨大,我们这里仅仅只是做10种狗狗的识别,当然120种只需要修改种类数目就可以了啦。)

下面是读取数据的代码;


dogs_img_list = os.listdir("Stanford Dogs Dataset/images/images")
for i in dogs_img_list:print(i)root_dir = "Stanford Dogs Dataset/images/images/"
# root package
dog_img_dir = []
# dir of each dog
"""
because of the large quantities of data, 
we just recognize 10 kinds of dogs
"""
for i in range(10):# 10 kindsdog_img_dir.append(root_dir + dogs_img_list[i])# append the message of the dogs
X = []
# X
y_label = []
# y_label
img_size = 150
# the size of the imgdef training_data(label, data_dir):"""read data and store them into the X and the y_label:param label: the label of the dog, that means the kind of the dog:param data_dir: data:return: none"""print("reading...", data_dir)# tip messagesfor img in os.listdir(data_dir):path = os.path.join(data_dir, img)img = cv2.imread(path, cv2.IMREAD_COLOR)img = cv2.resize(img, (img_size, img_size))# XX.append(np.array(img))# y_labely_label.append(str(label))# use the method above to read the dog's data
for i in range(10):  # use 10 to test our main, 10 kindstraining_data(label=dog_img_dir[i].split("-")[1], data_dir=dog_img_dir[i])

执行代码以后的效果图如下:

在这里插入图片描述

大家注意一下,这里的红色不是错误啊!!

在这里插入图片描述
这里读出来了10种狗狗的数据。

六、数据的预处理

进行预处理的代码如下所示;


# deal with the data
label_encoder = LabelEncoder()
# object
y = label_encoder.fit_transform(y_label)
y = to_categorical(y, 10)
# 10 kindsX = np.array(X)
X = X / 255
# normalization

七、数据集的分割(划分为训练集以及测试集)

数据集的分割比较简单,就是把所有的数据分割为训练集以及测试集,一般按照80%和20%的比例来进行分割。

这里可以直接使用内置的方法进行分割,也可以自己分割,因为其实就是进行切片而已,这里我们采用内置的方法:

"""
4.split the data collection
"""
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)

这里的代码就是进行了数据集的分割操作。

这步很简单了啦。

八、CNN 卷积神经网络的搭建

这一步,我们将要搭建卷积神经网络。

这个就是整个 CNN 卷积神经网络 识别狗狗的项目中的最关键的步骤之一,也是训练机器的过程了啦。


"""
5.training the machine (CNN)
这里的步骤,包括了卷积、池化、卷积、池化的循环操作,
以及,
展平的操作,
还有,
全连接层和分类输出。
"""# CNN
# cnn = models.Sequential()
cnn = models.Sequential()cnn.add(layers.Conv2D(32, (3, 3), activation="relu", input_shape=(150, 150, 3)))
# 使用 relu 来进行激活神经元
cnn.add(layers.MaxPooling2D((2, 2)))cnn.add(layers.Conv2D(64, (3, 3), activation="relu"))
cnn.add(layers.MaxPooling2D((2, 2)))cnn.add(layers.Conv2D(128, (3, 3), activation="relu"))
cnn.add(layers.MaxPooling2D((2, 2)))cnn.add(layers.Conv2D(128, (3, 3), activation="relu"))
cnn.add(layers.MaxPooling2D((2, 2)))cnn.add(layers.Flatten())# cnn.add(layers.Dense(512, activation="relu"))
cnn.add(layers.Dense(512, activation="relu"))# cnn.add(Dense), 120
# cnn.add(layers.Dense(120, activation="softmax"))
cnn.add(layers.Dense(10, activation="softmax"))
# 使用 softmax 激活神经元# cnn.add(layers.Dense(120, activation="softmax"))
# cnn.add(layers.Dense(120, activation="softmax"))cnn.compile(loss="categorical_crossentropy", optimizer="rmsprop", metrics=['acc'])
# 损失函数, 优化器, 评估指标# the code above is to create the cnn
# and the
# train the machine

下面描述一下卷积神经网络的结构:
(由于这里是图片太长了,所以分割开来展示了)
1、
在这里插入图片描述
2、
在这里插入图片描述
3、
在这里插入图片描述
4、
在这里插入图片描述
其他的一些解释如下:

这里解释了一些名次和概念。
在这里插入图片描述

九、训练CNN 卷积神经网络

这里是利用 fit 方法来进行训练这个搭建好了的神经网络了啦。


"""
6.training the data and get the model
"""# trainhistory = cnn.fit(X_train, y_train,  # 指定训练集epochs=50,  # 指定次数(或者说是轮次)batch_size=256,  # 指定批量的大小validation_data=(X_test, y_test)  # 指定验证集)

在这里插入图片描述

以上是使用一个函数进行训练,十分快捷。

在这里插入图片描述

十、得到模型

其实模型是在上一个步骤中就已经处理好了,我们只需要调用就可以了,为了方便操作,我们首先只迭代一次来看看history究竟是怎么样的吧:


# trainhistory = cnn.fit(X_train, y_train,epochs=1,batch_size=256,validation_data=(X_test, y_test))print(history.history)
print(history.epoch)

输出如下:

1/6 [====>.........................] - ETA: 0s - loss: 2.3056 - acc: 0.12502021-08-20 10:53:05.338453: W tensorflow/core/framework/cpu_allocator_impl.cc:81] Allocation of 717750272 exceeds 10% of free system memory.
2021-08-20 10:53:09.549353: W tensorflow/core/framework/cpu_allocator_impl.cc:81] Allocation of 717750272 exceeds 10% of free system memory.
2/6 [=========>....................] - ETA: 11s - loss: 3.2431 - acc: 0.13092021-08-20 10:53:10.900707: W tensorflow/core/framework/cpu_allocator_impl.cc:81] Allocation of 717750272 exceeds 10% of free system memory.
6/6 [==============================] - 30s 5s/step - loss: 2.6397 - acc: 0.1107 - val_loss: 2.2892 - val_acc: 0.1901
{'loss': [2.639716863632202], 'acc': [0.11074918508529663], 'val_loss': [2.2892367839813232], 'val_acc': [0.1901041716337204]}
[0]Process finished with exit code 0

这里体现了训练的过程以及history的内容
History的源码是:


@keras_export('keras.callbacks.History')
class History(Callback):"""Callback that records events into a `History` object.This callback is automatically applied toevery Keras model. The `History` objectgets returned by the `fit` method of models.Example:>>> model = tf.keras.models.Sequential([tf.keras.layers.Dense(10)])>>> model.compile(tf.keras.optimizers.SGD(), loss='mse')>>> history = model.fit(np.arange(100).reshape(5, 20), np.zeros(5),...                     epochs=10)>>> print(history.params){'verbose': 1, 'epochs': 10, 'steps': 1}>>> # check the keys of history object>>> print(history.history.keys())dict_keys(['loss'])"""def __init__(self):super(History, self).__init__()self.history = {}def on_train_begin(self, logs=None):self.epoch = []def on_epoch_end(self, epoch, logs=None):logs = logs or {}self.epoch.append(epoch)for k, v in logs.items():self.history.setdefault(k, []).append(v)# Set the history attribute on the model after the epoch ends. This will# make sure that the state which is set is the latest one.self.model.history = self

可以参见Keras源码:

Keras

十一、进行测试检查预测的效果(检验测试集)

检验测试集的效果,我们主要是看损失的大小了啦,在上面所说的History对象中我们是可以看到loss的啦,测试的效果通过上面的代码就可以得到了啦,这里只需要单独挑出来就好了。


print(history.history)
print(history.epoch)
print(history.history["loss"])

我们设法绘制出来训练的过程的图像,这个需要matplotlib.pyplot,由于篇幅以及能力的限制(主要是能力的限制,这个模块我掌握的不太好了啦),所以不展示源码,直接展示图片,有兴趣的大佬可以自己进行绘制了啦。

在这里插入图片描述

十二、完整的代码(全部源码)

这是所有的源代码,如下所示:

# CNN
"""
1.import modules
there are many modules we need to import
"""
import os
import cv2
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
# this is the split module
from tensorflow import keras
# keras
# use this method to import keras will not appear error
from tensorflow.keras import models, layers
from tensorflow.keras.utils import to_categorical
from sklearn.preprocessing import LabelEncoder
from tensorflow.keras.layers import Dense, Dropout, Flatten, Conv2D, MaxPooling2D"""
2.read the file of the dog pictures
"""
dogs_img_list = os.listdir("Stanford Dogs Dataset/images/images")
for i in dogs_img_list:print(i)root_dir = "Stanford Dogs Dataset/images/images/"
# root package
dog_img_dir = []
# dir of each dog
"""
because of the large quantities of data, 
we just recognize 10 kinds of dogs
"""
for i in range(10):# 10 kindsdog_img_dir.append(root_dir + dogs_img_list[i])# append the message of the dogs
X = []
# X
y_label = []
# y_label
img_size = 150
# the size of the imgdef training_data(label, data_dir):"""read data and store them into the X and the y_label:param label: the label of the dog, that means the kind of the dog:param data_dir: data:return: none"""print("reading...", data_dir)# tip messagesfor img in os.listdir(data_dir):path = os.path.join(data_dir, img)img = cv2.imread(path, cv2.IMREAD_COLOR)img = cv2.resize(img, (img_size, img_size))# XX.append(np.array(img))# y_labely_label.append(str(label))# use the method above to read the dog's data
for i in range(10):# use 10 to test our main, 10 kindstraining_data(label=dog_img_dir[i].split("-")[1], data_dir=dog_img_dir[i])"""
3.deal with the data before deep learning
"""
# deal with the data
label_encoder = LabelEncoder()
# object
y = label_encoder.fit_transform(y_label)
# 这是标签编码
y = to_categorical(y, 10)
# 这是 One-hot 编码
# 10 kinds dogX = np.array(X)
X = X / 255
# normalization"""
4.split the data collection
"""
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)"""
5.training the machine (CNN)
这里的步骤,包括了卷积、池化、卷积、池化的循环操作,
以及,
展平的操作,
还有,
全连接层和分类输出。
"""# CNN
# cnn = models.Sequential()
cnn = models.Sequential()cnn.add(layers.Conv2D(32, (3, 3), activation="relu", input_shape=(150, 150, 3)))
# 使用 relu 来进行激活神经元
cnn.add(layers.MaxPooling2D((2, 2)))cnn.add(layers.Conv2D(64, (3, 3), activation="relu"))
cnn.add(layers.MaxPooling2D((2, 2)))cnn.add(layers.Conv2D(128, (3, 3), activation="relu"))
cnn.add(layers.MaxPooling2D((2, 2)))cnn.add(layers.Conv2D(128, (3, 3), activation="relu"))
cnn.add(layers.MaxPooling2D((2, 2)))cnn.add(layers.Flatten())# cnn.add(layers.Dense(512, activation="relu"))
cnn.add(layers.Dense(512, activation="relu"))# cnn.add(Dense), 120
# cnn.add(layers.Dense(120, activation="softmax"))
cnn.add(layers.Dense(10, activation="softmax"))
# 使用 softmax 激活神经元# cnn.add(layers.Dense(120, activation="softmax"))
# cnn.add(layers.Dense(120, activation="softmax"))cnn.compile(loss="categorical_crossentropy", optimizer="rmsprop", metrics=['acc'])
# 损失函数, 优化器, 评估指标# the code above is to create the cnn
# and the
# train the machine"""
6.training the data and get the model
"""#
# train
#
#history = cnn.fit(X_train, y_train,# 指定训练集epochs=50,# 指定次数(或者说是轮次)batch_size=256,# 指定批量的大小validation_data=(X_test, y_test)# 指定验证集)"""
7.show
"""# show the training result :print(history)
print(history.history)
print(history.epoch)
# use the dict to show:print(history.history["loss"])
print(history.history["acc"])
print(history.history["val_loss"])
print(history.history["val_acc"])

下面,

我们还是给出来我第一次学习的时候的源代码,

如下所示:

from tensorflow import keras
from tensorflow.keras import models, layers
# keras models
from tensorflow.keras.layers import Dense, Dropout, Flatten, Conv2D, MaxPooling2D
import numpy as np
import pandas as pd
import os
import cv2
from sklearn.preprocessing import LabelEncoder
from tensorflow.keras.utils import to_categorical
import matplotlib.pyplot as plt
import random as rdm
from sklearn.model_selection import train_test_split
# to_categoricaldogs_img_list = os.listdir("Stanford Dogs Dataset/images/images")
# read the file name
# print(f'{os.listdir("Stanford Dogs Dataset/images/images")}' +
#       "\n\n" +
#       f"{len(dogs_img_list)}")
# print message# read the data
dog_img_dir = []
root_dir = "Stanford Dogs Dataset/images/images/"
# root file
for i in range(len(dogs_img_list)):dog_img_dir.append(root_dir + dogs_img_list[i])# append the message of the dogs# and the total of the dogs is 120# print(dog_img_dir)X = []
# X
y_label = []
# y_labelimg_size = 150# read the data again
def training_data(label, data_dir):print("reading...", data_dir)for img in os.listdir(data_dir):path = os.path.join(data_dir, img)img = cv2.imread(path, cv2.IMREAD_COLOR)img = cv2.resize(img, (img_size, img_size))# XX.append(np.array(img))# y_labely_label.append(str(label))# use the method to read dog data
for i in range(10):  # use 10 to test our maintraining_data(label=dog_img_dir[i].split("-")[1], data_dir=dog_img_dir[i])# deal with the data
label_encoder = LabelEncoder()
# object
y = label_encoder.fit_transform(y_label)
y = to_categorical(y, 10)  # 120
# 120
X = np.array(X)
X = X / 255
# deal# show
# fig, ax = plt.subplots(5, 2)
# fig.set_size_inches(15, 15)
# for i in range(5):
#     for j in range(2):
#         r = rdm.randint(0, len(X))
#         ax[i, j].imshow(X[r])
#         ax[i, j].set_title('Dog:' + y_label[r])
#         plt.tight_layout()
#         plt.show()# splitX_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)# CNN
# cnn = models.Sequential()
cnn = models.Sequential()cnn.add(layers.Conv2D(32, (3, 3), activation="relu", input_shape=(150, 150, 3)))
cnn.add(layers.MaxPooling2D((2, 2)))cnn.add(layers.Conv2D(64, (3, 3), activation="relu"))
cnn.add(layers.MaxPooling2D((2, 2)))cnn.add(layers.Conv2D(128, (3, 3), activation="relu"))
cnn.add(layers.MaxPooling2D((2, 2)))cnn.add(layers.Conv2D(128, (3, 3), activation="relu"))
cnn.add(layers.MaxPooling2D((2, 2)))cnn.add(layers.Flatten())# cnn.add(layers.Dense(512, activation="relu"))
cnn.add(layers.Dense(512, activation="relu"))# cnn.add(Dense), 120
# cnn.add(layers.Dense(120, activation="softmax"))
cnn.add(layers.Dense(10, activation="softmax"))# cnn.add(layers.Dense(120, activation="softmax"))
# cnn.add(layers.Dense(120, activation="softmax"))cnn.compile(loss="categorical_crossentropy", optimizer="rmsprop", metrics=['acc'])# create the cnn# trainhistory = cnn.fit(X_train, y_train,epochs=50,batch_size=256,validation_data=(X_test, y_test))print(history.history)
print(history.epoch)
print(history.history["loss"])
print(history.history["acc"])
print(history.history["val_loss"])
print(history.history["val_acc"])

运行代码的结果展示:

Epoch 1/50
6/6 [==============================] - 24s 4s/step - loss: 2.8308 - acc: 0.1309 - val_loss: 2.2881 - val_acc: 0.0911
Epoch 2/50
6/6 [==============================] - 27s 5s/step - loss: 2.2932 - acc: 0.1479 - val_loss: 2.2671 - val_acc: 0.1875
Epoch 3/50
6/6 [==============================] - 27s 5s/step - loss: 2.2643 - acc: 0.1831 - val_loss: 2.2666 - val_acc: 0.1328
Epoch 4/50
6/6 [==============================] - 27s 4s/step - loss: 2.2247 - acc: 0.1635 - val_loss: 2.2222 - val_acc: 0.2083
Epoch 5/50
6/6 [==============================] - 22s 4s/step - loss: 2.4839 - acc: 0.1993 - val_loss: 2.2434 - val_acc: 0.1901
Epoch 6/50
6/6 [==============================] - 22s 4s/step - loss: 2.1675 - acc: 0.2306 - val_loss: 2.1828 - val_acc: 0.1953
Epoch 7/50
6/6 [==============================] - 25s 4s/step - loss: 2.1461 - acc: 0.2521 - val_loss: 2.1681 - val_acc: 0.2396
Epoch 8/50
6/6 [==============================] - 31s 5s/step - loss: 2.0721 - acc: 0.2775 - val_loss: 2.3079 - val_acc: 0.1927
Epoch 9/50
6/6 [==============================] - 28s 5s/step - loss: 2.0610 - acc: 0.2879 - val_loss: 2.2057 - val_acc: 0.2396
Epoch 10/50
6/6 [==============================] - 28s 5s/step - loss: 1.9759 - acc: 0.3270 - val_loss: 2.0423 - val_acc: 0.3099
Epoch 11/50
6/6 [==============================] - 27s 5s/step - loss: 1.8886 - acc: 0.3336 - val_loss: 2.0655 - val_acc: 0.2448
Epoch 12/50
6/6 [==============================] - 27s 5s/step - loss: 1.8554 - acc: 0.3687 - val_loss: 2.0126 - val_acc: 0.3203
Epoch 13/50
6/6 [==============================] - 28s 5s/step - loss: 1.9623 - acc: 0.3283 - val_loss: 1.9592 - val_acc: 0.3307
Epoch 14/50
6/6 [==============================] - 25s 4s/step - loss: 1.7121 - acc: 0.4104 - val_loss: 2.0791 - val_acc: 0.2839
Epoch 15/50
6/6 [==============================] - 26s 4s/step - loss: 1.6828 - acc: 0.4156 - val_loss: 2.0520 - val_acc: 0.3698
Epoch 16/50
6/6 [==============================] - 28s 5s/step - loss: 1.6389 - acc: 0.4515 - val_loss: 1.9933 - val_acc: 0.3307
Epoch 17/50
6/6 [==============================] - 28s 5s/step - loss: 1.5336 - acc: 0.4638 - val_loss: 2.2346 - val_acc: 0.2292
Epoch 18/50
6/6 [==============================] - 28s 5s/step - loss: 1.6407 - acc: 0.4463 - val_loss: 1.9287 - val_acc: 0.3411
Epoch 19/50
6/6 [==============================] - 27s 4s/step - loss: 1.3706 - acc: 0.5290 - val_loss: 2.3511 - val_acc: 0.3047
Epoch 20/50
6/6 [==============================] - 27s 4s/step - loss: 1.3332 - acc: 0.5446 - val_loss: 2.1613 - val_acc: 0.2995
Epoch 21/50
6/6 [==============================] - 25s 4s/step - loss: 1.1409 - acc: 0.6143 - val_loss: 2.1760 - val_acc: 0.2552
Epoch 22/50
6/6 [==============================] - 34s 6s/step - loss: 1.0946 - acc: 0.6391 - val_loss: 2.3750 - val_acc: 0.3281
Epoch 23/50
6/6 [==============================] - 29s 5s/step - loss: 1.0019 - acc: 0.6606 - val_loss: 2.7618 - val_acc: 0.3047
Epoch 24/50
6/6 [==============================] - 28s 5s/step - loss: 0.9748 - acc: 0.6664 - val_loss: 2.1869 - val_acc: 0.3750
Epoch 25/50
6/6 [==============================] - 27s 5s/step - loss: 0.7259 - acc: 0.7518 - val_loss: 2.3144 - val_acc: 0.3385
Epoch 26/50
6/6 [==============================] - 26s 4s/step - loss: 0.5905 - acc: 0.8046 - val_loss: 2.4587 - val_acc: 0.3177
Epoch 27/50
6/6 [==============================] - 26s 4s/step - loss: 0.6956 - acc: 0.7524 - val_loss: 2.9642 - val_acc: 0.2891
Epoch 28/50
6/6 [==============================] - 26s 4s/step - loss: 0.4431 - acc: 0.8619 - val_loss: 2.7440 - val_acc: 0.3620
Epoch 29/50
6/6 [==============================] - 27s 5s/step - loss: 0.3499 - acc: 0.9010 - val_loss: 4.2927 - val_acc: 0.2630
Epoch 30/50
6/6 [==============================] - 27s 5s/step - loss: 0.9952 - acc: 0.7629 - val_loss: 2.5862 - val_acc: 0.3542
Epoch 31/50
6/6 [==============================] - 21s 4s/step - loss: 0.1439 - acc: 0.9746 - val_loss: 3.0547 - val_acc: 0.3229
Epoch 32/50
6/6 [==============================] - 26s 4s/step - loss: 0.0806 - acc: 0.9850 - val_loss: 3.7483 - val_acc: 0.3203
Epoch 33/50
6/6 [==============================] - 29s 5s/step - loss: 0.5830 - acc: 0.8436 - val_loss: 3.2535 - val_acc: 0.3281
Epoch 34/50
6/6 [==============================] - 28s 5s/step - loss: 0.0856 - acc: 0.9876 - val_loss: 3.3920 - val_acc: 0.3802
Epoch 35/50
6/6 [==============================] - 27s 5s/step - loss: 0.0267 - acc: 0.9961 - val_loss: 3.7781 - val_acc: 0.3802
Epoch 36/50
6/6 [==============================] - 21s 3s/step - loss: 0.0203 - acc: 0.9974 - val_loss: 4.0570 - val_acc: 0.3568
Epoch 37/50
6/6 [==============================] - 27s 5s/step - loss: 0.0121 - acc: 0.9993 - val_loss: 4.2549 - val_acc: 0.3828
Epoch 38/50
6/6 [==============================] - 28s 5s/step - loss: 1.1171 - acc: 0.7844 - val_loss: 2.7973 - val_acc: 0.3047
Epoch 39/50
6/6 [==============================] - 29s 5s/step - loss: 0.2973 - acc: 0.9094 - val_loss: 3.1806 - val_acc: 0.3672
Epoch 40/50
6/6 [==============================] - 30s 5s/step - loss: 0.0297 - acc: 0.9987 - val_loss: 3.5742 - val_acc: 0.3620
Epoch 41/50
6/6 [==============================] - 29s 5s/step - loss: 0.0139 - acc: 0.9993 - val_loss: 3.8064 - val_acc: 0.3464
Epoch 42/50
6/6 [==============================] - 27s 5s/step - loss: 0.0142 - acc: 0.9987 - val_loss: 3.9564 - val_acc: 0.3750
Epoch 43/50
6/6 [==============================] - 28s 5s/step - loss: 0.0124 - acc: 0.9987 - val_loss: 4.1338 - val_acc: 0.3542
Epoch 44/50
6/6 [==============================] - 26s 4s/step - loss: 0.0080 - acc: 0.9987 - val_loss: 4.8518 - val_acc: 0.3333
Epoch 45/50
6/6 [==============================] - 26s 4s/step - loss: 1.5938 - acc: 0.7107 - val_loss: 3.4182 - val_acc: 0.2891
Epoch 46/50
6/6 [==============================] - 24s 4s/step - loss: 0.1018 - acc: 0.9811 - val_loss: 3.4852 - val_acc: 0.3620
Epoch 47/50
6/6 [==============================] - 24s 4s/step - loss: 0.0216 - acc: 0.9987 - val_loss: 3.8207 - val_acc: 0.3516
Epoch 48/50
6/6 [==============================] - 24s 4s/step - loss: 0.0133 - acc: 0.9987 - val_loss: 4.0269 - val_acc: 0.3594
Epoch 49/50
6/6 [==============================] - 24s 4s/step - loss: 0.0069 - acc: 0.9993 - val_loss: 4.2136 - val_acc: 0.3490
Epoch 50/50
6/6 [==============================] - 24s 4s/step - loss: 0.0062 - acc: 0.9993 - val_loss: 4.4008 - val_acc: 0.3542
<tensorflow.python.keras.callbacks.History object at 0x000001F137C33D60>
{'loss': [2.8308050632476807, 2.29323410987854, 2.2643165588378906, 2.224742889404297, 2.483851909637451, 2.167505979537964, 2.1461405754089355, 2.0721473693847656, 2.060950756072998, 1.975879430770874, 1.8886222839355469, 1.8553621768951416, 1.9623366594314575, 1.712108850479126, 1.6827651262283325, 1.6388875246047974, 1.5335570573806763, 1.6407216787338257, 1.3706496953964233, 1.3331533670425415, 1.1409199237823486, 1.0945615768432617, 1.0019456148147583, 0.9748384356498718, 0.725939929485321, 0.5904505848884583, 0.6956182718276978, 0.44307371973991394, 0.34993064403533936, 0.9951552748680115, 0.14394378662109375, 0.08060862123966217, 0.5830209851264954, 0.08558905124664307, 0.02666712924838066, 0.02026943676173687, 0.012054797261953354, 1.1171202659606934, 0.2973436713218689, 0.029678216204047203, 0.013883446343243122, 0.014234034344553947, 0.01236400380730629, 0.008039926178753376, 1.593753457069397, 0.10175592452287674, 0.021587485447525978, 0.013339064083993435, 0.0068833790719509125, 0.006158844102174044], 'acc': [0.13094462454319, 0.14788272976875305, 0.183061882853508, 0.16351792216300964, 0.1993485391139984, 0.2306188941001892, 0.2521172761917114, 0.2775244414806366, 0.2879478931427002, 0.3270358443260193, 0.33355048298835754, 0.3687296509742737, 0.32833877205848694, 0.4104234576225281, 0.4156351685523987, 0.45146578550338745, 0.4638436436653137, 0.44625407457351685, 0.5289902091026306, 0.5446254014968872, 0.6143322587013245, 0.639087975025177, 0.6605862975120544, 0.6664494872093201, 0.7517915368080139, 0.8045602440834045, 0.7524430155754089, 0.8618892431259155, 0.9009771943092346, 0.7628664374351501, 0.9745928049087524, 0.9850162863731384, 0.8436481952667236, 0.9876221418380737, 0.9960911870002747, 0.9973941445350647, 0.999348521232605, 0.7843648195266724, 0.9094462394714355, 0.99869704246521, 0.999348521232605, 0.99869704246521, 0.99869704246521, 0.99869704246521, 0.7107492089271545, 0.9811074733734131, 0.99869704246521, 0.99869704246521, 0.999348521232605, 0.999348521232605], 'val_loss': [2.288085699081421, 2.267096996307373, 2.2665584087371826, 2.222180128097534, 2.243370532989502, 2.182835340499878, 2.168098211288452, 2.307891607284546, 2.2056803703308105, 2.0422720909118652, 2.06552791595459, 2.0126335620880127, 1.9592050313949585, 2.0791280269622803, 2.0520381927490234, 1.9932855367660522, 2.2345681190490723, 1.9287039041519165, 2.351067304611206, 2.1612789630889893, 2.1759769916534424, 2.3750038146972656, 2.7618110179901123, 2.1868669986724854, 2.314356565475464, 2.458726167678833, 2.9641971588134766, 2.743975877761841, 4.292697429656982, 2.5861711502075195, 3.0546534061431885, 3.7482855319976807, 3.2534897327423096, 3.3919646739959717, 3.778139114379883, 4.056985378265381, 4.254880428314209, 2.797269582748413, 3.180584192276001, 3.5741913318634033, 3.8063831329345703, 3.956415891647339, 4.133772373199463, 4.851773738861084, 3.4182348251342773, 3.485194444656372, 3.8206732273101807, 4.026876449584961, 4.213562488555908, 4.400800704956055], 'val_acc': [0.0911458358168602, 0.1875, 0.1328125, 0.2083333283662796, 0.1901041716337204, 0.1953125, 0.2395833283662796, 0.1927083283662796, 0.2395833283662796, 0.3098958432674408, 0.2447916716337204, 0.3203125, 0.3307291567325592, 0.2838541567325592, 0.3697916567325592, 0.3307291567325592, 0.2291666716337204, 0.3411458432674408, 0.3046875, 0.2994791567325592, 0.2552083432674408, 0.328125, 0.3046875, 0.375, 0.3385416567325592, 0.3177083432674408, 0.2890625, 0.3619791567325592, 0.2630208432674408, 0.3541666567325592, 0.3229166567325592, 0.3203125, 0.328125, 0.3802083432674408, 0.3802083432674408, 0.3567708432674408, 0.3828125, 0.3046875, 0.3671875, 0.3619791567325592, 0.3463541567325592, 0.375, 0.3541666567325592, 0.3333333432674408, 0.2890625, 0.3619791567325592, 0.3515625, 0.359375, 0.3489583432674408, 0.3541666567325592]}
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49]
[2.8308050632476807, 2.29323410987854, 2.2643165588378906, 2.224742889404297, 2.483851909637451, 2.167505979537964, 2.1461405754089355, 2.0721473693847656, 2.060950756072998, 1.975879430770874, 1.8886222839355469, 1.8553621768951416, 1.9623366594314575, 1.712108850479126, 1.6827651262283325, 1.6388875246047974, 1.5335570573806763, 1.6407216787338257, 1.3706496953964233, 1.3331533670425415, 1.1409199237823486, 1.0945615768432617, 1.0019456148147583, 0.9748384356498718, 0.725939929485321, 0.5904505848884583, 0.6956182718276978, 0.44307371973991394, 0.34993064403533936, 0.9951552748680115, 0.14394378662109375, 0.08060862123966217, 0.5830209851264954, 0.08558905124664307, 0.02666712924838066, 0.02026943676173687, 0.012054797261953354, 1.1171202659606934, 0.2973436713218689, 0.029678216204047203, 0.013883446343243122, 0.014234034344553947, 0.01236400380730629, 0.008039926178753376, 1.593753457069397, 0.10175592452287674, 0.021587485447525978, 0.013339064083993435, 0.0068833790719509125, 0.006158844102174044]
[0.13094462454319, 0.14788272976875305, 0.183061882853508, 0.16351792216300964, 0.1993485391139984, 0.2306188941001892, 0.2521172761917114, 0.2775244414806366, 0.2879478931427002, 0.3270358443260193, 0.33355048298835754, 0.3687296509742737, 0.32833877205848694, 0.4104234576225281, 0.4156351685523987, 0.45146578550338745, 0.4638436436653137, 0.44625407457351685, 0.5289902091026306, 0.5446254014968872, 0.6143322587013245, 0.639087975025177, 0.6605862975120544, 0.6664494872093201, 0.7517915368080139, 0.8045602440834045, 0.7524430155754089, 0.8618892431259155, 0.9009771943092346, 0.7628664374351501, 0.9745928049087524, 0.9850162863731384, 0.8436481952667236, 0.9876221418380737, 0.9960911870002747, 0.9973941445350647, 0.999348521232605, 0.7843648195266724, 0.9094462394714355, 0.99869704246521, 0.999348521232605, 0.99869704246521, 0.99869704246521, 0.99869704246521, 0.7107492089271545, 0.9811074733734131, 0.99869704246521, 0.99869704246521, 0.999348521232605, 0.999348521232605]
[2.288085699081421, 2.267096996307373, 2.2665584087371826, 2.222180128097534, 2.243370532989502, 2.182835340499878, 2.168098211288452, 2.307891607284546, 2.2056803703308105, 2.0422720909118652, 2.06552791595459, 2.0126335620880127, 1.9592050313949585, 2.0791280269622803, 2.0520381927490234, 1.9932855367660522, 2.2345681190490723, 1.9287039041519165, 2.351067304611206, 2.1612789630889893, 2.1759769916534424, 2.3750038146972656, 2.7618110179901123, 2.1868669986724854, 2.314356565475464, 2.458726167678833, 2.9641971588134766, 2.743975877761841, 4.292697429656982, 2.5861711502075195, 3.0546534061431885, 3.7482855319976807, 3.2534897327423096, 3.3919646739959717, 3.778139114379883, 4.056985378265381, 4.254880428314209, 2.797269582748413, 3.180584192276001, 3.5741913318634033, 3.8063831329345703, 3.956415891647339, 4.133772373199463, 4.851773738861084, 3.4182348251342773, 3.485194444656372, 3.8206732273101807, 4.026876449584961, 4.213562488555908, 4.400800704956055]
[0.0911458358168602, 0.1875, 0.1328125, 0.2083333283662796, 0.1901041716337204, 0.1953125, 0.2395833283662796, 0.1927083283662796, 0.2395833283662796, 0.3098958432674408, 0.2447916716337204, 0.3203125, 0.3307291567325592, 0.2838541567325592, 0.3697916567325592, 0.3307291567325592, 0.2291666716337204, 0.3411458432674408, 0.3046875, 0.2994791567325592, 0.2552083432674408, 0.328125, 0.3046875, 0.375, 0.3385416567325592, 0.3177083432674408, 0.2890625, 0.3619791567325592, 0.2630208432674408, 0.3541666567325592, 0.3229166567325592, 0.3203125, 0.328125, 0.3802083432674408, 0.3802083432674408, 0.3567708432674408, 0.3828125, 0.3046875, 0.3671875, 0.3619791567325592, 0.3463541567325592, 0.375, 0.3541666567325592, 0.3333333432674408, 0.2890625, 0.3619791567325592, 0.3515625, 0.359375, 0.3489583432674408, 0.3541666567325592]

一共运行了50次轮回。

十三、总结

以上就是我们使用CNN卷积神经网络来写的一个狗狗的类别的识别的一个小的机器识别学习项目的所有内容,这里我们做了10个种类的狗狗的识别工作,如果是120种的话,直接把参数设置为120种就可以了啦。

以上是进行了CNN的应用,没有涉及到太多的原理,后续会出一期博文手写CNN算法。

希望本文对大家有一定的帮助了啦。

最后,感谢大家的阅读与支持了啦。

这篇关于听说越来越卷,那我们就用卷积神经网络CNN来识别狗狗吧的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/211718

相关文章

阿里开源语音识别SenseVoiceWindows环境部署

SenseVoice介绍 SenseVoice 专注于高精度多语言语音识别、情感辨识和音频事件检测多语言识别: 采用超过 40 万小时数据训练,支持超过 50 种语言,识别效果上优于 Whisper 模型。富文本识别:具备优秀的情感识别,能够在测试数据上达到和超过目前最佳情感识别模型的效果。支持声音事件检测能力,支持音乐、掌声、笑声、哭声、咳嗽、喷嚏等多种常见人机交互事件进行检测。高效推

图神经网络模型介绍(1)

我们将图神经网络分为基于谱域的模型和基于空域的模型,并按照发展顺序详解每个类别中的重要模型。 1.1基于谱域的图神经网络         谱域上的图卷积在图学习迈向深度学习的发展历程中起到了关键的作用。本节主要介绍三个具有代表性的谱域图神经网络:谱图卷积网络、切比雪夫网络和图卷积网络。 (1)谱图卷积网络 卷积定理:函数卷积的傅里叶变换是函数傅里叶变换的乘积,即F{f*g}

深度学习实战:如何利用CNN实现人脸识别考勤系统

1. 何为CNN及其在人脸识别中的应用 卷积神经网络(CNN)是深度学习中的核心技术之一,擅长处理图像数据。CNN通过卷积层提取图像的局部特征,在人脸识别领域尤其适用。CNN的多个层次可以逐步提取面部的特征,最终实现精确的身份识别。对于考勤系统而言,CNN可以自动从摄像头捕捉的视频流中检测并识别出员工的面部。 我们在该项目中采用了 RetinaFace 模型,它基于CNN的结构实现高效、精准的

机器学习之监督学习(三)神经网络

机器学习之监督学习(三)神经网络基础 0. 文章传送1. 深度学习 Deep Learning深度学习的关键特点深度学习VS传统机器学习 2. 生物神经网络 Biological Neural Network3. 神经网络模型基本结构模块一:TensorFlow搭建神经网络 4. 反向传播梯度下降 Back Propagation Gradient Descent模块二:激活函数 activ

Clion不识别C代码或者无法跳转C语言项目怎么办?

如果是中文会显示: 此时只需要右击项目,或者你的源代码目录,将这个项目或者源码目录标记为项目源和头文件即可。 英文如下:

图神经网络框架DGL实现Graph Attention Network (GAT)笔记

参考列表: [1]深入理解图注意力机制 [2]DGL官方学习教程一 ——基础操作&消息传递 [3]Cora数据集介绍+python读取 一、DGL实现GAT分类机器学习论文 程序摘自[1],该程序实现了利用图神经网络框架——DGL,实现图注意网络(GAT)。应用demo为对机器学习论文数据集——Cora,对论文所属类别进行分类。(下图摘自[3]) 1. 程序 Ubuntu:18.04

基于深度学习 卷积神经网络resnext50的中医舌苔分类系统

项目概述 本项目旨在通过深度学习技术,特别是利用卷积神经网络(Convolutional Neural Networks, CNNs)中的ResNeXt50架构,实现对中医舌象图像的自动分类。该系统不仅能够识别不同的舌苔类型,还能够在PyQt5框架下提供一个直观的图形用户界面(GUI),使得医生或患者能够方便地上传舌象照片并获取分析结果。 技术栈 深度学习框架:采用PyTorch或其他

图神经网络(2)预备知识

1. 图的基本概念         对于接触过数据结构和算法的读者来说,图并不是一个陌生的概念。一个图由一些顶点也称为节点和连接这些顶点的边组成。给定一个图G=(V,E),  其 中V={V1,V2,…,Vn}  是一个具有 n 个顶点的集合。 1.1邻接矩阵         我们用邻接矩阵A∈Rn×n表示顶点之间的连接关系。 如果顶点 vi和vj之间有连接,就表示(vi,vj)  组成了

BERN2(生物医学领域)命名实体识别与命名规范化工具

BERN2: an advanced neural biomedical named entity recognition and normalization tool 《Bioinformatics》2022 1 摘要 NER和NEN:在生物医学自然语言处理中,NER和NEN是关键任务,它们使得从生物医学文献中自动提取实体(如疾病和药物)成为可能。 BERN2:BERN2是一个工具,

行为智能识别摄像机

行为智能识别摄像机 是一种结合了人工智能技术和监控摄像技术的先进设备,它能够通过深度学习算法对监控画面进行实时分析,自动识别和分析监控画面中的各种行为动作。这种摄像机在安防领域有着广泛的应用,可以帮助监控人员及时发现异常行为,并采取相应的措施。 行为智能识别摄像机可以有效预防盗窃事件。在商场、超市等公共场所安装这种摄像机,可以通过识别异常行为等情况,及时报警并阻止不安全行为的发生