日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python 二分类的实例_keras分类之二分类实例(Cat and dog)

發布時間:2023/12/15 python 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python 二分类的实例_keras分类之二分类实例(Cat and dog) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 數據準備

在文件夾下分別建立訓練目錄train,驗證目錄validation,測試目錄test,每個目錄下建立dogs和cats兩個目錄,在dogs和cats目錄下分別放入拍攝的狗和貓的圖片,圖片的大小可以不一樣。

2. 數據讀取

# 存儲數據集的目錄

base_dir = 'E:/python learn/dog_and_cat/data/'

# 訓練、驗證數據集的目錄

train_dir = os.path.join(base_dir, 'train')

validation_dir = os.path.join(base_dir, 'validation')

test_dir = os.path.join(base_dir, 'test')

# 貓訓練圖片所在目錄

train_cats_dir = os.path.join(train_dir, 'cats')

# 狗訓練圖片所在目錄

train_dogs_dir = os.path.join(train_dir, 'dogs')

# 貓驗證圖片所在目錄

validation_cats_dir = os.path.join(validation_dir, 'cats')

# 狗驗證數據集所在目錄

validation_dogs_dir = os.path.join(validation_dir, 'dogs')

print('total training cat images:', len(os.listdir(train_cats_dir)))

print('total training dog images:', len(os.listdir(train_dogs_dir)))

print('total validation cat images:', len(os.listdir(validation_cats_dir)))

print('total validation dog images:', len(os.listdir(validation_dogs_dir)))

3. 模型建立

# 搭建模型

model = Sequential()

model.add(Conv2D(32, (3, 3), activation='relu',

input_shape=(150, 150, 3)))

model.add(MaxPooling2D((2, 2)))

model.add(Conv2D(64, (3, 3), activation='relu'))

model.add(MaxPooling2D((2, 2)))

model.add(Conv2D(128, (3, 3), activation='relu'))

model.add(MaxPooling2D((2, 2)))

model.add(Conv2D(128, (3, 3), activation='relu'))

model.add(MaxPooling2D((2, 2)))

model.add(Flatten())

model.add(Dense(512, activation='relu'))

model.add(Dense(1, activation='sigmoid'))

print(model.summary())

model.compile(loss='binary_crossentropy',

optimizer=RMSprop(lr=1e-4),

metrics=['acc'])

4. 模型訓練

train_datagen = ImageDataGenerator(rescale=1./255)

test_datagen = ImageDataGenerator(rescale=1./255)

train_generator = train_datagen.flow_from_directory(

train_dir, # target directory

target_size=(150, 150), # resize圖片

batch_size=20,

class_mode='binary'

)

validation_generator = test_datagen.flow_from_directory(

validation_dir,

target_size=(150, 150),

batch_size=20,

class_mode='binary'

)

for data_batch, labels_batch in train_generator:

print('data batch shape:', data_batch.shape)

print('labels batch shape:', labels_batch.shape)

break

hist = model.fit_generator(

train_generator,

steps_per_epoch=100,

epochs=10,

validation_data=validation_generator,

validation_steps=50

)

model.save('cats_and_dogs_small_1.h5')

5. 模型評估

acc = hist.history['acc']

val_acc = hist.history['val_acc']

loss = hist.history['loss']

val_loss = hist.history['val_loss']

epochs = range(len(acc))

plt.plot(epochs, acc, 'bo', label='Training acc')

plt.plot(epochs, val_acc, 'b', label='Validation acc')

plt.title('Training and validation accuracy')

plt.legend()

plt.figure()

plt.figure()

plt.plot(epochs, loss, 'bo', label='Training loss')

plt.plot(epochs, val_loss, 'b', label='Validation loss')

plt.legend()

plt.show()

6. 預測

imagename = 'E:/python learn/dog_and_cat/data/validation/dogs/dog.2026.jpg'

test_image = image.load_img(imagename, target_size = (150, 150))

test_image = image.img_to_array(test_image)

test_image = np.expand_dims(test_image, axis=0)

result = model.predict(test_image)

if result[0][0] == 1:

prediction ='dog'

else:

prediction ='cat'

print(prediction)

代碼在spyder下運行正常,一般情況下,可以將文件分為兩個部分,一部分為Train.py,包含深度學習模型建立、訓練和模型的存儲,另一部分Predict.py,包含模型的讀取,評價和預測

補充知識:keras 貓狗大戰自搭網絡以及vgg16應用

導入模塊

import os

import numpy as np

import tensorflow as tf

import random

import seaborn as sns

import matplotlib.pyplot as plt

import keras

from keras.models import Sequential, Model

from keras.layers import Dense, Dropout, Activation, Flatten, Input,BatchNormalization

from keras.layers.convolutional import Conv2D, MaxPooling2D

from keras.optimizers import RMSprop, Adam, SGD

from keras.preprocessing import image

from keras.preprocessing.image import ImageDataGenerator

from keras.applications.vgg16 import VGG16, preprocess_input

from sklearn.model_selection import train_test_split

加載數據集

def read_and_process_image(data_dir,width=64, height=64, channels=3, preprocess=False):

train_images= [data_dir + i for i in os.listdir(data_dir)]

random.shuffle(train_images)

def read_image(file_path, preprocess):

img = image.load_img(file_path, target_size=(height, width))

x = image.img_to_array(img)

x = np.expand_dims(x, axis=0)

# if preprocess:

# x = preprocess_input(x)

return x

def prep_data(images, proprocess):

count = len(images)

data = np.ndarray((count, height, width, channels), dtype = np.float32)

for i, image_file in enumerate(images):

image = read_image(image_file, preprocess)

data[i] = image

return data

def read_labels(file_path):

labels = []

for i in file_path:

label = 1 if 'dog' in i else 0

labels.append(label)

return labels

X = prep_data(train_images, preprocess)

labels = read_labels(train_images)

assert X.shape[0] == len(labels)

print("Train shape: {}".format(X.shape))

return X, labels

讀取數據集

# 讀取圖片

WIDTH = 150

HEIGHT = 150

CHANNELS = 3

X, y = read_and_process_image('D:\\Python_Project\\train\\',width=WIDTH, height=HEIGHT, channels=CHANNELS)

查看數據集信息

# 統計y

sns.countplot(y)

# 顯示圖片

def show_cats_and_dogs(X, idx):

plt.figure(figsize=(10,5), frameon=True)

img = X[idx,:,:,::-1]

img = img/255

plt.imshow(img)

plt.show()

for idx in range(0,3):

show_cats_and_dogs(X, idx)

train_X = X[0:17500,:,:,:]

train_y = y[0:17500]

test_X = X[17500:25000,:,:,:]

test_y = y[17500:25000]

train_X.shape

test_X.shape

自定義神經網絡層數

input_layer = Input((WIDTH, HEIGHT, CHANNELS))

# 第一層

z = input_layer

z = Conv2D(64, (3,3))(z)

z = BatchNormalization()(z)

z = Activation('relu')(z)

z = MaxPooling2D(pool_size = (2,2))(z)

z = Conv2D(64, (3,3))(z)

z = BatchNormalization()(z)

z = Activation('relu')(z)

z = MaxPooling2D(pool_size = (2,2))(z)

z = Conv2D(128, (3,3))(z)

z = BatchNormalization()(z)

z = Activation('relu')(z)

z = MaxPooling2D(pool_size = (2,2))(z)

z = Conv2D(128, (3,3))(z)

z = BatchNormalization()(z)

z = Activation('relu')(z)

z = MaxPooling2D(pool_size = (2,2))(z)

z = Flatten()(z)

z = Dense(64)(z)

z = BatchNormalization()(z)

z = Activation('relu')(z)

z = Dropout(0.5)(z)

z = Dense(1)(z)

z = Activation('sigmoid')(z)

model = Model(input_layer, z)

model.compile(

optimizer = keras.optimizers.RMSprop(),

loss = keras.losses.binary_crossentropy,

metrics = [keras.metrics.binary_accuracy]

)

model.summary()

訓練模型

history = model.fit(train_X,train_y, validation_data=(test_X, test_y),epochs=10,batch_size=128,verbose=True)

score = model.evaluate(test_X, test_y, verbose=0)

print("Large CNN Error: %.2f%%" %(100-score[1]*100))

復用vgg16模型

def vgg16_model(input_shape= (HEIGHT,WIDTH,CHANNELS)):

vgg16 = VGG16(include_top=False, weights='imagenet',input_shape=input_shape)

for layer in vgg16.layers:

layer.trainable = False

last = vgg16.output

# 后面加入自己的模型

x = Flatten()(last)

x = Dense(256, activation='relu')(x)

x = Dropout(0.5)(x)

x = Dense(256, activation='relu')(x)

x = Dropout(0.5)(x)

x = Dense(1, activation='sigmoid')(x)

model = Model(inputs=vgg16.input, outputs=x)

return model

編譯模型

model_vgg16 = vgg16_model()

model_vgg16.summary()

model_vgg16.compile(loss='binary_crossentropy',optimizer = Adam(0.0001), metrics = ['accuracy'])

訓練模型

# 訓練模型

history = model_vgg16.fit(train_X,train_y, validation_data=(test_X, test_y),epochs=5,batch_size=128,verbose=True)

score = model_vgg16.evaluate(test_X, test_y, verbose=0)

print("Large CNN Error: %.2f%%" %(100-score[1]*100))

以上這篇keras分類之二分類實例(Cat and dog)就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

總結

以上是生活随笔為你收集整理的python 二分类的实例_keras分类之二分类实例(Cat and dog)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 五月天激情综合网 | 日韩视频在线免费播放 | 精品乱码一区二区三四区视频 | 美女视频久久久 | 91精品国产aⅴ一区二区 | 91青青操 | 物业福利视频 | 中文字幕视频网站 | 午夜三区| 欧美 丝袜 自拍 制服 另类 | av色站| 色图18p| 毛片入口 | 欧美又大又硬又粗bbbbb | 日韩啊啊啊| 国产成人免费av一区二区午夜 | 精品在线第一页 | 中文字幕高清一区 | 国产亚洲精品成人无码精品网站 | 色秀视频网| 四虎影视永久 | 日韩欧美精品在线播放 | 久久久999成人 | 免费萌白酱国产一区二区三区 | 亚洲天堂网站在线 | 僵尸叔叔在线观看国语高清免费观看 | 黄色大片在线看 | 成人黄色网页 | 激情综合视频 | 会喷水的亲姐姐 | 日韩在线观看中文字幕 | 另类小说亚洲色图 | 亚洲精品短视频 | 特级淫片裸体免费看冫 | 国产成人精品一区二区三区在线 | 亚洲国产精一区二区三区性色 | 日韩精品一区二区三区在线 | 久久福利网 | 国产热热 | 色www国产亚洲阿娇 自拍一区在线 | 免费成人在线电影 | 日本特级毛片 | sese视频在线观看 | 神马午夜久久 | 亚洲天堂99 | 色婷婷激情五月 | 久久久久久片 | 日韩av一区在线观看 | 欧美贵妇videos办公室 | 国产成人一区二区三区别 | 黄色三级视屏 | 国产精品久久国产精品99 | 欧美性猛交富婆 | 日韩射| 国产免费av一区二区 | 天堂网av手机版 | 欧美精品在线一区二区三区 | 亚洲免费高清视频 | 欧美激情一区二区三区p站 欧美mv日韩mv国产网站app | 国内自拍真实伦在线观看 | 日本第一页 | 森泽佳奈作品在线观看 | 亚洲精品乱码久久久久久按摩观 | 国产精品国产精品国产专区 | av手机在线免费观看 | 久久综合91 | 国产91精品一区 | 国语对白做受按摩的注意事项 | 怡红院成永久免费人全部视频 | 日日草夜夜草 | 久久国产精品精品国产 | 国产香蕉97碰碰碰视频在线观看 | 亚洲最黄网站 | 午夜视频在线播放 | 中文字幕亚洲一区二区三区 | 男女互插视频 | 国产区一区二区 | 大尺度做爰呻吟舌吻情头 | 希岛婚前侵犯中文字幕在线 | 精品国产福利 | 91毛片网站 | 九九免费视频 | 国产东北露脸精品视频 | 午夜嘿嘿嘿 | 爱情岛论坛自拍亚洲品质极速最新章 | 欧美污污视频 | 国产欧美一区二区三区国产幕精品 | 吃奶在线观看 | 91精品国产高清91久久久久久 | 伊人色在线 | 欧美最猛黑人xxxx | 欧美18一19性内谢 | 中文字幕亚洲图片 | 国产美女精品人人做人人爽 | 麻豆日韩 | 我的丝袜美腿尤物麻麻 | 中日韩免费视频 | 五月婷婷综合色 | 午夜精品少妇 |