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
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 onehoty_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
- LSTM : section 3.1 de https://arxiv.org/pdf/1412.3555v1.pdf (et plus si affinité)
- Utiliser les données et le code : as-tp7.tgz
- Regarder également : http://karpathy.github.io/2015/05/21/rnn-effectiveness
Semaine 8
- Deep Sequential Neural Networks : https://arxiv.org/abs/1410.0510
Semaine 9
- Modèle REINFORCE : http://karpathy.github.io/2016/05/31/rl/
- Pour installer openai/gym:
#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()