python 猫狗二分类简单实现

2023-11-20

1.数据集介绍:(需要数据集可以在下面留言)

          数据集一共有猫图片:6000张,有狗图片:6000张。图片已经被命名为:0.1.jpg-0.6000.jpg(猫);1.0.jpg-1.6000.jpg(狗)

照片读取代码如下:

import numpy as np
import tensorflow as tf

#定义图片读取函数:把图片读取为64*64*3
def load_and_preprocess_from_path_label(path):
      image = tf.io.read_file(path)
      image = tf.image.decode_jpeg(image)
      image = tf.image.resize(image, [64, 64])
      image /= 255.0
      return image
#循环读取猫类图片(从img文件夹读取)并生成[6000,150,150,3]数组
x1=[]
for i in range(1,6001):
    img_path ='./img' + '\\0.%s.jpeg'%(i)
    img=load_and_preprocess_from_path_label(img_path)
    x1.append(img) 
x1=np.array(x1)
#循环读取狗类图片并生成[6000,150,150,3]数组
x2=[]
for i in range(1,6001):   
    img_path ='./img' + '\\1.%s.jpeg'%(i)
    img=load_and_preprocess_from_path_label(img_path)
    x2.append(img) 
x2=np.array(x2)
x_total=np.append(x1,x2,axis=0)

2.标签生成程序如下:

#生成标签代码,并转化为独热码形式
from keras.utils import np_utils
counter=0
data_y_list=[]
for i in range(2):
    label = np.ones((6000,)) * counter
    data_y = tf.expand_dims(label, axis=-1)
    data_y_list.append(data_y)
    counter+=1
data_y_array = np.concatenate(data_y_list, axis=0)
y_total=np_utils.to_categorical(data_y_array,2)

3.同时打乱图片数据集和标签数据集

#打乱数据集
np.random.seed(116)
np.random.shuffle(x_total)
np.random.seed(116)
np.random.shuffle(y_total)
np.random.seed(116)
tf.random.set_seed(116)

#分割训练样本集和测试样本集
x_train=x_total[0:5000,]
y_train=y_total[0:5000,]
x_test=x_total[5000:6000,]
y_test=y_total[5000:6000,]

4.搭建卷积神经网络(models.Sequential()结构)

from keras import layers
from keras import models

model = models.Sequential()
model.add(layers.Conv2D(32, (3, 3), activation='relu',
                        input_shape=(64,64, 3)))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(128, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(128, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Flatten())
model.add(layers.Dense(512, activation='relu'))
model.add(layers.Dense(2, activation='sigmoid'))

5.定义优化器,学习率,损失函数(model.compile()结构)

from keras import optimizers
model.compile(loss='binary_crossentropy',
              optimizer=optimizers.RMSprop(lr=1e-4),
              metrics=['acc'])

6.定义epoch大小,batch大小

history=model.fit(x_train,y_train,epochs=100,batch_size=64,validation_data=(x_test,y_test)
    ,validation_freq=1)

7.如果要调用轻量级网络MobileNetV2、MobileNet、SqueezeNet、Xception等已经被嵌入到keras.applications文件里面的,代码如下

model = models.Sequential()
mobile = tf.keras.applications.MobileNet(include_top=False, weights='imagenet', input_shape=(150, 150, 3))
#Xception= tf.keras.applications.Xception(include_top=False, weights='imagenet', #input_shape=(150, 150, 3))
mobile.trainable = False
model = tf.keras.Sequential([
  mobile,
  tf.keras.layers.Dropout(0.5),
  tf.keras.layers.GlobalAveragePooling2D(),
  tf.keras.layers.Dense(512, activation='relu'),
  tf.keras.layers.Dense(64, activation='relu'),
  tf.keras.layers.Dense(2, activation='sigmoid')
])

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python 猫狗二分类简单实现 的相关文章

随机推荐