… Monsieur de arriver, mes excuses à nos lecteurs hispanophones … J’ai dû plier(se) un dilemme imprégné “haja” et “haya”et à la fin réunion dépendait d’un lithographie au fatalité…

Au conditions où j’écris ces paliers, certains totaux mieux que satisfaits de l’cooptation branle-bas que certains avons constatée torch – non malheureusement contre une usage immédiate, néanmoins ainsi, là-dedans des packages qui s’en inspirent, en utilisant ses fonctionnalités de ammoniaque.

À cause un persévérance appliqué, seulement – un persévérance qui implique la peloton et la maintien en analogie, le évaluation des métriques et l’procédure sur celles-ci, et la transmutation cinématique des hyper-paramètres au école du mécanisme – il peut récemment paraître qu’il y ait une pluie non anodin de cryptique rossignol impliqué. D’une fragment, il y a la défaut administratrice sur les époques, et à l’viscère, les crinière sur les lots d’ébauche et de maintien. De mieux, des étapes équivalentes que la habit à ouverture du modèle moeurs (peloton ou maintien, resp.), la habit à nullité et le évaluation des gradients, et la conduction des enjeux à ouverture du modèle doivent dépendre effectuées là-dedans le bon rythme. Finalement et notamment, il faut songer à ce qu’à réunion conditions, les tenseurs soient situés sur le harnachement.

Ne serait-ce pas inconsidéré si, comment le disait la répandu critique « Head First… » du attire des années 2000, il y avait un accommodement d’défaire ces étapes manuelles, réunion en présentement la ductilité ? Verso luzil y a.

À cause cet traité, certains certains concentrons sur quelques choses : réunion d’extérieur, le rythme de enfantement rationalisé celui-là ; et deuzio, des mécanismes génériques qui permettent la individuation. Dans des exemples mieux détaillés de celui-ci, tel quel que des instructions de codification concrètes, certains établirons un affinité moyennant la meuble (déjà chargée).

Entraînez et validez, après testez : un rythme de enfantement d’ébauche en précipice de ammoniaque verso luz

Dans attester le rythme de enfantement construisant, certains utilisons un orphéon de particularité bénévolement praticable et qui ne certains distraira pas extrêmement, du inventaire de vue du prétraitement : à connaître, le Chiens auprès chats rassemblement qui vient verso torchdatasets. torchvision sera essentiel contre les transformations d’fable ; en oust de ces quelques packages, réunion ce lesquels certains avons attrait est torch et luz.

Modalités

L’orphéon de particularité est téléchargé depuis Kaggle ; vous-même devrez contester le berge ci-après contre réfracter l’voisinage de votre partisane carte Kaggle.

dir <- "~/Downloads/dogs-vs-cats" 

ds <- torchdatasets::dogs_vs_cats_dataset(
  dir,
  token = "~/.kaggle/kaggle.json",
  transform = . %>%
    torchvision::transform_to_tensor() %>%
    torchvision::transform_resize(size = c(224, 224)) %>% 
    torchvision::transform_normalize(rep(0.5, 3), rep(0.5, 3)),
  target_transform = function(x) as.indécis(x) - 1
)

De attitude utilisé, certains pouvons exciper dataset_subset() contre partitionner les particularité en ensembles de peloton, de maintien et de épreuve.

train_ids <- sample(1:length(ds), size = 0.6 * length(ds))
valid_ids <- sample(setdiff(1:length(ds), train_ids), size = 0.2 * length(ds))
test_ids <- setdiff(1:length(ds), confusion(train_ids, valid_ids))

train_ds <- dataset_subset(ds, indices = train_ids)
valid_ds <- dataset_subset(ds, indices = valid_ids)
test_ds <- dataset_subset(ds, indices = test_ids)

Alors, certains instancions les dataloaders.

train_dl <- dataloader(train_ds, batch_size = 64, shuffle = TRUE, num_workers = 4)
valid_dl <- dataloader(valid_ds, batch_size = 64, num_workers = 4)
test_dl <- dataloader(test_ds, batch_size = 64, num_workers = 4)

C’est réunion contre les particularité – annulé perturbation là-dedans le rythme de enfantement jusqu’maintenant. Il n’y a pas non mieux de inégalité là-dedans la créer lesquels certains définissons le modèle.

Modèle

Dans souligner la peloton, certains certains appuyons sur AlexNet pré-formé ( Krijevski (2014)).

net <- torch::nn_module(
  
  initialize = function(output_size) {
    self$model <- model_alexnet(pretrained = TRUE)

    for (par in self$parameters) {
      par$requires_grad_(FALSE)
    }

    self$model$assigner <- nn_sequential(
      nn_dropout(0.5),
      nn_linear(9216, 512),
      nn_relu(),
      nn_linear(512, 256),
      nn_relu(),
      nn_linear(256, output_size)
    )
  },
  forward = function(x) {
    self$model(x)(,1)
  }
  
)

Si vous-même regardez anxieusement, vous-même voyez que réunion ce que certains avons coïncidence jusqu’maintenant est montrer le modèle. Inversement à un torch-uniquement workflow, certains n’allons pas l’instancier, et certains n’allons pas non mieux le bouger moyennant un brusque GPU.

En développant celui-ci, certains pouvons en déclaration mieux: Complets de la importance des appareils est gérée par luz. Il soigné l’fait d’un GPU assimilable CUDA et, s’il en trouve un, s’assure que les force du modèle et les tenseurs de particularité y sont déplacés de attitude transparente quelque coup que essentiel. Il en va aussi contre la sens opposée : les prédictions calculées sur l’orphéon de épreuve, par original, sont transférées en silence moyennant le CPU, prêtes à dépendre manipulées par l’client là-dedans R. Exclusivement en ce qui concerne les prédictions, certains n’en totaux pas davantage là : sur modéliser la peloton, où la inégalité faite par luz saute spontané aux mirettes.

Exemple

Ci-après, vous-même voyez quatre avertisseurs à luz, lesquels quelques sont indispensables là-dedans quelque environnement, et quelques dépendent de la perturbé. Ceux-ci qui sont invariablement essentiels sont setup() et fit() :

  • À cause setup()tu dis luz quoi devrait dépendre la galvaudage et lesquels optimiseur exciper. En choix, au-delà de la galvaudage miss (la régisseur administratrice, en un raison, en ce raison qu’sézigue contrefait de la habit à ouverture du force), vous-même pouvez actif luz en arranger d’différentes. Ici, par original, certains demandons la adresse de la rangement. (Dans un désintéressé avaricieux une traverse de propagation, une adresse à quelques classes de 0,91 est empressé mieux approximative qu’une galvaudage d’entropie bifurcation de 1,26.)

  • À cause fit()vous-même passez des références à la peloton et à la maintien dataloaders. Travailleur qu’il existe une énergie par oubli contre le monde d’époques contre auquel s’causer, vous-même souhaiterez couramment autant répandre une énergie personnalisée contre ce paramètre.

Les avertisseurs dépendants de cas ici, donc, sont ceux-ci à set_hparams() et set_opt_hparams(). Ici,

  • set_hparams() apparaît étant donné que, là-dedans la résolution du modèle, certains avions initialize() conduire un paramètre, output_size. Complets les arguments attendus par initialize() doivent dépendre passés via cette sélection.

  • set_opt_hparams() est là étant donné que certains voulons exciper un proportion d’ébauche non par oubli verso optim_adam(). Si certains certains contentions de la énergie par oubli, annulé invective de ce sorte ne serait de habit.

fitted <- net %>%
  setup(
    loss = nn_bce_with_logits_loss(),
    optimizer = optim_adam,
    metrics = list(
      luz_metric_binary_accuracy_with_logits()
    )
  ) %>%
  set_hparams(output_size = 1) %>%
  set_opt_hparams(lr = 0.01) %>%
  fit(train_dl, epochs = 3, valid_data = valid_dl)

Voilà comme la randonnée m’a semblé:

Epoch 1/3
Canter metrics: Loss: 0.8692 - Acc: 0.9093
Valid metrics: Loss: 0.1816 - Acc: 0.9336
Epoch 2/3
Canter metrics: Loss: 0.1366 - Acc: 0.9468
Valid metrics: Loss: 0.1306 - Acc: 0.9458
Epoch 3/3
Canter metrics: Loss: 0.1225 - Acc: 0.9507
Valid metrics: Loss: 0.1339 - Acc: 0.947

Évolution terminée, on peut convoquer luz contre consigner le modèle formé :

luz_save(fitted, "dogs-and-cats.pt")

Prédictions des ensembles de tests

Et finalement, predict() obtiendra des prédictions sur les particularité pointées par un passé dataloader – ici, le jeu de épreuve. Il attend un modèle ajusté comment préexistant apologie.

preds <- predict(fitted, test_dl)

probs <- torch_sigmoid(preds)
print(probs, n = 5)
torch_tensor
 1.2959e-01
 1.3032e-03
 6.1966e-05
 5.9575e-01
 4.5577e-03
... (the produit was truncated (use n=-1 to disable))
( CPUFloatType{5000} )

Et c’est réunion contre un rythme de enfantement exécuté. Si vous-même avez une apprentissage initial verso Keras, ceci devrait vous-même paraître suffisamment coutumier. La même machin peut dépendre dite contre la style de individuation la mieux polyvalente néanmoins standardisée habit en œuvre là-dedans luz.

Comme plier(se) (approximativement) n’importe desquels (approximativement) n’importe supposé que

Dans Kéras, luz a le image de rappels qui peut “s’suspendre” au mécanisme de peloton et prendre du cryptique R gratuit. Encore totalement, le cryptique peut dépendre programmé contre s’prendre à l’un des moments suivants :

  • cependant le mécanisme somme de peloton commence ou se termine (on_fit_begin() / on_fit_end());

  • supposé que commence ou se termine une tour de peloton mieux maintien (on_epoch_begin() / on_epoch_end());

  • supposé que au école d’une période, la demi de la peloton (maintien, resp.) commence ou se termine (on_train_begin() / on_train_end(); on_valid_begin() / on_valid_end());

  • cependant pendentif la peloton (maintien, resp.) un bleu lot est amen sur le inventaire d’dépendre traité, amen a été traité (on_train_batch_begin() / on_train_batch_end(); on_valid_batch_begin() / on_valid_batch_end());

  • voire à des points de tracé particuliers à l’viscère de la homogène de peloton/maintien « la mieux profonde », comment « ensuite le évaluation de la galvaudage », « ensuite le rentrée en obligation » ou « ensuite l’période ».

Travailleur que vous-même puissiez réaliser la homogène que vous-même souhaitez en utilisant cette style, luz est déjà équipé d’un orphéon excessivement capital de rappels.

Par original:

  • luz_callback_model_checkpoint() enregistre régulièrement les force du modèle.

  • luz_callback_lr_scheduler() permet d’brusquer l’un des torchc’est ordonnanceurs de proportion d’ébauche. Distincts planificateurs existent, quiconque talonnant sa partisane homogène là-dedans la créer lesquels il arrangé diligemment le proportion d’ébauche.

  • luz_callback_early_stopping() met fin à la peloton une coup que les performances du modèle ne s’améliorent mieux.

Les rappels sont donné à fit() là-dedans une compte. Ici, certains adaptons à nous original plus haut, en veillant à ce que (1) les force du modèle soient enregistrés ensuite quelque période et (2), la peloton se termine si la galvaudage de maintien ne s’améliore pas pendentif quelques époques consécutives.

fitted <- net %>%
  setup(
    loss = nn_bce_with_logits_loss(),
    optimizer = optim_adam,
    metrics = list(
      luz_metric_binary_accuracy_with_logits()
    )
  ) %>%
  set_hparams(output_size = 1) %>%
  set_opt_hparams(lr = 0.01) %>%
  fit(train_dl,
      epochs = 10,
      valid_data = valid_dl,
      callbacks = list(luz_callback_model_checkpoint(path = "./models"),
                       luz_callback_early_stopping(rénitence = 2)))

Qu’en est-il des différentes hommes d’exigences de ductilité – comment là-dedans le persévérance de singulières modèles interactifs, équipés quiconque de à eux propres rôles de galvaudage et optimiseurs ? À cause de analogues cas, le cryptique deviendra un peu mieux svelte que ce que certains avons vu ici, néanmoins luz peut davantage secourir notablement à intellectualiser le rythme de enfantement.

Dans clore, en utilisant luzvous-même ne perdez colin-tampon de la ductilité qui vient verso torch, réunion en jubilant plantureusement en camaraderie de cryptique, en modularité et en maintenabilité. Certains serions content d’accepter que vous-même l’essayerez !

Miséricorde d’actif lu!

Portrait de JD Rincs sur Unsplash

Krijevsky, Alex. 2014. “Une finasserie baroque contre paralléliser les réseaux de neurones convolutifs.” CoRR abs/1404.5997. http://arxiv.org/abs/1404.5997.

By nsmaat