Keras構(gòu)建神經(jīng)網(wǎng)絡(luò)踩坑(解決model.predict預(yù)測值全為0.0的問題)
終于構(gòu)建出了第一個(gè)神經(jīng)網(wǎng)絡(luò),Keras真的很方便。
之前不知道Keras這么方便,在構(gòu)建神經(jīng)網(wǎng)絡(luò)的過程中繞了很多彎路,最開始學(xué)的TensorFlow,后來才知道Keras。
TensorFlow和Keras的關(guān)系,就像c語言和python的關(guān)系,所以Keras是真的好用。
搞不清楚數(shù)據(jù)的標(biāo)準(zhǔn)化和歸一化的關(guān)系,想對原始數(shù)據(jù)做歸一化,卻誤把數(shù)據(jù)做了標(biāo)準(zhǔn)化,導(dǎo)致用model.predict預(yù)測出來的值全是0.0,在網(wǎng)上搜了好久但是沒搜到答案,后來自己又把程序讀了一遍,突然靈光一現(xiàn)好像是數(shù)據(jù)歸一化出了問題,于是把數(shù)據(jù)預(yù)處理部分的標(biāo)準(zhǔn)化改成了歸一化,修改過來之后才能正常預(yù)測出來值,才得到應(yīng)有的數(shù)據(jù)趨勢。
標(biāo)準(zhǔn)化:
(x-mean(x))/std(x) 這是使用z-score方法規(guī)范化
歸一化:
(x-min(x))/(max(x)-min(x)) 這是常用的最小最大規(guī)范化方法
補(bǔ)充知識:keras加載已經(jīng)訓(xùn)練好的模型文件,進(jìn)行預(yù)測時(shí)卻發(fā)現(xiàn)預(yù)測結(jié)果幾乎為同一類(本人預(yù)測時(shí)幾乎均為為第0類)**
原因:在進(jìn)行keras訓(xùn)練時(shí)候,使用了keras內(nèi)置的數(shù)據(jù)讀取方式,但是在進(jìn)行預(yù)測時(shí)候,使用了自定義的數(shù)據(jù)讀取方式,本人為圖片讀取。
解決辦法查看如下代碼:
##############訓(xùn)練:
train_gen = ImageDataGenerator(rotation_range=10,
width_shift_range=0.2,
shear_range=0.2,
zoom_range=0.2,
fill_mode='constant',
cval=0)
train_generator = train_gen.flow_from_directory(train_path,
target_size=(224, 224),
batch_size=16,
class_mode='categorical',
save_to_dir=train_g,
save_prefix='man',
save_format='jpg')
#############預(yù)測
img = cv2.imread(img_path)
img = cv2.resize(img, (row, col))
img = np.expands(img, axis=0)
out = model.predict(img)
# 上述方法是不行的,仔細(xì)查看keras內(nèi)置讀取方式,可以觀察到內(nèi)置了load_img方式
# 因此,我們在預(yù)測時(shí)候,將讀取圖片的方式改為
from keras.preprocessing.image import load_img, img_to_array
img = load_img(img_path)
img = img_to_array(img, target_size=(row, col))
img = np.expands(img, axis=0)
out = model.predict(img)
注:本文意在說明 對訓(xùn)練數(shù)據(jù)和預(yù)測數(shù)據(jù)的讀取、預(yù)處理方式上應(yīng)該在某種程度上保持一致,從而避免訓(xùn)練結(jié)果和真實(shí)預(yù)測結(jié)果相差過大的情況。
以上這篇Keras構(gòu)建神經(jīng)網(wǎng)絡(luò)踩坑(解決model.predict預(yù)測值全為0.0的問題)就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python中不同圖表的數(shù)據(jù)可視化的實(shí)現(xiàn)
數(shù)據(jù)可視化是以圖形格式呈現(xiàn)數(shù)據(jù)。它通過以簡單易懂的格式匯總和呈現(xiàn)大量數(shù)據(jù),幫助人們理解數(shù)據(jù)的重要性,并有助于清晰有效地傳達(dá)信息。本文為大家準(zhǔn)備了Python實(shí)現(xiàn)不同圖表數(shù)據(jù)可視化的代碼,需要的可以參考一下2022-08-08
一文讓你徹底搞懂Python中__str__和__repr__
這篇文章主要介紹了Python中的__str__和__repr__的異同,__str__和__repr__是基本的內(nèi)置方法,文中有詳細(xì)的代碼示例,感興趣的同學(xué)可以參考閱讀下2023-05-05
Python關(guān)于OS文件目錄處理的實(shí)例分享
在本篇文章里小編給大家整理的是一篇關(guān)于Python關(guān)于OS文件目錄處理的實(shí)例內(nèi)容,有興趣的朋友們可以學(xué)一下。2021-05-05
python實(shí)現(xiàn)一般游戲的自動點(diǎn)擊具體操作
這篇文章主要介紹了python實(shí)現(xiàn)一般游戲的自動點(diǎn)擊,本文給大家分享具體操作代碼及需要的軟件,需要的朋友可以參考下2021-10-10
pycharm 多行批量縮進(jìn)和反向縮進(jìn)快捷鍵介紹
這篇文章主要介紹了pycharm 多行批量縮進(jìn)和反向縮進(jìn)快捷鍵介紹,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-01-01

