% reload_ext autoreload
% autoreload 2
% matplotlib inline
from fastai. vision import *
from fastai. metrics import error_rate
path = untar_data( URLs. PETS)
WindowsPath('C:/Users/Wither8848/.fastai/data/oxford-iiit-pet')
path. ls( )
[WindowsPath('C:/Users/Wither8848/.fastai/data/oxford-iiit-pet/annotations'),
WindowsPath('C:/Users/Wither8848/.fastai/data/oxford-iiit-pet/crappy'),
WindowsPath('C:/Users/Wither8848/.fastai/data/oxford-iiit-pet/images')]
path_img = path/ 'images'
fnames = get_image_files( path_img)
fnames[ : 5 ]
[WindowsPath('C:/Users/Wither8848/.fastai/data/oxford-iiit-pet/images/Abyssinian_1.jpg'),
WindowsPath('C:/Users/Wither8848/.fastai/data/oxford-iiit-pet/images/Abyssinian_10.jpg'),
WindowsPath('C:/Users/Wither8848/.fastai/data/oxford-iiit-pet/images/Abyssinian_100.jpg'),
WindowsPath('C:/Users/Wither8848/.fastai/data/oxford-iiit-pet/images/Abyssinian_101.jpg'),
WindowsPath('C:/Users/Wither8848/.fastai/data/oxford-iiit-pet/images/Abyssinian_102.jpg')]
np. random. seed( 2 )
pat = r'/([^/]+)_\d+.jpg$'
bs= 64
data = ImageDataBunch. from_name_re( path_img, fnames, pat, ds_tfms= get_transforms( ) , size= 224 , bs= bs) . normalize( imagenet_stats)
data. show_batch( rows= 4 , figsize= ( 7 , 7 ) )
print ( data. classes)
data. c
['Abyssinian', 'Bengal', 'Birman', 'Bombay', 'British_Shorthair', 'Egyptian_Mau', 'Maine_Coon', 'Persian', 'Ragdoll', 'Russian_Blue', 'Siamese', 'Sphynx', 'american_bulldog', 'american_pit_bull_terrier', 'basset_hound', 'beagle', 'boxer', 'chihuahua', 'english_cocker_spaniel', 'english_setter', 'german_shorthaired', 'great_pyrenees', 'havanese', 'japanese_chin', 'keeshond', 'leonberger', 'miniature_pinscher', 'newfoundland', 'pomeranian', 'pug', 'saint_bernard', 'samoyed', 'scottish_terrier', 'shiba_inu', 'staffordshire_bull_terrier', 'wheaten_terrier', 'yorkshire_terrier']
37
'''迁移学习'''
learn = cnn_learner( data, models. resnet34, metrics = error_rate)
learn. model
learn. fit_one_cycle( 4 )
learn. save( 'stage' )
'''查看错误分类的结果'''
interp = ClassificationInterpretation. from_learner( learn)
interp. plot_top_losses( 9 , figsize= ( 15 , 11 ) )
interp. plot_confusion_matrix( figsize= ( 12 , 12 ) , dpi= 60 )
interp. most_confused( min_val= 2 )
[('staffordshire_bull_terrier', 'american_pit_bull_terrier', 6),
('Abyssinian', 'Bengal', 5),
('Maine_Coon', 'Ragdoll', 5),
('chihuahua', 'miniature_pinscher', 5),
('Birman', 'Ragdoll', 4),
('British_Shorthair', 'Russian_Blue', 4),
('Ragdoll', 'Birman', 4),
('Egyptian_Mau', 'Bengal', 3),
('Russian_Blue', 'Bombay', 3),
('american_bulldog', 'staffordshire_bull_terrier', 3),
('english_cocker_spaniel', 'english_setter', 3),
('Abyssinian', 'Sphynx', 2),
('Bengal', 'Egyptian_Mau', 2),
('Birman', 'Siamese', 2),
('British_Shorthair', 'Bombay', 2),
('Maine_Coon', 'Bengal', 2),
('Maine_Coon', 'Persian', 2),
('Ragdoll', 'Persian', 2),
('Russian_Blue', 'Abyssinian', 2),
('Siamese', 'Birman', 2),
('Sphynx', 'chihuahua', 2),
('american_bulldog', 'boxer', 2),
('american_pit_bull_terrier', 'american_bulldog', 2),
('american_pit_bull_terrier', 'boxer', 2),
('american_pit_bull_terrier', 'staffordshire_bull_terrier', 2),
('beagle', 'basset_hound', 2),
('boxer', 'american_bulldog', 2),
('boxer', 'saint_bernard', 2),
('chihuahua', 'american_pit_bull_terrier', 2),
('german_shorthaired', 'american_pit_bull_terrier', 2),
('german_shorthaired', 'staffordshire_bull_terrier', 2),
('miniature_pinscher', 'american_pit_bull_terrier', 2),
('saint_bernard', 'boxer', 2),
('staffordshire_bull_terrier', 'american_bulldog', 2)]
'''参数优化'''
learn. unfreeze( )
learn. fit_one_cycle( 1 )
epoch train_loss valid_loss error_rate time
0 0.685388 0.372840 0.117727 01:17
learn. lr_find( )
learn. recorder. plot( )
epoch train_loss valid_loss error_rate time
0 1.473476 #na# 00:43
LR Finder is complete, type {learner_name}.recorder.plot() to see the graph.
F:\software\programming_software\Anaconda3\lib\site-packages\fastai\sixel.py:16: UserWarning: You could see this plot with `libsixel`. See https://github.com/saitoha/libsixel
warn("You could see this plot with `libsixel`. See https://github.com/saitoha/libsixel")
learn. unfreeze( )
learn. fit_one_cycle( 2 , max_lr= slice ( 1e - 6 , 1e - 4 ) )
epoch train_loss valid_loss error_rate time
0 0.379295 0.312089 0.096752 01:17
1 0.327472 0.293061 0.094723 01:16
learn. save( 'stage-2' )