Test fa_convnav working as expected with all supported models.
from fastai2.basics import *
from fastai2.callback.all import *
from fastai2.vision.all import *
from torch import torch
from fa_convnav.navigator import *
from pandas import DataFrame
pets = DataBlock(blocks=(ImageBlock, CategoryBlock),
get_items=get_image_files,
splitter=RandomSplitter(),
get_y=RegexLabeller(pat = r'/([^/]+)_\d+.jpg$'),
item_tfms=Resize(460),
batch_tfms=[*aug_transforms(size=224, max_rotate=30, min_scale=0.75), Normalize.from_stats(*imagenet_stats)])
dls = pets.dataloaders(untar_data(URLs.PETS)/"images", bs=128)
%%capture
def run_tests(cn_test, i):
test_df = cn_test._cndf
test_eq(type(cn_test._cndf), res[0])
test_eq(len(cn_test._cndf), res[1]) # rows
test_eq(len(cn_test._cndf.columns), res[2]) # columns
test_df['lyr_obj'] = None
test_eq(len(cndf_search(test_df, 12)), res[3])
test_eq(len(cndf_search(test_df, ['0.6.1.conv2', '0.0.6', '0.0.6', '0.0.6', '0.0.4', '0.6'][i])), res[4])
test_eq(len(cndf_search(test_df, ['0.6', '0.0.6', '0.0.6', '0.0.6', '0.0.4.2', '0.6'][i], exact=False)), res[5])
test_eq(len(cndf_search(test_df, [{'Module_name': '0.6', 'Layer_description':'Conv2d'}, \
{'Module_name': '1.0', 'Container_child':'AdaptiveConcatPool2d'}, \
{'Module_name': '1.0', 'Container_child':'AdaptiveConcatPool2d'}, \
{'Module_name': '0.0.6', 'Layer_description':'Conv2d'}, \
{'Module_name': '0.0.4.2', 'Layer_description':'Conv2d'}, \
{'Module_name': '0.6', 'Layer_description':'Conv2d'}, \
][i], exact=True)), res[6])
test_eq(len(cndf_search(test_df, ['0.6', '0.5'], exact=False)), res[7])
test_eq(cndf_search(test_df, ('0.6', '0.5'), exact=False), res[8])
cn_test.view()
cn_test.head
cn_test.body
cn_test.divs
test_eq(len(cn_test.linear_layers), res[9])
test_eq(len(cn_test.dim_transitions), res[10])
test_eq(len(cn_test.find_block('0.4.1')), res[11])
test_eq(len(cn_test.find_block('0.4.1', layers=False)), res[12])
test_eq(len(cn_test.find_conv('first', 5)), res[13]) #revise to 5 ater importing chnages from core.ipynb+ below 3 -> 5
test_eq(len(cn_test.children), res[14])
test_eq(len(cn_test.blocks), res[15])
test_eq(len(cn_test.spread('conv', 8)), res[16])
del(cn_test)
models_to_test = [
('resnet18', resnet18, [DataFrame, 79, 22, 1, 1, 16, 1, 32, None, 2, 5, 6, 1, 5, 8, 8, 7]),
('vgg13', vgg13_bn, [DataFrame, 50, 22, 1, 1, 1, 1, 2, None, 2, 5, 0, 0, 5, 1, 0, 5]),
('alexnet', alexnet, [DataFrame, 28, 22, 1, 1, 1, 1, 2, None, 2, 3, 0, 0, 4, 1, 0, 5]),
('squeezenet1_0', squeezenet1_0, [DataFrame, 76, 22, 1, 1, 1, 1, 8, None, 2, 4, 0, 0, 5, 1, 8, 7]),
('densenet161', densenet161, [DataFrame, 585, 22, 1, 1, 42, 1, 9, None, 2, 6, 7, 1, 5, 12, 78, 8]), # 11, 12 revise values after imorting cahnges from core.ipynb
('xresnet34', xresnet34, [DataFrame, 219, 22, 1, 1, 71, 1, 120, None, 2, 5, 11, 1, 5, 8, 16, 8])
]
%%capture
for i, model in enumerate(models_to_test):
_, m, res = model
print(m)
learn = cnn_learner(
dls,
m,
opt_func=partial(Adam, lr=slice(3e-3), wd=0.01, eps=1e-8),
metrics=error_rate,
config=cnn_config(ps=0.33)).to_fp16()
run_tests(ConvNav(learn, learn.summary()), i)