原本想用keras
的cifar10
数据集,但是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