Image Classification w/ Convolutional Neural Networks


In [1]:
%reload_ext autoreload
%autoreload 2
%matplotlib inline

In [2]:
from fastai.imports import *

from fastai.transforms import *
from fastai.conv_learner import *
from fastai.model import *
from fastai.dataset import *
from fastai.sgdr import *
from fastai.plots import *

In [3]:
PATH = "data/dogscats/"
sz=224
ARCH = vgg16
bs = 16

In [4]:
# Uncomment if need to reset precomputed activations
!rm -rf {PATH}tmp

In [5]:
data = ImageClassifierData.from_paths(PATH, bs=bs, tfms=tfms_from_model(ARCH, sz))

In [6]:
learn = ConvLearner.pretrained(ARCH, data, precompute=True)


100%|██████████| 1438/1438 [15:03<00:00,  1.59it/s]
100%|██████████| 125/125 [01:18<00:00,  1.59it/s]

In [7]:
learn.fit(0.01, 3, cycle_len=1)


[ 0.       0.06847  0.0261   0.99   ]                            
[ 1.       0.06455  0.02697  0.9915 ]                            
[ 2.       0.05759  0.02748  0.9895 ]                            


In [8]:
tfms = tfms_from_model(ARCH, sz, aug_tfms=transforms_side_on, max_zoom=1.1)

In [9]:
data = ImageClassifierData.from_paths(PATH, tfms=tfms, bs=bs, num_workers=4)
learn = ConvLearner.pretrained(ARCH, data, precompute=True)

In [10]:
learn.fit(lrs=1e-2, n_cycle=2)


[ 0.       0.07261  0.03247  0.989  ]                            
[ 1.       0.07956  0.0285   0.9885 ]                            

Process Process-173:
Process Process-153:
Process Process-160:
Process Process-175:
Process Process-159:
Process Process-157:
Process Process-172:
Process Process-174:
Process Process-155:
Process Process-176:
Process Process-170:
Process Process-158:
Process Process-156:
Process Process-171:
Traceback (most recent call last):
Traceback (most recent call last):
Traceback (most recent call last):
Process Process-154:
Traceback (most recent call last):
Traceback (most recent call last):
Traceback (most recent call last):
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/multiprocessing/process.py", line 258, in _bootstrap
    self.run()
Traceback (most recent call last):
Traceback (most recent call last):
Traceback (most recent call last):
Process Process-169:
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/multiprocessing/process.py", line 258, in _bootstrap
    self.run()
Traceback (most recent call last):
Traceback (most recent call last):
Traceback (most recent call last):
Traceback (most recent call last):
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/multiprocessing/process.py", line 258, in _bootstrap
    self.run()
Traceback (most recent call last):
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/multiprocessing/process.py", line 258, in _bootstrap
    self.run()
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/multiprocessing/process.py", line 258, in _bootstrap
    self.run()
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/multiprocessing/process.py", line 258, in _bootstrap
    self.run()
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/multiprocessing/process.py", line 258, in _bootstrap
    self.run()
Traceback (most recent call last):
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/multiprocessing/process.py", line 93, in run
    self._target(*self._args, **self._kwargs)
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/multiprocessing/process.py", line 258, in _bootstrap
    self.run()
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/multiprocessing/process.py", line 93, in run
    self._target(*self._args, **self._kwargs)
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/multiprocessing/process.py", line 258, in _bootstrap
    self.run()
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/multiprocessing/process.py", line 258, in _bootstrap
    self.run()
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/multiprocessing/process.py", line 93, in run
    self._target(*self._args, **self._kwargs)
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/multiprocessing/process.py", line 93, in run
    self._target(*self._args, **self._kwargs)
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/multiprocessing/process.py", line 258, in _bootstrap
    self.run()
Traceback (most recent call last):
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/site-packages/torch/utils/data/dataloader.py", line 34, in _worker_loop
    r = index_queue.get()
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/multiprocessing/process.py", line 258, in _bootstrap
    self.run()
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/multiprocessing/process.py", line 258, in _bootstrap
    self.run()
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/multiprocessing/process.py", line 258, in _bootstrap
    self.run()
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/multiprocessing/process.py", line 258, in _bootstrap
    self.run()
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/site-packages/torch/utils/data/dataloader.py", line 34, in _worker_loop
    r = index_queue.get()
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/site-packages/torch/utils/data/dataloader.py", line 34, in _worker_loop
    r = index_queue.get()
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/multiprocessing/process.py", line 93, in run
    self._target(*self._args, **self._kwargs)
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/multiprocessing/process.py", line 93, in run
    self._target(*self._args, **self._kwargs)
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/multiprocessing/process.py", line 93, in run
    self._target(*self._args, **self._kwargs)
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/multiprocessing/process.py", line 93, in run
    self._target(*self._args, **self._kwargs)
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/multiprocessing/process.py", line 258, in _bootstrap
    self.run()
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/multiprocessing/process.py", line 93, in run
    self._target(*self._args, **self._kwargs)
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/multiprocessing/process.py", line 93, in run
    self._target(*self._args, **self._kwargs)
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/site-packages/torch/utils/data/dataloader.py", line 34, in _worker_loop
    r = index_queue.get()
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/multiprocessing/queues.py", line 334, in get
    with self._rlock:
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/multiprocessing/process.py", line 93, in run
    self._target(*self._args, **self._kwargs)
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/multiprocessing/queues.py", line 334, in get
    with self._rlock:
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/multiprocessing/process.py", line 93, in run
    self._target(*self._args, **self._kwargs)
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/multiprocessing/queues.py", line 334, in get
    with self._rlock:
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/multiprocessing/process.py", line 93, in run
    self._target(*self._args, **self._kwargs)
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/site-packages/torch/utils/data/dataloader.py", line 34, in _worker_loop
    r = index_queue.get()
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/site-packages/torch/utils/data/dataloader.py", line 34, in _worker_loop
    r = index_queue.get()
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/site-packages/torch/utils/data/dataloader.py", line 34, in _worker_loop
    r = index_queue.get()
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/multiprocessing/synchronize.py", line 96, in __enter__
    return self._semlock.__enter__()
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/multiprocessing/process.py", line 93, in run
    self._target(*self._args, **self._kwargs)
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/site-packages/torch/utils/data/dataloader.py", line 34, in _worker_loop
    r = index_queue.get()
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/multiprocessing/queues.py", line 334, in get
    with self._rlock:
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/multiprocessing/process.py", line 93, in run
    self._target(*self._args, **self._kwargs)
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/site-packages/torch/utils/data/dataloader.py", line 34, in _worker_loop
    r = index_queue.get()
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/multiprocessing/process.py", line 93, in run
    self._target(*self._args, **self._kwargs)
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/site-packages/torch/utils/data/dataloader.py", line 34, in _worker_loop
    r = index_queue.get()
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/multiprocessing/synchronize.py", line 96, in __enter__
    return self._semlock.__enter__()
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/site-packages/torch/utils/data/dataloader.py", line 34, in _worker_loop
    r = index_queue.get()
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/site-packages/torch/utils/data/dataloader.py", line 34, in _worker_loop
    r = index_queue.get()
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/multiprocessing/synchronize.py", line 96, in __enter__
    return self._semlock.__enter__()
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/site-packages/torch/utils/data/dataloader.py", line 34, in _worker_loop
    r = index_queue.get()
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/multiprocessing/queues.py", line 334, in get
    with self._rlock:
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/multiprocessing/queues.py", line 334, in get
    with self._rlock:
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/site-packages/torch/utils/data/dataloader.py", line 34, in _worker_loop
    r = index_queue.get()
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/multiprocessing/queues.py", line 334, in get
    with self._rlock:
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/multiprocessing/queues.py", line 334, in get
    with self._rlock:
KeyboardInterrupt
KeyboardInterrupt
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/multiprocessing/queues.py", line 335, in get
    res = self._reader.recv_bytes()
KeyboardInterrupt
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/multiprocessing/synchronize.py", line 96, in __enter__
    return self._semlock.__enter__()
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/site-packages/torch/utils/data/dataloader.py", line 34, in _worker_loop
    r = index_queue.get()
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/site-packages/torch/utils/data/dataloader.py", line 34, in _worker_loop
    r = index_queue.get()
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/multiprocessing/queues.py", line 334, in get
    with self._rlock:
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/multiprocessing/synchronize.py", line 96, in __enter__
    return self._semlock.__enter__()
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/multiprocessing/synchronize.py", line 96, in __enter__
    return self._semlock.__enter__()
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/multiprocessing/queues.py", line 334, in get
    with self._rlock:
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/multiprocessing/queues.py", line 335, in get
    res = self._reader.recv_bytes()
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/multiprocessing/queues.py", line 334, in get
    with self._rlock:
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/multiprocessing/connection.py", line 216, in recv_bytes
    buf = self._recv_bytes(maxlength)
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/multiprocessing/synchronize.py", line 96, in __enter__
    return self._semlock.__enter__()
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/multiprocessing/synchronize.py", line 96, in __enter__
    return self._semlock.__enter__()
KeyboardInterrupt
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/multiprocessing/queues.py", line 334, in get
    with self._rlock:
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/multiprocessing/synchronize.py", line 96, in __enter__
    return self._semlock.__enter__()
KeyboardInterrupt
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/multiprocessing/synchronize.py", line 96, in __enter__
    return self._semlock.__enter__()
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/multiprocessing/queues.py", line 334, in get
    with self._rlock:
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/multiprocessing/connection.py", line 216, in recv_bytes
    buf = self._recv_bytes(maxlength)
KeyboardInterrupt
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/multiprocessing/connection.py", line 407, in _recv_bytes
    buf = self._recv(4)
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/multiprocessing/connection.py", line 407, in _recv_bytes
    buf = self._recv(4)
KeyboardInterrupt
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/multiprocessing/synchronize.py", line 96, in __enter__
    return self._semlock.__enter__()
KeyboardInterrupt
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/multiprocessing/synchronize.py", line 96, in __enter__
    return self._semlock.__enter__()
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/multiprocessing/queues.py", line 334, in get
    with self._rlock:
KeyboardInterrupt
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/multiprocessing/connection.py", line 379, in _recv
    chunk = read(handle, remaining)
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/multiprocessing/synchronize.py", line 96, in __enter__
    return self._semlock.__enter__()
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/multiprocessing/synchronize.py", line 96, in __enter__
    return self._semlock.__enter__()
KeyboardInterrupt
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/multiprocessing/connection.py", line 379, in _recv
    chunk = read(handle, remaining)
KeyboardInterrupt
KeyboardInterrupt
KeyboardInterrupt
KeyboardInterrupt
KeyboardInterrupt
KeyboardInterrupt

In [11]:
learn.save('vgg16_00')  # just in case I run out of memory below

In [12]:
learn.precompute=False

In [13]:
learn.fit(lrs=1e-2, n_cycle=1, cycle_len=1)


[ 0.       0.07925  0.02445  0.9915 ]                           


In [14]:
learn.save('vgg16_01')

In [15]:
learn.unfreeze()
learn.data.bs = 4 # training ConvNets takes lots of Memory, cut down bs to prevent crashes

In [16]:
lr = np.array([1e-4, 1e-3, 1e-2])

In [17]:
learn.fit(lrs=lr, n_cycle=1, cycle_len=1)


[ 0.       0.05629  0.02633  0.9895 ]                           


In [18]:
learn.save('vgg16_02')

In [19]:
learn.lr_find()


 49%|████▉     | 703/1438 [26:39<27:51,  2.27s/it, loss=0.169]  

In [20]:
learn.fit(lrs=lr, n_cycle=3, cycle_len=1, cycle_mult=2)


                                                              
                                                              
                                                              


                                                              
                                                              
                                                              
                                                              

                                                              
  0%|          | 1/1438 [00:02<1:02:04,  2.59s/it, loss=0.0509]
Exception in thread Thread-17:
Traceback (most recent call last):
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/threading.py", line 916, in _bootstrap_inner
    self.run()
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/site-packages/tqdm/_tqdm.py", line 144, in run
    for instance in self.tqdm_cls._instances:
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/_weakrefset.py", line 60, in __iter__
    for itemref in self.data:
RuntimeError: Set changed size during iteration
Exception in thread Thread-18:
Traceback (most recent call last):
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/threading.py", line 916, in _bootstrap_inner
    self.run()
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/site-packages/tqdm/_tqdm.py", line 144, in run
    for instance in self.tqdm_cls._instances:
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/_weakrefset.py", line 60, in __iter__
    for itemref in self.data:
RuntimeError: Set changed size during iteration


[ 0.       0.06606  0.01941  0.9915 ]                           
[ 1.       0.05361  0.01942  0.9925 ]                           
[ 2.       0.05388  0.02059  0.992  ]                           
[ 3.       0.03414  0.01717  0.9935 ]                           
[ 4.       0.03753  0.01917  0.9935 ]                           
[ 5.       0.02662  0.01835  0.9915 ]                           
[ 6.       0.02923  0.01714  0.994  ]                           


In [21]:
learn.save('vgg16_03')

In [22]:
learn.fit(lrs=lr, n_cycle=3, cycle_len=3)


[ 0.       0.04341  0.02105  0.9925 ]                            
[ 1.       0.03357  0.01846  0.9935 ]                           
[ 2.       0.01419  0.01638  0.9935 ]                           
[ 3.       0.0328   0.02254  0.9915 ]                           
[ 4.       0.02156  0.02388  0.991  ]                           
[ 5.       0.03275  0.01733  0.992  ]                           
[ 6.       0.0315   0.01816  0.995  ]                           
 56%|█████▌    | 808/1438 [30:35<23:51,  2.27s/it, loss=0.0171] 
Process Process-439:
Process Process-438:
Process Process-445:
Process Process-448:
Process Process-447:
Process Process-437:
Process Process-446:
Process Process-440:
Traceback (most recent call last):
Traceback (most recent call last):
Traceback (most recent call last):
Traceback (most recent call last):
Traceback (most recent call last):
Traceback (most recent call last):
Traceback (most recent call last):
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/multiprocessing/process.py", line 258, in _bootstrap
    self.run()
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/multiprocessing/process.py", line 258, in _bootstrap
    self.run()
Traceback (most recent call last):
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/multiprocessing/process.py", line 258, in _bootstrap
    self.run()
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/multiprocessing/process.py", line 258, in _bootstrap
    self.run()
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/multiprocessing/process.py", line 258, in _bootstrap
    self.run()
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/multiprocessing/process.py", line 258, in _bootstrap
    self.run()
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/multiprocessing/process.py", line 93, in run
    self._target(*self._args, **self._kwargs)
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/multiprocessing/process.py", line 93, in run
    self._target(*self._args, **self._kwargs)
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/multiprocessing/process.py", line 93, in run
    self._target(*self._args, **self._kwargs)
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/multiprocessing/process.py", line 258, in _bootstrap
    self.run()
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/multiprocessing/process.py", line 258, in _bootstrap
    self.run()
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/multiprocessing/process.py", line 93, in run
    self._target(*self._args, **self._kwargs)
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/multiprocessing/process.py", line 93, in run
    self._target(*self._args, **self._kwargs)
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/site-packages/torch/utils/data/dataloader.py", line 34, in _worker_loop
    r = index_queue.get()
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/multiprocessing/process.py", line 93, in run
    self._target(*self._args, **self._kwargs)
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/multiprocessing/process.py", line 93, in run
    self._target(*self._args, **self._kwargs)
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/site-packages/torch/utils/data/dataloader.py", line 34, in _worker_loop
    r = index_queue.get()
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/multiprocessing/process.py", line 93, in run
    self._target(*self._args, **self._kwargs)
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/site-packages/torch/utils/data/dataloader.py", line 34, in _worker_loop
    r = index_queue.get()
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/site-packages/torch/utils/data/dataloader.py", line 34, in _worker_loop
    r = index_queue.get()
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/site-packages/torch/utils/data/dataloader.py", line 34, in _worker_loop
    r = index_queue.get()
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/site-packages/torch/utils/data/dataloader.py", line 34, in _worker_loop
    r = index_queue.get()
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/site-packages/torch/utils/data/dataloader.py", line 34, in _worker_loop
    r = index_queue.get()
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/multiprocessing/queues.py", line 334, in get
    with self._rlock:
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/multiprocessing/queues.py", line 335, in get
    res = self._reader.recv_bytes()
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/site-packages/torch/utils/data/dataloader.py", line 34, in _worker_loop
    r = index_queue.get()
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/multiprocessing/queues.py", line 334, in get
    with self._rlock:
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/multiprocessing/queues.py", line 334, in get
    with self._rlock:
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/multiprocessing/queues.py", line 334, in get
    with self._rlock:
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/multiprocessing/queues.py", line 335, in get
    res = self._reader.recv_bytes()
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/multiprocessing/queues.py", line 334, in get
    with self._rlock:
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/multiprocessing/queues.py", line 334, in get
    with self._rlock:
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/multiprocessing/synchronize.py", line 96, in __enter__
    return self._semlock.__enter__()
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/multiprocessing/synchronize.py", line 96, in __enter__
    return self._semlock.__enter__()
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/multiprocessing/connection.py", line 216, in recv_bytes
    buf = self._recv_bytes(maxlength)
KeyboardInterrupt
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/multiprocessing/synchronize.py", line 96, in __enter__
    return self._semlock.__enter__()
KeyboardInterrupt
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/multiprocessing/synchronize.py", line 96, in __enter__
    return self._semlock.__enter__()
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/multiprocessing/synchronize.py", line 96, in __enter__
    return self._semlock.__enter__()
KeyboardInterrupt
KeyboardInterrupt
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/multiprocessing/connection.py", line 407, in _recv_bytes
    buf = self._recv(4)
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/multiprocessing/connection.py", line 216, in recv_bytes
    buf = self._recv_bytes(maxlength)
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/multiprocessing/synchronize.py", line 96, in __enter__
    return self._semlock.__enter__()
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/multiprocessing/connection.py", line 379, in _recv
    chunk = read(handle, remaining)
KeyboardInterrupt
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/multiprocessing/connection.py", line 407, in _recv_bytes
    buf = self._recv(4)
KeyboardInterrupt
KeyboardInterrupt
  File "/home/wnixalo/miniconda3/envs/fastai/lib/python3.6/multiprocessing/connection.py", line 379, in _recv
    chunk = read(handle, remaining)
KeyboardInterrupt
---------------------------------------------------------------------------
KeyboardInterrupt                         Traceback (most recent call last)
<ipython-input-22-4c1112fad01e> in <module>()
----> 1 learn.fit(lrs=lr, n_cycle=3, cycle_len=3)

~/Kaukasos/FADL1/fastai/learner.py in fit(self, lrs, n_cycle, wds, **kwargs)
     95         self.sched = None
     96         layer_opt = self.get_layer_opt(lrs, wds)
---> 97         self.fit_gen(self.model, self.data, layer_opt, n_cycle, **kwargs)
     98 
     99     def lr_find(self, start_lr=1e-5, end_lr=10, wds=None):

~/Kaukasos/FADL1/fastai/learner.py in fit_gen(self, model, data, layer_opt, n_cycle, cycle_len, cycle_mult, cycle_save_name, metrics, callbacks, **kwargs)
     85         n_epoch = sum_geom(cycle_len if cycle_len else 1, cycle_mult, n_cycle)
     86         fit(model, data, n_epoch, layer_opt.opt, self.crit,
---> 87             metrics=metrics, callbacks=callbacks, reg_fn=self.reg_fn, clip=self.clip, **kwargs)
     88 
     89     def get_layer_groups(self): return self.models.get_layer_groups()

~/Kaukasos/FADL1/fastai/model.py in fit(model, data, epochs, opt, crit, metrics, callbacks, **kwargs)
     82         for (*x,y) in t:
     83             batch_num += 1
---> 84             loss = stepper.step(V(x),V(y))
     85             avg_loss = avg_loss * avg_mom + loss * (1-avg_mom)
     86             debias_loss = avg_loss / (1 - avg_mom**batch_num)

~/Kaukasos/FADL1/fastai/model.py in step(self, xs, y)
     47             nn.utils.clip_grad_norm(trainable_params_(self.m), self.clip)
     48         self.opt.step()
---> 49         return raw_loss.data[0]
     50 
     51     def evaluate(self, xs, y):

KeyboardInterrupt: 

In [23]:
learn.save('vgg16_04')

Testing

Above training stopped midway through 8th epoch. Time for testing:


In [2]:
%reload_ext autoreload
%autoreload 2
%matplotlib inline

from fastai.imports import *

from fastai.transforms import *
from fastai.conv_learner import *
from fastai.model import *
from fastai.dataset import *
from fastai.sgdr import *
from fastai.plots import *

In [3]:
PATH = "data/dogscats/"
sz=224
ARCH = vgg16
bs = 16

In [4]:
data = ImageClassifierData.from_paths(PATH, bs=bs, tfms=tfms_from_model(ARCH, sz), 
                                      test_name = 'test1')

In [5]:
# No reason to precompute activations as I'm running a single prediction run on the test set
# Also, since I trained all ConvLayers earlier... where will it know how to compute
# the activations if I haven't loaded the weights yet?
learn = ConvLearner.pretrained(ARCH, data, precompute=False)

In [11]:
# the test data set
len(learn.data.test_dl.dataset)


Out[11]:
12500

In [16]:
learn.load('vgg16_04')

In [21]:
# This took about 32 minutes
log_preds = learn.TTA(n_aug=4, is_test=True)[0]


                                              

Experimenting with saving as Pandas.DataFrame.to_feather(.)


In [28]:
log_preds_df = pd.DataFrame(log_preds, columns=['dog','cat'])

In [30]:
log_preds_df.to_feather(PATH + 'results/' + 'log_preds')

In [34]:
# log_preds_df = pd.read_feather(PATH + 'results/' + 'log_preds')

In [44]:
test_preds = np.exp(log_preds)

In [70]:
ids = [f[6:-4] for f in learn.data.test_dl.dataset.fnames]

In [71]:
preds = [np.argmax(pred) for pred in test_preds]

In [72]:
submission = pd.DataFrame({'id': ids, 'label': preds})

Another way to create submission file:


In [67]:
submission = pd.DataFrame(preds)
submission.columns = ['label']

In [68]:
submission.insert(0, 'id', ids)

In [69]:
submission.head()


Out[69]:
id label
0 9323 1
1 10291 1
2 7641 1
3 10707 1
4 9769 1

Creating FileLink:


In [73]:
submission.to_csv(PATH + 'subm/' + 'submission_vgg16_04.gz', compression='gzip', index=False)

In [74]:
FileLink(PATH + 'subm/' + 'submission_vgg16_04.gz')






In [2]:
%reload_ext autoreload
%autoreload 2
%matplotlib inline

from fastai.imports import *

from fastai.transforms import *
from fastai.conv_learner import *
from fastai.model import *
from fastai.dataset import *
from fastai.sgdr import *
from fastai.plots import *

In [3]:
PATH = "data/dogscats/"
sz=224
ARCH = vgg16
bs = 16

In [4]:
data = ImageClassifierData.from_paths(PATH, bs=bs, tfms=tfms_from_model(ARCH, sz), 
                                      test_name = 'test1')

In [5]:
# No reason to precompute activations as I'm running a single prediction run on the test set
# Also, since I trained all ConvLayers earlier... where will it know how to compute
# the activations if I haven't loaded the weights yet?
learn = ConvLearner.pretrained(ARCH, data, precompute=False)

In [6]:
learn.load('vgg16_04')

In [8]:
log_preds, y = learn.TTA()
accuracy(log_preds, y)


                                             
Out[8]:
0.99250000000000005

In [30]:
df = pd.read_feather(PATH + 'results/' + 'log_preds')

In [31]:
df.head()


Out[31]:
dog cat
0 -12.523960 -3.814697e-06
1 -12.315853 -4.291534e-06
2 -13.236661 -1.907349e-06
3 -14.695811 -4.768372e-07
4 -8.130127 -2.944469e-04

In [32]:
preds = np.array(list(zip(*(df['dog'],df['cat']))))

In [41]:
preds = np.exp(preds)

In [42]:
preds = [np.argmax(pred) for pred in preds]

In [48]:
new_preds = [int(i==0) for i in preds]

In [49]:
new_preds[:10]


Out[49]:
[0, 0, 0, 0, 0, 1, 1, 0, 1, 0]

In [52]:
ids = [f[6:-4] for f in learn.data.test_dl.dataset.fnames]
submission = pd.DataFrame({'id': ids, 'label': new_preds})

In [53]:
submission.to_csv(PATH + 'subm/' + 'submission_vgg16_04_wtf.gz', compression='gzip', index=False)
FileLink(PATH + 'subm/' + 'submission_vgg16_04_wtf.gz')





In [55]:
log_preds_df = np.array(list(zip(*(df['dog'],df['cat']))))

In [57]:
test_preds = np.exp(log_preds_df)

In [59]:
test_preds = np.clip(test_preds, 0.05, 0.95)

In [66]:
data.classes


Out[66]:
['cats', 'dogs']

In [67]:
labels = test_preds[:,1]

In [68]:
labels[:10]


Out[68]:
array([ 0.95   ,  0.95   ,  0.95   ,  0.95   ,  0.95   ,  0.05   ,  0.05   ,  0.95   ,  0.05   ,  0.87402])

In [64]:
learn.data.test_dl.dataset.fnames


Out[64]:
<fastai.dataset.FilesIndexArrayDataset at 0x7fe13684a630>

In [69]:
ids = [f[6:-4] for f in learn.data.test_dl.dataset.fnames]
submission = pd.DataFrame({'id': ids, 'label': labels})

In [71]:
submission.to_csv(PATH + 'subm/' + 'submission_vgg16_04_omg.csv.gz', compression='gzip', index=False)
FileLink(PATH + 'subm/' + 'submission_vgg16_04_omg.csv.gz')





This model took roughly 10 ~ 14 hours to train on a GTX870M / Intel Core i7 machine. It achieved a score of 0.07389 when clipped to [0.05:0.95] @ 201/1314 place.


In [ ]: