簡體   English   中英

使用 FastAI 訓練 model 時准確性非常差

[英]Very bad accuracy when training model with FastAI

我目前正在構建一個 model 來對不同汽車制造商的數千種車型進行分類。 我閱讀了 fastbook 的一些章節以獲得代碼結構並構建了我的 model。問題是我在准確性方面得到了絕對災難性的結果,我已經到了訓練階段的最后但我意識到預測非常壞(這里的指標是 error_rate) 在此處輸入圖像描述

這是我目前正在使用的代碼:

#!/usr/bin/env python
# coding: utf-8

# In[ ]:


#Affiche les class d'images peu fourni pour permettre de les enrichir
import os
import re

def count_files(directory, n_occurrences):
    files_count = {}
    for subdir, dirs, files in os.walk(directory):
        for file in files:
            filename = file.split("_", 3)[0:3] # prends les 3 premières parties du nom de fichier
            filename = "_".join(filename) 
            if filename in files_count:
                files_count[filename] += 1
            else:
                files_count[filename] = 1
    filtered_files = [(file, count) for file, count in files_count.items() if count < n_occurrences]
    filtered_files.sort(key=lambda tup: tup[1], reverse=True)
    print(filtered_files)
    
count_files('images/archive', 5)


# In[ ]:


#Nomme les classes pour le datablock
import re

def get_name(string):
  matches = re.findall(r"_", string)
  if len(matches) >= 3:
    index = string.index("_", string.index("_", string.index("_")+1)+1)
    return string[:index]
  return string


# In[ ]:


from fastai.vision.all import *


cars = DataBlock(blocks = (ImageBlock, CategoryBlock),
                 get_items=get_image_files, 
                 splitter=RandomSplitter(valid_pct=0.3, seed=44),
                 get_y=using_attr(get_name, 'name'),
                 item_tfms=Resize(128),
                 batch_tfms=aug_transforms(size=128))


# In[ ]:


dls = cars.dataloaders('images/archive', bs=16)


# In[ ]:


dls.show_batch(nrows=3, ncols=3)


# In[ ]:


model = xresnet34(n_out=dls.c)
learn = Learner(dls, model, loss_func=LabelSmoothingCrossEntropy(), metrics=accuracy)
learn.fine_tune(3)


# In[ ]:


#width 600
interp = ClassificationInterpretation.from_learner(learn)

#Matrice de confusion
#interp.plot_confusion_matrix(figsize=(12,12), dpi=60)

interp.most_confused(min_val=50)


# In[ ]:


lr_min,lr_steep = learn.lr_find(suggest_funcs=(minimum, steep))

print(f"Minimum/10: {lr_min:.2e}, steepest point: {lr_steep:.2e}")


# In[ ]:


#MinimumLR/10
learn.fit_one_cycle(3, 1e-8)


# In[ ]:


learn.unfreeze()


# In[ ]:


learn.lr_find()


# In[ ]:


#Lr_find[0]
learn.fit_one_cycle(6, lr_max=6e-5)


# In[ ]:


learn.fit_one_cycle(3, 6e-5)
learn.unfreeze()
learn.fit_one_cycle(12, lr_max=slice(1e-6,1e-4))


# In[ ]:

learn.recorder.plot_loss()

# In[ ]:

learn.predict('test/porsche.jpg')

# In[ ]:

我真的很感激任何見解和幫助!

如果您嘗試使用 RandomForestClassifier 會怎么樣?

首先定義 x 和 y

 from sklearn.ensemble import RandomForestClassifier
 from sklearn.model_selection import train_test_split
 from sklearn import metrics


X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=0.2, random_state=1)
model = RandomForestClassifier(random_state=1)
model.fit(X_train, y_train)
preds = model.predict(X_test) 

然后你試試准確性:

accuracy = metrics.accuracy_score(y_test, preds)
accuracy 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM