深度学习实验项目一猫狗识别

项目来自唐老师猫狗识别项目及数据集。

项目具体实施步骤:

1.读取猫狗数据训练集500+500。

2.对读取的图片进行处理,处理成统一大小格式,分好标签。

3.shuffle一下,将猫狗数据掺杂混合,尽可能随机。

4.采用CNN网络训练测试。


具体代码如下:

1.读取训练集。

import pandas as pd
import numpy as np
import os
import glob
import matplotlib.pyplot as plt
import cv2 as cv2
images = []
labels = []
img_names = []
cls = []
train_path="training_data"
classes = ['dogs','cats']
num_classes = len(classes)
image_size=128
print('Going to read training images')
for fields in classes:   
    index = classes.index(fields)
    print('Now going to read {} files (Index: {})'.format(fields, index))
    path = os.path.join(train_path, fields, '*g')
    files = glob.glob(path)
    print(len(files))
    for fl in files:
        image = cv2.imread(fl)
        image = cv2.resize(image, (image_size, image_size),0,0, cv2.INTER_LINEAR)
        image = image.astype(np.float32)
        image = np.multiply(image, 1.0 / 255.0)
        images.append(image)
        label = np.zeros(len(classes))
        label[index] = 1.0
        labels.append(label)
        flbase = os.path.basename(fl)
        img_names.append(flbase)
        cls.append(fields)
images = np.array(images)
labels = np.array(labels)
img_names = np.array(img_names)
cls = np.array(cls)

2.训练数据集。

from tensorflow import keras
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense,Dropout,Flatten,Conv2D,MaxPool2D
from tensorflow.keras import Input
from sklearn.model_selection import train_test_split
from sklearn.utils import shuffle
from tensorflow.keras.regularizers import l1
#数据集处理
images,labels=shuffle(images,labels)
X_train, X_test, y_train, y_test=train_test_split(images,labels)
model = Sequential()
# 第一个卷积层,32个卷积核,大小5x5,卷积模式SAME,激活函数relu,输入张量的大小
model.add(Conv2D(filters= 6, kernel_size=(3,3), padding='valid',kernel_regularizer=l1(0.1),activation='tanh',input_shape=(128,128,3)))
# model.add(Conv2D(filters= 32, kernel_size=(3,3), padding='valid', activation='relu'))
# 池化层,池化核大小2x2
model.add(MaxPool2D(pool_size=(2,2)))
# 随机丢弃四分之一的网络连接,防止过拟合
model.add(Dropout(0.5)) 
model.add(Conv2D(filters= 6, kernel_size=(3,3), padding='Same', activation='tanh'))
# model.add(Conv2D(filters= 6, kernel_size=(3,3), padding='Same', activation='tanh'))
model.add(MaxPool2D(pool_size=(2,2), strides=(2,2)))
model.add(Dropout(0.5))
# 全连接层,展开操作,
model.add(Flatten())
# 添加隐藏层神经元的数量和激活函数
# model.add(Dense(120, activation='tanh'))   
model.add(Dropout(0.5))
# model.add(Dense(84, activation='tanh'))   
# 输出层
model.add(Dense(2, activation='softmax')) 
model.compile(loss='categorical_crossentropy',
              optimizer='adam',
              metrics=['accuracy'])
model.fit(images,labels,validation_split=0.2,batch_size=128,epochs=50,c)
#模型存储
mp = "model_3_1625.h5"
model.save(mp)
#模型评价
model.evaluate(X_test,y_test)

训练过程反馈如下:

猜你喜欢

转载自www.cnblogs.com/wangzhenghua/p/11939766.html