as-2017-2018

Semaine 1

  • Petit guide de la back-propagation
  • Travail à faire: Implémentation du Gradient Stochastique sur un perceptron (Module Linéaire + MSE) sur la base https://www.csie.ntu.edu.tw/~cjlin/libsvmtools/datasets/binary/breast-cancer_scale
    • Tracer la courbe du loss en apprentissage
    • Tracer la courbe de l’accuracy en apprentissage et en test
  • Travail à faire (maison): 
    Lisez l’article suivant : http://sebastianruder.com/optimizing-gradient-descent/. Vous rendrez au prochain TP une page ́ecrite donnant une description intuitive et succinte des différents algorithmes de descente de gradient disponibles et de leur grands principes (i.e batch, sgd, adagrad, adadelta, rmsprop, nag et adam)
  • Bout de code pour lire le fichier en libsvm (ca ne marche que pour les dataset sans données manquantes, sinon utiliser : http://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_svmlight_file.html) :
    import numpy as np
    
    def read_libsvm(fname):
        with open(fname) as f:
            x,y  =list(),list()
            for l in f:
                line = l.strip().split(" ")
                y.append(int(line[0]))
                x.append([float(s.split(":")[1]) for s in line[1:]])
        return np.array(x),np.array(y)

Semaine 2

MNIST : Dataset

def load_mnist(filename):
    with open(filename,"r") as f:
        f.readline()
        data =[ [float(x) for x in l.split()] for l in f if len(l.split())>2]
    tmp = np.array(data)
    return tmp[:,1:],tmp[:,0].astype(int)

Semaine 3

Pour importer MNIST sous Torch (https://github.com/pytorch/examples/blob/master/mnist/main.py) :

import torch
from torchvision import datasets, transforms

## une fois le dataset telecharge, mettre download=False !
## Pour le test, train = False
## transform permet de faire un preprocessing des donnees (ici ?)
batch_size=64
nb_digits=10
train_loader = torch.utils.data.DataLoader(datasets.MNIST('../data', train=True, download=True, transform=transforms.Compose([transforms.ToTensor(), transforms.Normalize((0.1307,),(0.3081,))])), batch_size=batch_size, shuffle=True) 
print(train_loader.dataset.train_data.size())

y_onehot = torch.FloatTensor(batch_size, nb_digits) 

for i,(data,target) in enumerate(train_loader):
 print(i,data.size(),data.type(),target.size(),
       target.type()) 
 # do something...
 ## Encoding des labels en onehot
 y_onehot.zero_()
 y_onehot.scatter_(1, target.view(-1,1), 1)

 

Semaine 4

Lien benchmark : http://www.iro.umontreal.ca/~lisa/twiki/bin/view.cgi/Public/DeepVsShallowComparisonICML2007

Semaine 5

Pytorch

Semaine 6

  • Highway networks
  • Reproducibility Challenge
    • Travail à faire: Choisir un article.

Semaine 7

Semaine 8

Semaine 9

#desinstaller pyglet si version!= 1.2.4 (bug avec version 1.3)
pip uninstall --user pyglet
pip install --user pyglet==1.2.4 gym atari-py
#test
python3 -c "import gym;env=gym.make("Pong-v0");env.render();"
  • Pour prendre en main gym :
import gym
env = gym.make('Pong-v0') #charge l'environement
env.reset()  # reinitialiser le jeu
env.render() # afficher l'etat du jeu
env.action_space # liste des actions possibles
env.unwrapped.get_action_meanings() # signification des actions
observation, reward, done, info = env.step(1) # joue l'action 1
# et recoit l'observation (matrice) et le reward

## code de  http://karpathy.github.io/2016/05/31/rl/ pour
## preprocesser une image du jeu (scale down, monochrome)
def prepro(I):
  """ preprocessing 210x160x3 uint8 frame into 6400 (80x80) 1D float vector """
  I = I[35:195] # crop
  I = I[::2,::2,0] # downsample by factor of 2
  I[I == 144] = 0 # erase background (background type 1)
  I[I == 109] = 0 # erase background (background type 2)
  I[I != 0] = 1 # everything else (paddles, ball) just set to 1
  return I.astype(np.float).ravel()