Keras構(gòu)建神經(jīng)網(wǎng)絡(luò)踩坑(解決model.predict預(yù)測值全為0.0的問題)
終于構(gòu)建出了第一個神經(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ù)的標準化和歸一化的關(guān)系,想對原始數(shù)據(jù)做歸一化,卻誤把數(shù)據(jù)做了標準化,導(dǎo)致用model.predict預(yù)測出來的值全是0.0,在網(wǎng)上搜了好久但是沒搜到答案,后來自己又把程序讀了一遍,突然靈光一現(xiàn)好像是數(shù)據(jù)歸一化出了問題,于是把數(shù)據(jù)預(yù)處理部分的標準化改成了歸一化,修改過來之后才能正常預(yù)測出來值,才得到應(yīng)有的數(shù)據(jù)趨勢。
標準化:
(x-mean(x))/std(x) 這是使用z-score方法規(guī)范化
歸一化:
(x-min(x))/(max(x)-min(x)) 這是常用的最小最大規(guī)范化方法
補充知識:keras加載已經(jīng)訓(xùn)練好的模型文件,進行預(yù)測時卻發(fā)現(xiàn)預(yù)測結(jié)果幾乎為同一類(本人預(yù)測時幾乎均為為第0類)**
原因:在進行keras訓(xùn)練時候,使用了keras內(nèi)置的數(shù)據(jù)讀取方式,但是在進行預(yù)測時候,使用了自定義的數(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) # 上述方法是不行的,仔細查看keras內(nèi)置讀取方式,可以觀察到內(nèi)置了load_img方式 # 因此,我們在預(yù)測時候,將讀取圖片的方式改為 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é)果和真實預(yù)測結(jié)果相差過大的情況。
以上這篇Keras構(gòu)建神經(jīng)網(wǎng)絡(luò)踩坑(解決model.predict預(yù)測值全為0.0的問題)就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python中不同圖表的數(shù)據(jù)可視化的實現(xiàn)
數(shù)據(jù)可視化是以圖形格式呈現(xiàn)數(shù)據(jù)。它通過以簡單易懂的格式匯總和呈現(xiàn)大量數(shù)據(jù),幫助人們理解數(shù)據(jù)的重要性,并有助于清晰有效地傳達信息。本文為大家準備了Python實現(xiàn)不同圖表數(shù)據(jù)可視化的代碼,需要的可以參考一下2022-08-08一文讓你徹底搞懂Python中__str__和__repr__
這篇文章主要介紹了Python中的__str__和__repr__的異同,__str__和__repr__是基本的內(nèi)置方法,文中有詳細的代碼示例,感興趣的同學(xué)可以參考閱讀下2023-05-05