AS-2018-2019

Cours

TME

Semaine 1

 

Pour lire les données MNIST :

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)
  • Travail à faire (maison): 
    Lisez l’article suivant : http://ruder.io/optimizing-gradient-descent/. Vous rendrez au TP  4 une page ́ 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)

Semaine 2

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

Semaine 4

Semaine 6

  • Pour ne pas avoir à télécharger tous les modules python (torchtext, nltk, spacy, tensorboard, tensorboardx), dans votre console (python3.5 ou python3.6 selon les versions):
export PYTHONPATH=$PYTHONPATH:/users/Enseignants/baskiotis/.local/lib/python3.5/site-packages
  • Pour charger les données avec les word embedding :
import logging
import torchtext.datasets as datasets
import torchtext.data as data
import torchtext
import torch.nn as nn

logging.basicConfig()
logger = logging.getLogger(« model »)
logger.setLevel(level=logging.DEBUG)
DATA_DIR="/users/Enseignants/baskiotis/AS"

DATASET_DIR="%s/datasets" % DATA_DIR
VECTORS_DIR="%s/vectors" % DATA_DIR

# text
TEXT=data.Field(lower=True,include_lengths=False,batch_first=True)
LABEL = data.Field(sequential=False, is_target=True)

# make splits for data
train, val, test = datasets.sst.SST.splits(TEXT, LABEL,root=DATASET_DIR)

# Use the vocabulary
wordemb = torchtext.vocab.GloVe("6B", dim=100, cache=VECTORS_DIR)
# Build the vocabularies
# for labels, we use special_first to False so <unk> is last
# (to discard it)
TEXT.build_vocab(train, vectors=wordemb)
LABEL.build_vocab(train, specials_first=False)
train_iter, val_iter, test_iter = data.BucketIterator.splits(
(train, val, test), batch_size=10, device=0)

nn_embeddings = nn.Embedding.from_pretrained(TEXT.vocab.vectors)

Semaine 7

Semaine 8

Semaine 9

Semaine 11 : AE, VAE

import sys
sys.path.insert(0, Path("~piwowarski/.local/lib/python%d.%d/site-packages" % (sys.version_info.major, sys.version_info.minor)))
import torchtext
import torchtext.datasets as datasets
import torchtext.data as ttdata
import spacy
from pathlib import Path

device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
# Répertoires de stockage des données 
DATA_DIR=Path("/users/Enseignants/piwowarski/torchtextdata")
DATASET_DIR=DATA_DIR.joinpath("datasets")
VECTORS_DIR=DATA_DIR.joinpath("vectors")
wordsemb_dim = 100
wordsemb = torchtext.vocab.GloVe("6B", dim=wordsemb_dim, cache=VECTORS_DIR)
TOKENIZER="spacy"
TEXT=ttdata.Field(lower=True,include_lengths=False,batch_first=False,tokenize=TOKENIZER)
LABEL = ttdata.Field(sequential=False, is_target=True)
train, val, test = datasets.babi.BABI20.splits(TEXT, task=1)
TEXT.build_vocab(train, vectors=wordsemb)
text_wordemb = nn.Embedding.from_pretrained(TEXT.vocab.vectors).to(device)

"Vocabulary size: %d words" % len(TEXT.vocab)
train.examples[0].story, train.examples[0].query, train.examples[0].answer
train_it, val_it, test_it = ttdata.BucketIterator.splits((train, val, test), batch_size=32)
batch = next(iter(train_it))