【深度学习】卷积神经网络识别猫和狗

原本想用kerascifar10数据集,但是load_data()的过程太慢了,于是自己各找了猫和狗的10张RGB照片,并且通过opencv将图片全部压缩成32x32尺寸的图像,然后猫和狗各有7张图像用来训练卷积神经网络,剩余的各自3张用来进行测试,测试结果的高低很大程度上取决于训练集,如果训练集图像(指32x32尺寸)分辨率较高,卷积神经网络参数设置合理,最终测试结果的accuracy也会较高。

import os
import cv2 as cv
import numpy as np
from tensorflow.keras.optimizers import Adam
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Activation, Convolution2D, MaxPooling2D, Flatten

train_path = "E:/python/train_image/"
x_train, x_test = np.array([]), np.array([])
y_train, y_test = [], []

for dirname in os.listdir(train_path):
    subfolder = os.path.join(train_path, dirname)
    if not os.path.isdir(subfolder):
        continue
    label = subfolder[subfolder.rfind('/')+1:]
    for filname in [x for x in os.listdir(subfolder) if x.endswith('.jpg')][:-3]:
        filepath = os.path.join(subfolder, filname)
        image = cv.imread(filepath)
        if len(x_train) == 0:
            x_train = image
        else:
            x_train = np.append(x_train, image, axis=0)
        y_train.append(int(label))
    for filname in [x for x in os.listdir(subfolder) if x.endswith('.jpg')][:-4:-1]:
        filepath = os.path.join(subfolder, filname)
        image = cv.imread(filepath)
        if len(x_test) == 0:
            x_test = image
        else:
            x_test = np.append(x_test, image, axis=0)
        y_test.append(int(label))

x_train = x_train.reshape(-1, 32, 32, 3)
y_train = np.array(y_train).reshape(-1, 1)
x_test = x_test.reshape(-1, 32, 32, 3)
y_test = np.array(y_test).reshape(-1, 1)

model = Sequential()
model.add(Convolution2D(
    filters=128,  # 滤波器的深度
    kernel_size=3,   # 滤波器的尺寸
    strides=(2, 2),  # 滤波器步长
    padding='same',  # 使用全0填充
    input_shape=(32, 32, 3)   # 输入图像的尺寸
))
model.add(Activation('relu'))
model.add(MaxPooling2D(
    pool_size=(2, 2),   # 过滤器尺寸
    strides=(2, 2),     # 过滤器步长
    padding="same",     # 使用全0填充
))
model.add(Convolution2D(
    filters=512,
    kernel_size=3,
    strides=(2, 2),
    padding='same'
))
model.add(Activation('relu'))
model.add(MaxPooling2D(
    pool_size=(2, 2),
    strides=(2, 2),
    padding='same'
))

model.add(Flatten())
model.add(Dense(150))
model.add(Activation('relu'))

model.add(Dense(64))
model.add(Activation('relu'))

model.add(Dense(1))
model.add(Activation('sigmoid'))

adam = Adam(lr=1e-4)  # 优化器

model.compile(optimizer=adam, loss='binary_crossentropy',
              metrics=['accuracy'])
print("Training-------------")
model.fit(x_train, y_train, epochs=50, batch_size=8)
model.save("model.h5")
print("Testing--------------")
model.evaluate(x_test, y_test)   # 评估测试集

import netron
import time

netron.start("model.h5")
time.sleep(60)
netron.stop()

在这里插入图片描述

Training-------------
Train on 14 samples
Epoch 1/50

 8/14 [================>.............] - ETA: 0s - loss: 2.7746 - accuracy: 0.3750
14/14 [==============================] - 1s 70ms/sample - loss: 6.2369 - accuracy: 0.4286
Epoch 2/50

 8/14 [================>.............] - ETA: 0s - loss: 4.2485 - accuracy: 0.6250
14/14 [==============================] - 0s 2ms/sample - loss: 4.5432 - accuracy: 0.5000
Epoch 3/50

 8/14 [================>.............] - ETA: 0s - loss: 4.0494 - accuracy: 0.5000
14/14 [==============================] - 0s 2ms/sample - loss: 5.5636 - accuracy: 0.5000
Epoch 4/50

 8/14 [================>.............] - ETA: 0s - loss: 5.4888 - accuracy: 0.5000
14/14 [==============================] - 0s 2ms/sample - loss: 3.2356 - accuracy: 0.6429
Epoch 5/50

 8/14 [================>.............] - ETA: 0s - loss: 0.5092 - accuracy: 0.8750
14/14 [==============================] - 0s 2ms/sample - loss: 0.8744 - accuracy: 0.7143
Epoch 6/50

 8/14 [================>.............] - ETA: 0s - loss: 0.7912 - accuracy: 0.6250
14/14 [==============================] - 0s 2ms/sample - loss: 0.8014 - accuracy: 0.7143
Epoch 7/50

 8/14 [================>.............] - ETA: 0s - loss: 0.0634 - accuracy: 1.0000
14/14 [==============================] - 0s 2ms/sample - loss: 0.0374 - accuracy: 1.0000
Epoch 8/50

 8/14 [================>.............] - ETA: 0s - loss: 1.2174 - accuracy: 0.6250
14/14 [==============================] - 0s 5ms/sample - loss: 1.1611 - accuracy: 0.7143
Epoch 9/50

 8/14 [================>.............] - ETA: 0s - loss: 0.2479 - accuracy: 0.7500
14/14 [==============================] - 0s 4ms/sample - loss: 0.2071 - accuracy: 0.7857
Epoch 10/50

 8/14 [================>.............] - ETA: 0s - loss: 0.4790 - accuracy: 0.7500
14/14 [==============================] - 0s 4ms/sample - loss: 0.2934 - accuracy: 0.8571
Epoch 11/50

 8/14 [================>.............] - ETA: 0s - loss: 0.5325 - accuracy: 0.7500
14/14 [==============================] - 0s 4ms/sample - loss: 0.3047 - accuracy: 0.8571
Epoch 12/50

 8/14 [================>.............] - ETA: 0s - loss: 0.0053 - accuracy: 1.0000
14/14 [==============================] - 0s 5ms/sample - loss: 0.0086 - accuracy: 1.0000
Epoch 13/50

 8/14 [================>.............] - ETA: 0s - loss: 0.0148 - accuracy: 1.0000
14/14 [==============================] - 0s 4ms/sample - loss: 0.0567 - accuracy: 1.0000
Epoch 14/50

 8/14 [================>.............] - ETA: 0s - loss: 0.0726 - accuracy: 1.0000
14/14 [==============================] - 0s 4ms/sample - loss: 0.0530 - accuracy: 1.0000
Epoch 15/50

 8/14 [================>.............] - ETA: 0s - loss: 0.0219 - accuracy: 1.0000
14/14 [==============================] - 0s 5ms/sample - loss: 0.0129 - accuracy: 1.0000
Epoch 16/50

 8/14 [================>.............] - ETA: 0s - loss: 0.0035 - accuracy: 1.0000
14/14 [==============================] - 0s 6ms/sample - loss: 0.0032 - accuracy: 1.0000
Epoch 17/50

 8/14 [================>.............] - ETA: 0s - loss: 0.0077 - accuracy: 1.0000
14/14 [==============================] - 0s 5ms/sample - loss: 0.0050 - accuracy: 1.0000
Epoch 18/50

 8/14 [================>.............] - ETA: 0s - loss: 0.0142 - accuracy: 1.0000
14/14 [==============================] - 0s 5ms/sample - loss: 0.0102 - accuracy: 1.0000
Epoch 19/50

 8/14 [================>.............] - ETA: 0s - loss: 0.0026 - accuracy: 1.0000
14/14 [==============================] - 0s 6ms/sample - loss: 0.0160 - accuracy: 1.0000
Epoch 20/50

 8/14 [================>.............] - ETA: 0s - loss: 0.0200 - accuracy: 1.0000
14/14 [==============================] - 0s 5ms/sample - loss: 0.0120 - accuracy: 1.0000
Epoch 21/50

 8/14 [================>.............] - ETA: 0s - loss: 0.0083 - accuracy: 1.0000
14/14 [==============================] - 0s 6ms/sample - loss: 0.0050 - accuracy: 1.0000
Epoch 22/50

 8/14 [================>.............] - ETA: 0s - loss: 0.0034 - accuracy: 1.0000
14/14 [==============================] - 0s 6ms/sample - loss: 0.0022 - accuracy: 1.0000
Epoch 23/50

 8/14 [================>.............] - ETA: 0s - loss: 0.0012 - accuracy: 1.0000
14/14 [==============================] - 0s 6ms/sample - loss: 0.0012 - accuracy: 1.0000
Epoch 24/50

 8/14 [================>.............] - ETA: 0s - loss: 0.0012 - accuracy: 1.0000
14/14 [==============================] - 0s 6ms/sample - loss: 0.0013 - accuracy: 1.0000
Epoch 25/50

 8/14 [================>.............] - ETA: 0s - loss: 0.0014 - accuracy: 1.0000
14/14 [==============================] - 0s 5ms/sample - loss: 0.0014 - accuracy: 1.0000
Epoch 26/50

 8/14 [================>.............] - ETA: 0s - loss: 0.0023 - accuracy: 1.0000
14/14 [==============================] - 0s 5ms/sample - loss: 0.0016 - accuracy: 1.0000
Epoch 27/50

 8/14 [================>.............] - ETA: 0s - loss: 0.0024 - accuracy: 1.0000
14/14 [==============================] - 0s 6ms/sample - loss: 0.0017 - accuracy: 1.0000
Epoch 28/50

 8/14 [================>.............] - ETA: 0s - loss: 0.0023 - accuracy: 1.0000
14/14 [==============================] - 0s 5ms/sample - loss: 0.0017 - accuracy: 1.0000
Epoch 29/50

 8/14 [================>.............] - ETA: 0s - loss: 0.0017 - accuracy: 1.0000
14/14 [==============================] - 0s 5ms/sample - loss: 0.0016 - accuracy: 1.0000
Epoch 30/50

 8/14 [================>.............] - ETA: 0s - loss: 6.2760e-04 - accuracy: 1.0000
14/14 [==============================] - 0s 5ms/sample - loss: 0.0014 - accuracy: 1.0000
Epoch 31/50

 8/14 [================>.............] - ETA: 0s - loss: 0.0015 - accuracy: 1.0000
14/14 [==============================] - 0s 5ms/sample - loss: 0.0012 - accuracy: 1.0000
Epoch 32/50

 8/14 [================>.............] - ETA: 0s - loss: 0.0010 - accuracy: 1.0000
14/14 [==============================] - 0s 5ms/sample - loss: 9.9372e-04 - accuracy: 1.0000
Epoch 33/50

 8/14 [================>.............] - ETA: 0s - loss: 7.8073e-04 - accuracy: 1.0000
14/14 [==============================] - 0s 6ms/sample - loss: 8.1067e-04 - accuracy: 1.0000
Epoch 34/50

 8/14 [================>.............] - ETA: 0s - loss: 8.8727e-04 - accuracy: 1.0000
14/14 [==============================] - 0s 5ms/sample - loss: 6.7693e-04 - accuracy: 1.0000
Epoch 35/50

 8/14 [================>.............] - ETA: 0s - loss: 3.6186e-04 - accuracy: 1.0000
14/14 [==============================] - 0s 5ms/sample - loss: 5.5756e-04 - accuracy: 1.0000
Epoch 36/50

 8/14 [================>.............] - ETA: 0s - loss: 5.6546e-04 - accuracy: 1.0000
14/14 [==============================] - 0s 6ms/sample - loss: 5.2924e-04 - accuracy: 1.0000
Epoch 37/50

 8/14 [================>.............] - ETA: 0s - loss: 4.4337e-04 - accuracy: 1.0000
14/14 [==============================] - 0s 5ms/sample - loss: 4.7293e-04 - accuracy: 1.0000
Epoch 38/50

 8/14 [================>.............] - ETA: 0s - loss: 5.0067e-04 - accuracy: 1.0000
14/14 [==============================] - 0s 5ms/sample - loss: 4.5354e-04 - accuracy: 1.0000
Epoch 39/50

 8/14 [================>.............] - ETA: 0s - loss: 3.5557e-04 - accuracy: 1.0000
14/14 [==============================] - 0s 6ms/sample - loss: 4.3209e-04 - accuracy: 1.0000
Epoch 40/50

 8/14 [================>.............] - ETA: 0s - loss: 6.1665e-04 - accuracy: 1.0000
14/14 [==============================] - 0s 5ms/sample - loss: 4.3509e-04 - accuracy: 1.0000
Epoch 41/50

 8/14 [================>.............] - ETA: 0s - loss: 4.3153e-04 - accuracy: 1.0000
14/14 [==============================] - 0s 5ms/sample - loss: 4.2858e-04 - accuracy: 1.0000
Epoch 42/50

 8/14 [================>.............] - ETA: 0s - loss: 4.4910e-04 - accuracy: 1.0000
14/14 [==============================] - 0s 6ms/sample - loss: 4.1878e-04 - accuracy: 1.0000
Epoch 43/50

 8/14 [================>.............] - ETA: 0s - loss: 6.1976e-04 - accuracy: 1.0000
14/14 [==============================] - 0s 5ms/sample - loss: 4.0962e-04 - accuracy: 1.0000
Epoch 44/50

 8/14 [================>.............] - ETA: 0s - loss: 2.6165e-04 - accuracy: 1.0000
14/14 [==============================] - 0s 5ms/sample - loss: 3.9148e-04 - accuracy: 1.0000
Epoch 45/50

 8/14 [================>.............] - ETA: 0s - loss: 5.2283e-04 - accuracy: 1.0000
14/14 [==============================] - 0s 6ms/sample - loss: 3.8340e-04 - accuracy: 1.0000
Epoch 46/50

 8/14 [================>.............] - ETA: 0s - loss: 2.6304e-04 - accuracy: 1.0000
14/14 [==============================] - 0s 5ms/sample - loss: 3.6081e-04 - accuracy: 1.0000
Epoch 47/50

 8/14 [================>.............] - ETA: 0s - loss: 2.1692e-04 - accuracy: 1.0000
14/14 [==============================] - 0s 5ms/sample - loss: 3.4774e-04 - accuracy: 1.0000
Epoch 48/50

 8/14 [================>.............] - ETA: 0s - loss: 4.3629e-04 - accuracy: 1.0000
14/14 [==============================] - 0s 6ms/sample - loss: 3.4183e-04 - accuracy: 1.0000
Epoch 49/50

 8/14 [================>.............] - ETA: 0s - loss: 3.1372e-04 - accuracy: 1.0000
14/14 [==============================] - 0s 5ms/sample - loss: 3.2572e-04 - accuracy: 1.0000
Epoch 50/50

 8/14 [================>.............] - ETA: 0s - loss: 3.0660e-04 - accuracy: 1.0000
14/14 [==============================] - 0s 5ms/sample - loss: 3.1543e-04 - accuracy: 1.0000
Testing--------------

6/1 [====================================================================================================================================================================================] - 0s 32ms/sample - loss: 0.8873 - accuracy: 0.6667
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值