VGG16改写猫狗数据集

使用VGG16深度为D的列训练猫狗数据集。convx-y中x表示卷积核尺寸,y表示特征通道数。比如conv3-256表示3x3的卷积核并且通道数为256。
在这里插入图片描述

from keras.models import Sequential
from keras.layers import Convolution2D,MaxPooling2D,Flatten,Dense,Dropout
from keras.optimizers import SGD
import cv2
import numpy as np
import glob
from sklearn.model_selection import train_test_split

#猫狗数据集
image_size = 64
X = []
y = []

# 导入猫数据
files = glob.glob("MAO/*g")
for file in files:
    try:
        image = cv2.imread(file)  # 读取图片数据
        image = cv2.resize(image, (image_size, image_size),interpolation=cv2.INTER_CUBIC)  # 压缩图片,一定要等比例缩放
        X.append(image)
        y.append([0, 1])
    except Exception as e:
        print(file,e)
# 导入狗数据
files = glob.glob("GOU/*g")
for file in files:
    try:
        image = cv2.imread(file)  # 读取图片数据
        image = cv2.resize(image, (image_size, image_size),interpolation=cv2.INTER_CUBIC)  # 压缩图片
        X.append(image)
        y.append([1, 0])
    except Exception as e:
        print(file,e)

X = np.array(X)
y = np.array(y)

X_train,X_test,y_train,y_test = train_test_split(X,y)


def vgg16():
    model = Sequential()
    #conv3-64
    model.add(Convolution2D(input_shape=(image_size, image_size, 3), filters=64, kernel_size=3, strides=2, padding='same', activation='relu'))
    model.add(Convolution2D(filters=64, kernel_size=3, strides=2, padding='same', activation='relu'))
    #池化
    model.add(MaxPooling2D(pool_size=(3, 3), strides=2, padding='same'))
    # conv3-128
    model.add(Convolution2D(filters=128, kernel_size=3, strides=2, padding='same', activation='relu'))
    model.add(Convolution2D(filters=128, kernel_size=3, strides=2, padding='same', activation='relu'))
    model.add(MaxPooling2D(pool_size=(3, 3), strides=2, padding='same'))
    # conv3-256
    model.add(Convolution2D(filters=256, kernel_size=3, strides=2, padding='same', activation='relu'))
    model.add(Convolution2D(filters=256, kernel_size=3, strides=2, padding='same', activation='relu'))
    model.add(Convolution2D(filters=256, kernel_size=3, strides=2, padding='same', activation='relu'))
    model.add(MaxPooling2D(pool_size=(3, 3), strides=2, padding='same'))
    # conv3-512
    model.add(Convolution2D(filters=512, kernel_size=3, strides=2, padding='same', activation='relu'))
    model.add(Convolution2D(filters=512, kernel_size=3, strides=2, padding='same', activation='relu'))
    model.add(Convolution2D(filters=512, kernel_size=3, strides=2, padding='same', activation='relu'))
    model.add(MaxPooling2D(pool_size=(3, 3), strides=2, padding='same'))
    # conv3-512
    model.add(Convolution2D(filters=512, kernel_size=3, strides=2, padding='same', activation='relu'))
    model.add(Convolution2D(filters=512, kernel_size=3, strides=2, padding='same', activation='relu'))
    model.add(Convolution2D(filters=512, kernel_size=3, strides=2, padding='same', activation='relu'))
    model.add(MaxPooling2D(pool_size=(3, 3), strides=2, padding='same'))
    #转向一维向量
    model.add(Flatten())
    # 全连接层
    model.add(Dense(4096, activation='relu'))
    model.add(Dense(4096, activation='relu'))
    model.add(Dense(2, activation='softmax'))

    return model

model = vgg16()
#优化器
sgd = SGD(lr=0.05, decay=1e-5)
#编译
model.compile(sgd,loss="categorical_crossentropy",metrics=['accuracy'])
#训练
model.fit(X_train,y_train,validation_data=(X_test,y_test),epochs=20,batch_size=50)
# model.save('dog_cat.h5')
print(model.evaluate(X_test,y_test,batch_size=50))

cpu跑不动就跑个开头了
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值