廣州做網(wǎng)站比較有名的公司網(wǎng)站seo檢測工具
1. 代碼實現(xiàn)(包含流程解釋)
?樣本量:? 8005
# ==================================================================
# 1.導(dǎo)入數(shù)據(jù)集(加載圖片)+數(shù)據(jù)預(yù)處理# 進行圖像增強, 通過對圖像的旋轉(zhuǎn) ,縮放,剪切變換, 翻轉(zhuǎn), 平移等一系列操作來生成新樣本, 進而增加樣本容量,
# 同時對圖片數(shù)值進行歸一化[0:1]
from tensorflow.keras.preprocessing.image import ImageDataGenerator
# 下面一些參數(shù)是ai生成的, 感覺自己都學(xué)到狗身上去了, 直接讓ai去學(xué)訓(xùn)練模型吧, 它比我做得好,嗚嗚嗚
# 加上ai提供的參數(shù)之后, 準(zhǔn)確率降低了百分之三十, 果然, 我還是有點存在價值的
dog_cat_datagen = ImageDataGenerator(rescale=1./255, # 歸一化圖像
)
# 加載圖像數(shù)據(jù), 將圖像轉(zhuǎn)換為50*50像素的圖片, 每次訓(xùn)練選32張圖片進行反向搜索, 分類類型是二分類
dog_cat_data=dog_cat_datagen.flow_from_directory(r"C:\Users\鷹\Desktop\ML_Set\dog_cat_class\training_set", target_size=(50,50), batch_size=32,class_mode='binary')# ===============================================================================================
# 2.模型訓(xùn)練
# 模型框架搭建
# 導(dǎo)入線性堆疊框架
from keras.models import Sequential
CNN=Sequential()# 模型填充
# 導(dǎo)入卷積層模塊, 池化層模塊, 展開層模塊, 全連接層模塊
from keras.layers import Conv2D, MaxPool2D, Flatten, Dense
# 第一波卷積層, 就是為什么需要激活函數(shù)呢???????不理解啊!!!
CNN.add(Conv2D(32,(3,3), input_shape=(50,50,3), activation='relu'))
# 第一波池化層, 默認step==1, 默認進行圖像填充padding???
CNN.add(MaxPool2D(pool_size=(2,2)))
# 第二波卷積層
CNN.add(Conv2D(32,(3,3), activation='relu'))
# 第二波池化層
CNN.add(MaxPool2D(pool_size=(2,2)))
# flatten--展開層, 作用就是轉(zhuǎn)換圖像矩陣的維度, 將二維轉(zhuǎn)化為一維來作為全連接層的輸入
CNN.add(Flatten())
# FC layer--全連接層
CNN.add(Dense(units=128, activation='relu'))
CNN.add(Dense(units=1, activation='sigmoid'))# 模型編譯調(diào)優(yōu), 加一個精確率是什么鬼? 看看效果再說吧
CNN.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])CNN.summary()# 訓(xùn)練模型, 使用fit_generator是因為對圖像進行了增強, 得到的數(shù)據(jù)是基于ImageDataGenerator產(chǎn)生的
# CNN.fit(dog_cat_data, epochs=25)
CNN.fit(dog_cat_data,epochs=25,
# steps_per_epoch=dog_cat_data.samples // dog_cat_data.batch_size
)# ================================================================================================================
# 模型評估與預(yù)測
# 訓(xùn)練集的準(zhǔn)確率
train_accuracy=CNN.evaluate(dog_cat_data)
print("訓(xùn)練集準(zhǔn)確率為:", train_accuracy[1])# 測試集準(zhǔn)確率
# 需要先對測試集進行導(dǎo)入和預(yù)處理
from tensorflow.keras.preprocessing.image import ImageDataGenerator
dog_cat_data_plus=ImageDataGenerator(1./255)
dog_cat_data_test=dog_cat_data_plus.flow_from_directory(r"C:\Users\鷹\Desktop\ML_Set\dog_cat_class\test_set", target_size=(50,50), batch_size=32, class_mode='binary')
test_accuracy=CNN.evaluate(dog_cat_data_test)
print("測試集準(zhǔn)確率為:", test_accuracy[1])# ======================================================================
# 在網(wǎng)上下載圖片, 進行隨機測試
from keras.preprocessing.image import load_img, img_to_array
pic_animal=r"C:\Users\鷹\Desktop\Dog+Cat\12.jpg"
pic_animal=load_img(pic_animal, target_size=(50,50))
pic_animal=img_to_array(pic_animal)
# 歸一化
pic_animal=pic_animal/255
pic_animal=pic_animal.reshape(1,50,50,3)
# 預(yù)測
res_pro=CNN.predict(pic_animal)
import numpy as np
res=np.argmax(res_pro, axis=1)
print("result is :", res)
# 結(jié)果為0--貓, 結(jié)果為1--狗
2.注意:
這個訓(xùn)練的模型有一點問題, 當(dāng)然也有可能是我的問題:
模型在訓(xùn)練集和測試集上表現(xiàn)不錯, 訓(xùn)練集準(zhǔn)確率接近100%, 測試集準(zhǔn)確率70%左右,?
但使用在百度上下載的貓狗圖片進行二分類預(yù)測時, 測試結(jié)果全部顯示[0], 也就是貓,?
希望路過的大佬能指點一下, 請收下我的膝蓋!!!!!!??
3.數(shù)據(jù)集鏈接:
官網(wǎng):
Cat and Dog | KaggleCats and Dogs dataset to train a DL modelhttps://www.kaggle.com/datasets/tongpython/cat-and-dog?resource=download
百度網(wǎng)盤分享:
鏈接:https://pan.baidu.com/s/1T1mymwIqOOF3MKfWxRtnpQ?
提取碼:6axn
晚安,各位? ? ? ??
????????