Open In Colab

Setup

!nvidia-smi
Thu Oct 28 20:38:57 2021       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 495.29.05    Driver Version: 460.32.03    CUDA Version: 11.2     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                               |                      |               MIG M. |
|===============================+======================+======================|
|   0  A100-SXM4-40GB      Off  | 00000000:00:04.0 Off |                    0 |
| N/A   49C    P0    45W / 400W |      0MiB / 40536MiB |      0%      Default |
|                               |                      |             Disabled |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+
!pip install -Uqqq fastai
     |████████████████████████████████| 189 kB 4.9 MB/s 
     |████████████████████████████████| 56 kB 5.4 MB/s 

Baixando os dados

from google.colab import drive
drive.mount('/content/drive')
Mounted at /content/drive
!cp /content/drive/MyDrive/Datasets/NEU-CLS.rar NEU_CLS.rar
!unrar x NEU_CLS.rar > /dev/null 2>&1
!ls NEU-CLS

EDA

from fastai.vision.all import *
path = Path('NEU-CLS')
path.ls()
(#1801) [Path('NEU-CLS/Pa_80.bmp'),Path('NEU-CLS/RS_202.bmp'),Path('NEU-CLS/Pa_39.bmp'),Path('NEU-CLS/Pa_17.bmp'),Path('NEU-CLS/Sc_229.bmp'),Path('NEU-CLS/Cr_254.bmp'),Path('NEU-CLS/In_242.bmp'),Path('NEU-CLS/Pa_202.bmp'),Path('NEU-CLS/RS_14.bmp'),Path('NEU-CLS/Sc_50.bmp')...]
img = path.ls()[1]
img = Image.open(img)
img
img.shape
(200, 200)
def labeler(o): return o.name.split('_')[0]

labeler(path.ls()[0])
'Pa'
files = get_image_files(path)
files
(#1800) [Path('NEU-CLS/Pa_80.bmp'),Path('NEU-CLS/RS_202.bmp'),Path('NEU-CLS/Pa_39.bmp'),Path('NEU-CLS/Pa_17.bmp'),Path('NEU-CLS/Sc_229.bmp'),Path('NEU-CLS/Cr_254.bmp'),Path('NEU-CLS/In_242.bmp'),Path('NEU-CLS/Pa_202.bmp'),Path('NEU-CLS/RS_14.bmp'),Path('NEU-CLS/Sc_50.bmp')...]
labels = L(map(labeler, files))
labels
(#1800) ['Pa','RS','Pa','Pa','Sc','Cr','In','Pa','RS','Sc'...]
labels.unique()
(#6) ['Pa','RS','Sc','Cr','In','PS']
np.unique(np.array(labels), return_counts=True)
(array(['Cr', 'In', 'PS', 'Pa', 'RS', 'Sc'], dtype='<U2'),
 array([300, 300, 300, 300, 300, 300]))

Dataloader

dblock = DataBlock(
    blocks = (ImageBlock, CategoryBlock),
    get_items = get_image_files,
    get_y = labeler,
    # batch_tfms = aug_transforms(mult= 1.5, flip_vert=True, max_lighting=0.3),
    batch_tfms = [Dihedral(), Flip()],
    splitter = RandomSplitter(1/3, seed=42)
)
dls = dblock.dataloaders(path, bs = 64, num_workers = 10)
dls.show_batch()

Função para plotar métricas

@patch
@delegates(subplots)
def plot_metrics(self: Recorder, nrows=None, ncols=None, figsize=None, **kwargs):
    metrics = np.stack(self.values)
    names = self.metric_names[1:-1]
    n = len(names) - 1
    if nrows is None and ncols is None:
        nrows = int(math.sqrt(n))
        ncols = int(np.ceil(n / nrows))
    elif nrows is None: nrows = int(np.ceil(n / ncols))
    elif ncols is None: ncols = int(np.ceil(n / nrows))
    figsize = figsize or (ncols * 6, nrows * 4)
    fig, axs = subplots(nrows, ncols, figsize=figsize, **kwargs)
    axs = [ax if i < n else ax.set_axis_off() for i, ax in enumerate(axs.flatten())][:n]
    for i, (name, ax) in enumerate(zip(names, [axs[0]] + axs)):
        ax.plot(metrics[:, i], color='#1f77b4' if i == 0 else '#ff7f0e', label='valid' if i > 0 else 'train')
        ax.set_title(name if i > 1 else 'losses')
        ax.legend(loc='best')
    plt.show()

Baseline learner (Resnet34)

base_learner = cnn_learner(dls, resnet34, metrics = accuracy)
base_learner.fine_tune(10)
epoch train_loss valid_loss accuracy time
0 1.370985 0.233006 0.936667 00:02
epoch train_loss valid_loss accuracy time
0 0.149249 0.117200 0.960000 00:02
1 0.093157 0.033443 0.985000 00:02
2 0.066716 0.011498 0.993333 00:02
3 0.061090 0.008424 0.998333 00:02
4 0.048788 0.013589 0.996667 00:02
5 0.035898 0.002989 0.998333 00:02
6 0.026968 0.004380 0.996667 00:02
7 0.019932 0.002487 1.000000 00:02
8 0.014018 0.003501 0.996667 00:02
9 0.010632 0.004444 0.996667 00:02
base_learner.recorder.plot_metrics()

Squeezenet Learner

import torchvision.models as models
squeezenet = models.squeezenet1_0(pretrained=True)
fake_batch = torch.randn((2, 3, 200, 200))
plt.imshow(fake_batch[0].permute(1, 2, 0));
Clipping input data to the valid range for imshow with RGB data ([0..1] for floats or [0..255] for integers).
squeezenet(fake_batch).shape
torch.Size([2, 1000])
squeezenet.classifier[1] = nn.Conv2d(512, 6, kernel_size=(1, 1), stride=(1, 1))
squeezenet(fake_batch).shape
torch.Size([2, 6])
sqnt_learner = Learner(dls, squeezenet, metrics = accuracy)
sqnt_learner.lr_find()
SuggestedLRs(valley=5.248074739938602e-05)
sqnt_learner.fine_tune(10, 1e-4)
epoch train_loss valid_loss accuracy time
0 1.666852 0.817575 0.815000 00:02
epoch train_loss valid_loss accuracy time
0 0.731520 0.442989 0.895000 00:02
1 0.505954 0.131973 0.955000 00:02
2 0.319941 0.031790 0.990000 00:02
3 0.214777 0.026260 0.993333 00:02
4 0.149010 0.022425 0.993333 00:02
5 0.105086 0.011306 0.995000 00:02
6 0.076240 0.011093 0.998333 00:02
7 0.057407 0.010996 0.995000 00:02
8 0.041928 0.009450 0.998333 00:02
9 0.032595 0.009261 0.998333 00:02
sqnt_learner.recorder.plot_metrics()

SqueezeNet vs. Resnet34

sqnt_learner.summary()
SqueezeNet (Input shape: 64 x 3 x 200 x 200)
============================================================================
Layer (type)         Output Shape         Param #    Trainable 
============================================================================
                     64 x 96 x 97 x 97   
Conv2d                                    14208      True      
ReLU                                                           
____________________________________________________________________________
                     64 x 96 x 48 x 48   
MaxPool2d                                                      
____________________________________________________________________________
                     64 x 16 x 48 x 48   
Conv2d                                    1552       True      
ReLU                                                           
____________________________________________________________________________
                     64 x 64 x 48 x 48   
Conv2d                                    1088       True      
ReLU                                                           
Conv2d                                    9280       True      
ReLU                                                           
____________________________________________________________________________
                     64 x 16 x 48 x 48   
Conv2d                                    2064       True      
ReLU                                                           
____________________________________________________________________________
                     64 x 64 x 48 x 48   
Conv2d                                    1088       True      
ReLU                                                           
Conv2d                                    9280       True      
ReLU                                                           
____________________________________________________________________________
                     64 x 32 x 48 x 48   
Conv2d                                    4128       True      
ReLU                                                           
____________________________________________________________________________
                     64 x 128 x 48 x 48  
Conv2d                                    4224       True      
ReLU                                                           
Conv2d                                    36992      True      
ReLU                                                           
____________________________________________________________________________
                     64 x 256 x 24 x 24  
MaxPool2d                                                      
____________________________________________________________________________
                     64 x 32 x 24 x 24   
Conv2d                                    8224       True      
ReLU                                                           
____________________________________________________________________________
                     64 x 128 x 24 x 24  
Conv2d                                    4224       True      
ReLU                                                           
Conv2d                                    36992      True      
ReLU                                                           
____________________________________________________________________________
                     64 x 48 x 24 x 24   
Conv2d                                    12336      True      
ReLU                                                           
____________________________________________________________________________
                     64 x 192 x 24 x 24  
Conv2d                                    9408       True      
ReLU                                                           
Conv2d                                    83136      True      
ReLU                                                           
____________________________________________________________________________
                     64 x 48 x 24 x 24   
Conv2d                                    18480      True      
ReLU                                                           
____________________________________________________________________________
                     64 x 192 x 24 x 24  
Conv2d                                    9408       True      
ReLU                                                           
Conv2d                                    83136      True      
ReLU                                                           
____________________________________________________________________________
                     64 x 64 x 24 x 24   
Conv2d                                    24640      True      
ReLU                                                           
____________________________________________________________________________
                     64 x 256 x 24 x 24  
Conv2d                                    16640      True      
ReLU                                                           
Conv2d                                    147712     True      
ReLU                                                           
____________________________________________________________________________
                     64 x 512 x 12 x 12  
MaxPool2d                                                      
____________________________________________________________________________
                     64 x 64 x 12 x 12   
Conv2d                                    32832      True      
ReLU                                                           
____________________________________________________________________________
                     64 x 256 x 12 x 12  
Conv2d                                    16640      True      
ReLU                                                           
Conv2d                                    147712     True      
ReLU                                                           
Dropout                                                        
____________________________________________________________________________
                     64 x 6 x 12 x 12    
Conv2d                                    3078       True      
ReLU                                                           
____________________________________________________________________________
                     64 x 6 x 1 x 1      
AdaptiveAvgPool2d                                              
____________________________________________________________________________

Total params: 738,502
Total trainable params: 738,502
Total non-trainable params: 0

Optimizer used: <function Adam at 0x7eff01058050>
Loss function: FlattenedLoss of CrossEntropyLoss()

Model unfrozen

Callbacks:
  - TrainEvalCallback
  - Recorder
  - ProgressCallback
base_learner.summary()
Sequential (Input shape: 64 x 3 x 200 x 200)
============================================================================
Layer (type)         Output Shape         Param #    Trainable 
============================================================================
                     64 x 64 x 100 x 100 
Conv2d                                    9408       True      
BatchNorm2d                               128        True      
ReLU                                                           
____________________________________________________________________________
                     64 x 64 x 50 x 50   
MaxPool2d                                                      
Conv2d                                    36864      True      
BatchNorm2d                               128        True      
ReLU                                                           
Conv2d                                    36864      True      
BatchNorm2d                               128        True      
Conv2d                                    36864      True      
BatchNorm2d                               128        True      
ReLU                                                           
Conv2d                                    36864      True      
BatchNorm2d                               128        True      
Conv2d                                    36864      True      
BatchNorm2d                               128        True      
ReLU                                                           
Conv2d                                    36864      True      
BatchNorm2d                               128        True      
____________________________________________________________________________
                     64 x 128 x 25 x 25  
Conv2d                                    73728      True      
BatchNorm2d                               256        True      
ReLU                                                           
Conv2d                                    147456     True      
BatchNorm2d                               256        True      
Conv2d                                    8192       True      
BatchNorm2d                               256        True      
Conv2d                                    147456     True      
BatchNorm2d                               256        True      
ReLU                                                           
Conv2d                                    147456     True      
BatchNorm2d                               256        True      
Conv2d                                    147456     True      
BatchNorm2d                               256        True      
ReLU                                                           
Conv2d                                    147456     True      
BatchNorm2d                               256        True      
Conv2d                                    147456     True      
BatchNorm2d                               256        True      
ReLU                                                           
Conv2d                                    147456     True      
BatchNorm2d                               256        True      
____________________________________________________________________________
                     64 x 256 x 13 x 13  
Conv2d                                    294912     True      
BatchNorm2d                               512        True      
ReLU                                                           
Conv2d                                    589824     True      
BatchNorm2d                               512        True      
Conv2d                                    32768      True      
BatchNorm2d                               512        True      
Conv2d                                    589824     True      
BatchNorm2d                               512        True      
ReLU                                                           
Conv2d                                    589824     True      
BatchNorm2d                               512        True      
Conv2d                                    589824     True      
BatchNorm2d                               512        True      
ReLU                                                           
Conv2d                                    589824     True      
BatchNorm2d                               512        True      
Conv2d                                    589824     True      
BatchNorm2d                               512        True      
ReLU                                                           
Conv2d                                    589824     True      
BatchNorm2d                               512        True      
Conv2d                                    589824     True      
BatchNorm2d                               512        True      
ReLU                                                           
Conv2d                                    589824     True      
BatchNorm2d                               512        True      
Conv2d                                    589824     True      
BatchNorm2d                               512        True      
ReLU                                                           
Conv2d                                    589824     True      
BatchNorm2d                               512        True      
____________________________________________________________________________
                     64 x 512 x 7 x 7    
Conv2d                                    1179648    True      
BatchNorm2d                               1024       True      
ReLU                                                           
Conv2d                                    2359296    True      
BatchNorm2d                               1024       True      
Conv2d                                    131072     True      
BatchNorm2d                               1024       True      
Conv2d                                    2359296    True      
BatchNorm2d                               1024       True      
ReLU                                                           
Conv2d                                    2359296    True      
BatchNorm2d                               1024       True      
Conv2d                                    2359296    True      
BatchNorm2d                               1024       True      
ReLU                                                           
Conv2d                                    2359296    True      
BatchNorm2d                               1024       True      
____________________________________________________________________________
                     64 x 512 x 1 x 1    
AdaptiveAvgPool2d                                              
AdaptiveMaxPool2d                                              
____________________________________________________________________________
                     64 x 1024           
Flatten                                                        
BatchNorm1d                               2048       True      
Dropout                                                        
____________________________________________________________________________
                     64 x 512            
Linear                                    524288     True      
ReLU                                                           
BatchNorm1d                               1024       True      
Dropout                                                        
____________________________________________________________________________
                     64 x 6              
Linear                                    3072       True      
____________________________________________________________________________

Total params: 21,815,104
Total trainable params: 21,815,104
Total non-trainable params: 0

Optimizer used: <function Adam at 0x7eff01058050>
Loss function: FlattenedLoss of CrossEntropyLoss()

Model unfrozen

Callbacks:
  - TrainEvalCallback
  - Recorder
  - ProgressCallback

Squeezenet (artigo)

dblock = DataBlock(
    blocks = (ImageBlock(cls = PILImageBW), CategoryBlock),
    get_items = get_image_files,
    get_y = labeler,
    # batch_tfms = aug_transforms(mult= 1.5, flip_vert=True, max_lighting=0.3),
    batch_tfms = [Dihedral(), Flip()],
    splitter = RandomSplitter(1/3, seed=42)
)
dls = dblock.dataloaders(path, bs = 64, num_workers = 10)
class Fire(nn.Module):
    def __init__(self, inplanes: int, squeeze_planes: int, expand1x1_planes: int, expand3x3_planes: int) -> None:
        super(Fire, self).__init__()
        self.inplanes = inplanes
        self.squeeze = nn.Conv2d(inplanes, squeeze_planes, kernel_size=1)
        self.squeeze_activation = nn.ReLU(inplace=True)
        self.expand1x1 = nn.Conv2d(squeeze_planes, expand1x1_planes, kernel_size=1)
        self.expand1x1_activation = nn.ReLU(inplace=True)
        self.expand3x3 = nn.Conv2d(squeeze_planes, expand3x3_planes, kernel_size=3, padding=1)
        self.expand3x3_activation = nn.ReLU(inplace=True)

    def forward(self, x: torch.Tensor) -> torch.Tensor:
        x = self.squeeze_activation(self.squeeze(x))
        return torch.cat(
            [self.expand1x1_activation(self.expand1x1(x)), self.expand3x3_activation(self.expand3x3(x))], 1
        )
num_classes = 6
n_ch = 1
squeezenet_passos = nn.Sequential(
    nn.Conv2d(n_ch, 32, kernel_size=7, stride=2),
    nn.ReLU(inplace=True),
    nn.MaxPool2d(kernel_size=3, stride=2, ceil_mode=True),
    Fire(32, 4, 16, 16),
    Fire(32, 4, 16, 16),
    Fire(32, 8, 32, 32),
    nn.MaxPool2d(kernel_size=3, stride=2, ceil_mode=True),
    Fire(64, 8, 32, 32),
    Fire(64, 12, 48, 48),
    Fire(96, 12, 48, 48),
    Fire(96, 16, 64, 64),
    nn.MaxPool2d(kernel_size=3, stride=2, ceil_mode=True),
    Fire(128, 16, 64, 64),
    nn.Dropout(p=0.5),
    nn.Conv2d(128, num_classes, kernel_size=1),
    nn.ReLU(inplace=True),
    nn.AdaptiveAvgPool2d((1, 1)),
    nn.Flatten()
)

for m in squeezenet_passos.modules():
    if isinstance(m, nn.Conv2d):
        nn.init.kaiming_uniform_(m.weight)
        if m.bias is not None:
            nn.init.constant_(m.bias, 0)

nn.init.normal_(squeezenet_passos[-4].weight, mean=0.0, std=0.01) ;
squeezenet_passos_learner = Learner(dls, squeezenet_passos, metrics = accuracy)

squeezenet_passos_learner.lr_find()
SuggestedLRs(valley=0.00013182566908653826)
squeezenet_passos_learner.fit_one_cycle(50, 1e-4)
epoch train_loss valid_loss accuracy time
0 1.791900 1.791988 0.150000 00:02
1 1.791775 1.791582 0.150000 00:02
2 1.791623 1.790936 0.150000 00:02
3 1.791279 1.789704 0.183333 00:02
4 1.790509 1.785844 0.183333 00:02
5 1.788433 1.772129 0.186111 00:02
6 1.781431 1.741034 0.186111 00:02
7 1.771553 1.720086 0.191667 00:02
8 1.753636 1.659074 0.191667 00:02
9 1.718735 1.582751 0.200000 00:02
10 1.677779 1.525723 0.227778 00:02
11 1.620832 1.391023 0.377778 00:02
12 1.546230 1.308695 0.422222 00:02
13 1.451604 1.106395 0.475000 00:02
14 1.346076 0.948779 0.536111 00:02
15 1.244202 0.922144 0.527778 00:02
16 1.151950 0.855132 0.597222 00:02
17 1.064838 0.804390 0.641667 00:02
18 0.997430 0.752876 0.691667 00:02
19 0.932847 0.759131 0.722222 00:02
20 0.860047 0.629554 0.758333 00:02
21 0.798997 0.603449 0.813889 00:02
22 0.740198 0.601435 0.788889 00:02
23 0.682720 0.599085 0.816667 00:02
24 0.640688 0.479338 0.886111 00:02
25 0.604215 0.572125 0.819444 00:02
26 0.571876 0.435102 0.869444 00:02
27 0.539309 0.413147 0.883333 00:02
28 0.510766 0.478334 0.858333 00:02
29 0.489436 0.441942 0.852778 00:02
30 0.470699 0.387899 0.888889 00:02
31 0.458267 0.419520 0.866667 00:02
32 0.432825 0.415547 0.863889 00:02
33 0.419693 0.418507 0.866667 00:02
34 0.413952 0.358464 0.883333 00:02
35 0.399802 0.381817 0.886111 00:02
36 0.408416 0.348725 0.888889 00:02
37 0.395493 0.333479 0.897222 00:02
38 0.387950 0.380797 0.875000 00:02
39 0.382390 0.393246 0.877778 00:02
40 0.382642 0.376822 0.880556 00:02
41 0.368031 0.339786 0.894444 00:02
42 0.360568 0.407338 0.872222 00:02
43 0.355441 0.343555 0.891667 00:02
44 0.357080 0.371184 0.880556 00:02
45 0.351340 0.353385 0.894444 00:02
46 0.355300 0.364003 0.891667 00:02
47 0.352543 0.368314 0.894444 00:02
48 0.345402 0.367053 0.894444 00:02
49 0.349676 0.366572 0.894444 00:02
squeezenet_passos_learner.recorder.plot_metrics()

ResSqueezeNet (artigo)

class ResSqueezeNetPassos(nn.Module):
    def __init__(self, num_classes: int = 6, dropout: float = 0.5) -> None:
        super().__init__()
        self.num_classes = num_classes
        self.conv1 = nn.Conv2d(1, 32, kernel_size=7, stride=2)
        self.mp1 = nn.MaxPool2d(kernel_size=3, stride=2, ceil_mode=True)
        self.f1 = Fire(32, 4, 16, 16)
        self.f2 = Fire(32, 4, 16, 16)
        self.f3 = Fire(32, 8, 32, 32)
        self.mp2 = nn.MaxPool2d(kernel_size=3, stride=2, ceil_mode=True)
        self.f4 = Fire(64, 8, 32, 32)
        self.f5 = Fire(64, 12, 48, 48)
        self.f6 = Fire(96, 12, 48, 48)
        self.f7 = Fire(96, 16, 64, 64)
        self.mp3 = nn.MaxPool2d(kernel_size=3, stride=2, ceil_mode=True)
        self.f8 = Fire(128, 16, 64, 64)
        final_conv = nn.Conv2d(128, self.num_classes, kernel_size=1)
        self.classifier = nn.Sequential(
            nn.Dropout(p=dropout), final_conv, nn.ReLU(inplace=True), nn.AdaptiveAvgPool2d((1, 1))
        )

        for m in self.modules():
            if isinstance(m, nn.Conv2d):
                if m is final_conv:
                    nn.init.normal_(m.weight, mean=0.0, std=0.01)
                else:
                    nn.init.kaiming_uniform_(m.weight)
                if m.bias is not None:
                    nn.init.constant_(m.bias, 0)

    def forward(self, x: torch.Tensor) -> torch.Tensor:
        x = nn.Sequential(
            self.conv1,
            nn.ReLU(inplace=True),
            self.mp1,
            self.f1
        )(x)
        x = self.f2(x) + x
        x = nn.Sequential(
            self.f3,
            self.mp2
        )(x)
        x = self.f4(x) + x
        x = self.f5(x)
        x = self.f6(x) + x
        x = nn.Sequential(
            self.f7,
            self.mp3
        )(x)
        x = self.f8(x) + x
        x = self.classifier(x)
        return torch.flatten(x, 1)
ressqueezenet_passos_learner = Learner(dls, ResSqueezeNetPassos(), metrics = accuracy)
ressqueezenet_passos_learner.fit_one_cycle(100, 3e-4)
epoch train_loss valid_loss accuracy time
0 1.803072 1.807198 0.156667 00:02
1 1.798336 1.792640 0.156667 00:01
2 1.793250 1.778558 0.156667 00:01
3 1.788431 1.765367 0.156667 00:01
4 1.782662 1.755790 0.156667 00:01
5 1.777332 1.750165 0.271667 00:01
6 1.772359 1.742972 0.286667 00:01
7 1.765739 1.726264 0.390000 00:01
8 1.755395 1.691020 0.453333 00:01
9 1.732128 1.613554 0.393333 00:01
10 1.688152 1.464911 0.343333 00:01
11 1.605122 1.247171 0.466667 00:01
12 1.472738 1.025227 0.613333 00:01
13 1.308919 0.796920 0.746667 00:01
14 1.149675 0.733332 0.725000 00:01
15 1.017071 0.600268 0.758333 00:01
16 0.904640 0.526078 0.820000 00:01
17 0.805589 0.536634 0.828333 00:01
18 0.729077 0.443321 0.823333 00:01
19 0.687559 0.519358 0.741667 00:01
20 0.636512 0.505365 0.823333 00:01
21 0.605051 0.433961 0.833333 00:01
22 0.560536 0.344748 0.890000 00:01
23 0.523100 0.377201 0.875000 00:01
24 0.487854 0.348990 0.898333 00:01
25 0.463896 0.312746 0.903333 00:01
26 0.449684 0.350009 0.895000 00:01
27 0.460322 0.313103 0.890000 00:01
28 0.446005 0.325945 0.906667 00:01
29 0.410402 0.288701 0.898333 00:01
30 0.391862 0.343657 0.886667 00:01
31 0.371900 0.351702 0.891667 00:01
32 0.371173 0.347791 0.883333 00:01
33 0.382457 0.363712 0.875000 00:01
34 0.363582 0.293444 0.906667 00:01
35 0.348279 0.262752 0.915000 00:01
36 0.321681 0.253379 0.930000 00:01
37 0.308520 0.251440 0.933333 00:01
38 0.311584 0.280496 0.905000 00:01
39 0.296189 0.232784 0.928333 00:01
40 0.289960 0.256331 0.916667 00:01
41 0.285229 0.262350 0.928333 00:01
42 0.290730 0.345040 0.881667 00:01
43 0.287286 0.215360 0.931667 00:01
44 0.270833 0.204593 0.935000 00:01
45 0.257251 0.192188 0.941667 00:01
46 0.247839 0.223318 0.936667 00:02
47 0.235811 0.196975 0.935000 00:01
48 0.230695 0.259695 0.908333 00:01
49 0.229419 0.194092 0.928333 00:01
50 0.228610 0.269237 0.908333 00:01
51 0.229168 0.172121 0.951667 00:01
52 0.221312 0.176350 0.948333 00:01
53 0.220383 0.269990 0.896667 00:01
54 0.222094 0.247141 0.925000 00:01
55 0.223976 0.269836 0.905000 00:01
56 0.214664 0.178309 0.946667 00:01
57 0.205079 0.202422 0.935000 00:01
58 0.199331 0.168464 0.948333 00:01
59 0.200643 0.250318 0.910000 00:01
60 0.204680 0.176340 0.951667 00:01
61 0.199009 0.161006 0.950000 00:01
62 0.194183 0.288742 0.916667 00:01
63 0.194596 0.174039 0.940000 00:01
64 0.197789 0.189094 0.936667 00:01
65 0.188060 0.177251 0.950000 00:01
66 0.186816 0.173901 0.946667 00:01
67 0.183516 0.173670 0.940000 00:01
68 0.179931 0.197407 0.945000 00:01
69 0.179673 0.177913 0.943333 00:01
70 0.173193 0.142216 0.960000 00:01
71 0.170666 0.176059 0.948333 00:01
72 0.170354 0.138018 0.963333 00:01
73 0.168197 0.144024 0.958333 00:01
74 0.162371 0.148737 0.951667 00:01
75 0.158917 0.142324 0.958333 00:01
76 0.157264 0.180217 0.948333 00:01
77 0.155334 0.146097 0.956667 00:01
78 0.154176 0.136606 0.961667 00:01
79 0.152948 0.145297 0.958333 00:01
80 0.149063 0.134969 0.963333 00:02
81 0.149257 0.144715 0.958333 00:01
82 0.149718 0.150653 0.953333 00:01
83 0.150473 0.169222 0.955000 00:01
84 0.155219 0.144374 0.960000 00:01
85 0.154493 0.132473 0.963333 00:01
86 0.151574 0.133986 0.960000 00:01
87 0.149089 0.134131 0.960000 00:01
88 0.149381 0.134098 0.958333 00:01
89 0.147147 0.138082 0.961667 00:01
90 0.146902 0.134274 0.960000 00:01
91 0.145153 0.135444 0.961667 00:01
92 0.142515 0.133553 0.963333 00:01
93 0.140086 0.134400 0.961667 00:01
94 0.140473 0.134768 0.961667 00:02
95 0.140447 0.133311 0.963333 00:02
96 0.138581 0.132012 0.961667 00:01
97 0.138237 0.131875 0.961667 00:01
98 0.140701 0.132013 0.961667 00:01
99 0.139985 0.132024 0.961667 00:01
ressqueezenet_passos_learner.recorder.plot_metrics()