医学图像九分类
在上一次分類的基礎上將二分類擴展為九分類。
切割圖片為2000*2000,space=2000,按類別放在patch文件夾中。
要將整個數據集劃分為訓練集和測試集。
下面是兩種方法劃分數據集:
方法1:將源文件夾和目標文件夾相互對應起來,根據圖片在文件夾中的位置索引,來判斷是放在訓練集,還是測試集。
方法2:利用sklearn中帶有的劃分數據集的方法,將每個類別中的圖片的名字按照一定的比例劃分到x_train,x_test.
from sklearn.model_selection import train_test_split import numpy as np import os import shutil split_train="/home/cad429/code/yue/Week2/splittrain" if not os.path.exists(split_train):os.makedirs(split_train)split_test="/home/cad429/code/yue/Week2/splittest" if not os.path.exists(split_test):os.makedirs(split_test)Image_path="/home/cad429/code/yue/Week2/patch" Image_list=os.listdir(Image_path) for i in Image_list:#對應的0,1,2,3,4...path=os.path.join(Image_path,i)imag=os.listdir(path)imag_name=[j.split('.')[0] for j in imag]x_train,x_test=train_test_split(imag_name,test_size=0.3)print("i:",i)# print("x_train list:",x_train)# print("x_test list:",x_test)#將圖片歸到對應的train文件夾for er in x_train:train_image_path=os.path.join(split_train,i,er+".png")train_image_original_path=os.path.join(path,er+".png")#print("destination",train_image_path)#print("original:",train_image_original_path)shutil.copy(train_image_original_path,train_image_path)for es in x_test:test_image_path=os.path.join(split_test,i,es+".png")test_image_original_path=os.path.join(path,es+".png")shutil.copy(test_image_original_path,test_image_path)# print("original:",test_image_original_path)# print("destination:",test_image_path)圖片大小為2000*2000,batch_size=2,learnning_rate=0.01,epoch=100,損失函數為CrossEntropyLoss,優化 函數為Adam時的訓練結果:
測試的結果:
控制變量法做對比試驗:將圖片切為2000*2000,spacing=1000,learnning_rate=0.01,損失函數為CrossEntropyLoss,優化函數為Adam的
訓練 結果:
測試結果:
測試結果顯示,過擬合,要增加一個驗證集,監控模型 是否發生過擬合,來決定是否停止訓練。
將train的訓練集的圖片劃分一部分到驗證集。
import os import shutil import random from sklearn.model_selection import train_test_split def move_train_to_val(train_path,val_path,train2_path):class_list=os.listdir(train_path)print(class_list)for i in class_list:print(i)class_path=os.path.join(train_path,i)Image_list=os.listdir(class_path)Image_len=len(Image_list)Image_name=[j.split('.')[0] for j in Image_list]train_name,val_name=train_test_split(Image_name)for valname in val_name:original=os.path.join(class_path,valname+".png")val_image_path=os.path.join(val_path,i,valname+".png")shutil.move(original,val_image_path)# print("original:", original)# print("vallllll:", val_image_path)for trainname in train_name:trainoriginal=os.path.join(class_path,trainname+".png")#print("trainoriginal:",trainoriginal)train2_image_path=os.path.join(train2_path,i,trainname+".png")shutil.move(trainoriginal,train2_image_path)# print("original",trainoriginal)# print("train2",train2_image_path)if __name__=="__main__":train_path="/home/cad429/code/yue/Week2/train"val_path="/home/cad429/code/yue/Week2/val"train2_path="/home/cad429/code/yue/Week2/train2"move_train_to_val(train_path,val_path,train2_path)將添加的新的驗證集用來判斷是否結束訓練,然后用測試集來測試訓練的模型。
結果:
總結:對圖片預處理的部分較少,test準確率較低,評判標準只有acc和loss,評判標準較少。有些代碼較冗余,重復功能的代碼需要反復寫。
下一次實驗,減少冗余代碼,評判標準多一點。
總結
- 上一篇: 事业发展规划
- 下一篇: windows无法上网:代理服务器出现问