在上一章,我們撰寫了訓練檔的程式碼,現在來執行它,請注意,第一次執行時,其中的
from keras.models import load_model
這一行請先註解掉。
執行時會出現這個畫面。
請稍等一會兒,因為它需要訓練很長的一段時間。
解析:
Epoch是目前訓練到第幾批次。
538s代表這一批次訓練花了多少時間。
loss是耗費了多少損失。
acc是準確度。
我們暫時不考慮過擬合的問題,因為這只是寫給初學者作練習用的,也只是給我這個初次寫教學文的新手練習寫文章的,我不想搞那麼複雜。
常態上來說,假設訓練模型正確,loss將會逐漸縮小,acc將逐漸增加(此圖片僅為參考,並非此程式的記錄)。
以這張圖片來說,這個訓練模型算合格的了。
由於訓練需要大量時間,而且會消耗許多運算資源,所以可以在訓練到一半時輸出權重:
model.save_weights("Fiborsis_sex.h5")
然後下次執行時把這一行取消註解:
from keras.models import load_model
這樣子下次訓練時就可以接續上次的存檔繼續訓練,不必從頭開始。
訓練到一定的程度之後,我們輸出結果:
model.save("Fiborsis_sex_result.h5")
稍後就可以在驗證檔中使用它。
我們現在建立一個check0的python檔案,程式碼如下:
import array
import sys
import numpy as np
import cv2
import glob
#設定亂數
import random
from keras.utils import np_utils
np.random.seed(0)
#設定影像的長寬
imgwidth=128
imgheight=128
#匯入需要用到的東西
from keras.models import Sequential
from keras.layers import Dense,Dropout,Activation,Flatten
from keras.layers import Conv2D,MaxPooling2D,ZeroPadding2D
model=Sequential()
from keras.models import load_model
#載入剛剛訓練好的訓練檔
model=load_model("Fiborsis_sex_result.h5")
print('載入資料')
#建立影像清單
imglist=[]
#匯入一張圖片
filestr='image_F/00001474_000.png'
img = cv2.imread(filestr,cv2.IMREAD_GRAYSCALE)
#resize它的大小
img=cv2.resize(img,(imgwidth,imgheight))
#將像素的數字縮小為0~1之間的數字
img=img/255.0
#將這張圖片加入imglist
imglist.append(img)
#轉換成numpy的array
x_img_test=np.array(imglist)
#進行reshape動作
x_img_test=np.reshape(x_img_test,(1,imgwidth,imgheight,1))
#預測這張圖是男生還是女生
prediction=model.predict(x_img_test)
#輸出機率
print("男性機率",(int)(prediction[0][0]*100),"%")
print("女性機率",(int)(prediction[0][1]*100),"%")
現在來執行這個程式。
執行結果,這張圖是女性的機率高達99%,而這張圖的確是女性沒錯,所以這次的測試是成功的。
不過記得要拿沒加入訓練檔訓練過的圖片來作測試,比較符合實際狀況,這是為了避免「過擬合」的問題,不過這不是本章所要討論的重點。
好了,本系列「使用Keras卷積神經網路辨別肺部醫學影像」教學文就在此告一段落了,以後有機會再接續著寫下去,那我們下次再見囉。
沒有留言:
張貼留言
有興趣或有疑問的歡迎提問與交流喔!!!