From e2c6a265ea3ab472d656bf2a837c510aaf1a1521 Mon Sep 17 00:00:00 2001 From: GitHub Actions Date: Tue, 7 Dec 2021 20:35:58 +0000 Subject: [PATCH] Built site for torch: 0.6.1.9000@474b4b1 --- dev/404.html | 217 - dev/CONTRIBUTING.html | 278 -- dev/LICENSE-text.html | 125 +- dev/LICENSE.html | 125 +- dev/articles/distributions.html | 70 +- dev/articles/examples/basic-autograd.html | 28 +- .../anchor-sections-1.0/anchor-sections.css | 4 - .../anchor-sections-1.0/anchor-sections.js | 33 - dev/articles/examples/basic-nn-module.html | 92 +- .../anchor-sections-1.0/anchor-sections.css | 4 - .../anchor-sections-1.0/anchor-sections.js | 33 - dev/articles/examples/dataset.html | 88 +- .../anchor-sections-1.0/anchor-sections.css | 4 - .../anchor-sections-1.0/anchor-sections.js | 33 - dev/articles/examples/index.html | 20 +- .../anchor-sections-1.0/anchor-sections.css | 4 - .../anchor-sections-1.0/anchor-sections.js | 33 - dev/articles/examples/mnist-cnn.html | 260 - .../empty-anchor.js | 15 - dev/articles/examples/mnist-dcgan.html | 341 -- .../empty-anchor.js | 15 - dev/articles/examples/mnist-mlp.html | 248 - .../empty-anchor.js | 15 - dev/articles/extending-autograd.html | 42 +- .../anchor-sections-1.0/anchor-sections.css | 4 - .../anchor-sections-1.0/anchor-sections.js | 33 - dev/articles/getting-started/assets/mnist.png | Bin 42703 -> 0 bytes dev/articles/getting-started/autograd.html | 369 -- .../empty-anchor.js | 15 - .../anchor-sections-1.0/anchor-sections.css | 4 - .../anchor-sections-1.0/anchor-sections.js | 33 - .../control-flow-and-weight-sharing.html | 321 -- .../empty-anchor.js | 15 - .../anchor-sections-1.0/anchor-sections.css | 4 - .../anchor-sections-1.0/anchor-sections.js | 33 - dev/articles/getting-started/custom-nn.html | 305 -- .../empty-anchor.js | 15 - .../anchor-sections-1.0/anchor-sections.css | 4 - .../anchor-sections-1.0/anchor-sections.js | 33 - .../getting-started/neural-networks.html | 431 -- .../empty-anchor.js | 15 - .../anchor-sections-1.0/anchor-sections.css | 4 - .../anchor-sections-1.0/anchor-sections.js | 33 - .../new-autograd-functions.html | 313 -- .../empty-anchor.js | 15 - .../anchor-sections-1.0/anchor-sections.css | 4 - .../anchor-sections-1.0/anchor-sections.js | 33 - dev/articles/getting-started/nn.html | 296 -- .../empty-anchor.js | 15 - .../anchor-sections-1.0/anchor-sections.css | 4 - .../anchor-sections-1.0/anchor-sections.js | 33 - dev/articles/getting-started/optim.html | 298 -- .../empty-anchor.js | 15 - .../anchor-sections-1.0/anchor-sections.css | 4 - .../anchor-sections-1.0/anchor-sections.js | 33 - .../getting-started/tensors-and-autograd.html | 291 -- .../empty-anchor.js | 15 - .../anchor-sections-1.0/anchor-sections.css | 4 - .../anchor-sections-1.0/anchor-sections.js | 33 - dev/articles/getting-started/tensors.html | 276 - .../empty-anchor.js | 15 - .../anchor-sections-1.0/anchor-sections.css | 4 - .../anchor-sections-1.0/anchor-sections.js | 33 - dev/articles/getting-started/warmup.html | 269 - .../empty-anchor.js | 15 - .../anchor-sections-1.0/anchor-sections.css | 4 - .../anchor-sections-1.0/anchor-sections.js | 33 - .../getting-started/what-is-torch.html | 426 -- .../empty-anchor.js | 15 - .../anchor-sections-1.0/anchor-sections.css | 4 - .../anchor-sections-1.0/anchor-sections.js | 33 - dev/articles/index.html | 183 +- dev/articles/indexing.html | 108 +- .../anchor-sections-1.0/anchor-sections.css | 4 - .../anchor-sections-1.0/anchor-sections.js | 33 - dev/articles/installation.html | 110 +- .../anchor-sections-1.0/anchor-sections.css | 4 - .../anchor-sections-1.0/anchor-sections.js | 33 - dev/articles/loading-data.html | 106 +- .../anchor-sections-1.0/anchor-sections.css | 4 - .../anchor-sections-1.0/anchor-sections.js | 33 - dev/articles/python-to-r.html | 26 +- dev/articles/serialization.html | 54 +- .../anchor-sections-1.0/anchor-sections.css | 4 - .../anchor-sections-1.0/anchor-sections.js | 33 - dev/articles/tensor-creation.html | 64 +- .../anchor-sections-1.0/anchor-sections.css | 4 - .../anchor-sections-1.0/anchor-sections.js | 33 - dev/articles/tensor/index.html | 3166 ++++++------ .../anchor-sections-1.0/anchor-sections.css | 4 - .../anchor-sections-1.0/anchor-sections.js | 33 - dev/articles/torchscript.html | 228 +- dev/articles/using-autograd.html | 76 +- .../anchor-sections-1.0/anchor-sections.css | 4 - .../anchor-sections-1.0/anchor-sections.js | 33 - dev/authors.html | 212 +- dev/index.html | 112 +- dev/news/index.html | 827 ++- dev/pkgdown.css | 83 +- dev/pkgdown.js | 4 +- dev/pkgdown.yml | 14 +- dev/reference/AutogradContext.html | 317 +- dev/reference/Constraint.html | 209 +- dev/reference/Distribution.html | 520 +- dev/reference/as_array.html | 146 +- dev/reference/autograd_backward.html | 215 +- dev/reference/autograd_function.html | 194 +- dev/reference/autograd_grad.html | 255 +- dev/reference/autograd_set_grad_mode.html | 146 +- dev/reference/backends_mkl_is_available.html | 138 +- .../backends_mkldnn_is_available.html | 138 +- .../backends_openmp_is_available.html | 138 +- dev/reference/broadcast_all.html | 155 +- dev/reference/call_torch_function.html | 193 + dev/reference/contrib_sort_vertices.html | 196 +- dev/reference/cuda_current_device.html | 133 +- dev/reference/cuda_device_count.html | 133 +- dev/reference/cuda_get_device_capability.html | 146 +- dev/reference/cuda_is_available.html | 133 +- dev/reference/dataloader.html | 291 +- dev/reference/dataloader_make_iter.html | 146 +- dev/reference/dataloader_next.html | 152 +- dev/reference/dataset.html | 212 +- dev/reference/dataset_subset.html | 152 +- dev/reference/default_dtype.html | 150 +- dev/reference/dependent.html | 277 -- dev/reference/distr_bernoulli.html | 201 +- dev/reference/distr_categorical.html | 195 +- dev/reference/distr_chi2.html | 199 +- dev/reference/distr_gamma.html | 199 +- dev/reference/distr_mixture_same_family.html | 198 +- dev/reference/distr_multivariate_normal.html | 239 +- dev/reference/distr_normal.html | 211 +- dev/reference/distr_poisson.html | 191 +- dev/reference/enumerate.dataloader.html | 160 +- dev/reference/enumerate.html | 152 +- dev/reference/figures/torch-full.png | Bin 1697283 -> 0 bytes dev/reference/get_install_libs_url.html | 152 +- dev/reference/index.html | 4431 ++++++++--------- dev/reference/install_torch.html | 195 +- dev/reference/install_torch_from_file.html | 187 +- dev/reference/is_dataloader.html | 146 +- dev/reference/is_nn_buffer.html | 146 +- dev/reference/is_nn_module.html | 146 +- dev/reference/is_nn_parameter.html | 146 +- dev/reference/is_optimizer.html | 146 +- dev/reference/is_torch_device.html | 146 +- dev/reference/is_torch_dtype.html | 146 +- dev/reference/is_torch_layout.html | 146 +- dev/reference/is_torch_memory_format.html | 146 +- dev/reference/is_torch_qscheme.html | 146 +- dev/reference/is_undefined_tensor.html | 146 +- dev/reference/jit_compile.html | 194 +- dev/reference/jit_load.html | 154 +- dev/reference/jit_save.html | 192 +- dev/reference/jit_save_for_mobile.html | 196 +- dev/reference/jit_scalar.html | 148 +- dev/reference/jit_trace.html | 231 +- dev/reference/jit_trace_module.html | 199 +- dev/reference/jit_tuple.html | 148 +- dev/reference/linalg_cholesky.html | 262 +- dev/reference/linalg_cholesky_ex.html | 264 +- dev/reference/linalg_cond.html | 221 +- dev/reference/linalg_det.html | 236 +- dev/reference/linalg_eig.html | 264 +- dev/reference/linalg_eigh.html | 307 +- dev/reference/linalg_eigvals.html | 232 +- dev/reference/linalg_eigvalsh.html | 262 +- dev/reference/linalg_householder_product.html | 257 +- dev/reference/linalg_inv.html | 245 +- dev/reference/linalg_inv_ex.html | 232 +- dev/reference/linalg_lstsq.html | 286 +- dev/reference/linalg_matrix_norm.html | 302 +- dev/reference/linalg_matrix_power.html | 240 +- dev/reference/linalg_matrix_rank.html | 253 +- dev/reference/linalg_multi_dot.html | 242 +- dev/reference/linalg_norm.html | 291 +- dev/reference/linalg_pinv.html | 278 +- dev/reference/linalg_qr.html | 264 +- dev/reference/linalg_slogdet.html | 254 +- dev/reference/linalg_solve.html | 250 +- dev/reference/linalg_svd.html | 316 +- dev/reference/linalg_svdvals.html | 236 +- dev/reference/linalg_tensorinv.html | 266 +- dev/reference/linalg_tensorsolve.html | 267 +- dev/reference/linalg_vector_norm.html | 295 +- dev/reference/load_state_dict.html | 160 +- dev/reference/logits_to_probs.html | 238 - dev/reference/lr_lambda.html | 210 +- dev/reference/lr_multiplicative.html | 206 +- dev/reference/lr_one_cycle.html | 336 +- dev/reference/lr_scheduler.html | 178 +- dev/reference/lr_step.html | 208 +- dev/reference/nn_adaptive_avg_pool1d.html | 172 +- dev/reference/nn_adaptive_avg_pool2d.html | 180 +- dev/reference/nn_adaptive_avg_pool3d.html | 180 +- .../nn_adaptive_log_softmax_with_loss.html | 230 +- dev/reference/nn_adaptive_max_pool1d.html | 180 +- dev/reference/nn_adaptive_max_pool2d.html | 188 +- dev/reference/nn_adaptive_max_pool3d.html | 188 +- dev/reference/nn_avg_pool1d.html | 233 +- dev/reference/nn_avg_pool2d.html | 244 +- dev/reference/nn_avg_pool3d.html | 244 +- dev/reference/nn_batch_norm1d.html | 242 +- dev/reference/nn_batch_norm2d.html | 242 +- dev/reference/nn_batch_norm3d.html | 242 +- dev/reference/nn_bce_loss.html | 199 +- dev/reference/nn_bce_with_logits_loss.html | 223 +- dev/reference/nn_bilinear.html | 214 +- dev/reference/nn_buffer.html | 152 +- dev/reference/nn_celu.html | 189 +- dev/reference/nn_contrib_sparsemax.html | 155 +- dev/reference/nn_conv1d.html | 290 +- dev/reference/nn_conv2d.html | 299 +- dev/reference/nn_conv3d.html | 282 +- dev/reference/nn_conv_transpose1d.html | 290 +- dev/reference/nn_conv_transpose2d.html | 323 +- dev/reference/nn_conv_transpose3d.html | 301 +- dev/reference/nn_cosine_embedding_loss.html | 163 +- dev/reference/nn_cross_entropy_loss.html | 207 +- dev/reference/nn_ctc_loss.html | 270 +- dev/reference/nn_dropout.html | 191 +- dev/reference/nn_dropout2d.html | 195 +- dev/reference/nn_dropout3d.html | 195 +- dev/reference/nn_elu.html | 187 +- dev/reference/nn_embedding.html | 287 +- dev/reference/nn_fractional_max_pool2d.html | 205 +- dev/reference/nn_fractional_max_pool3d.html | 215 +- dev/reference/nn_gelu.html | 170 +- dev/reference/nn_glu.html | 178 +- dev/reference/nn_group_norm.html | 224 +- dev/reference/nn_gru.html | 282 +- dev/reference/nn_hardshrink.html | 181 +- dev/reference/nn_hardsigmoid.html | 168 +- dev/reference/nn_hardswish.html | 176 +- dev/reference/nn_hardtanh.html | 195 +- dev/reference/nn_hinge_embedding_loss.html | 171 +- dev/reference/nn_identity.html | 172 +- dev/reference/nn_init_calculate_gain.html | 152 +- dev/reference/nn_init_constant_.html | 182 +- dev/reference/nn_init_dirac_.html | 178 +- dev/reference/nn_init_eye_.html | 178 +- dev/reference/nn_init_kaiming_normal_.html | 210 +- dev/reference/nn_init_kaiming_uniform_.html | 210 +- dev/reference/nn_init_normal_.html | 188 +- dev/reference/nn_init_ones_.html | 176 +- dev/reference/nn_init_orthogonal_.html | 184 +- dev/reference/nn_init_sparse_.html | 184 +- dev/reference/nn_init_trunc_normal_.html | 200 +- dev/reference/nn_init_uniform_.html | 188 +- dev/reference/nn_init_xavier_normal_.html | 184 +- dev/reference/nn_init_xavier_uniform_.html | 184 +- dev/reference/nn_init_zeros_.html | 176 +- dev/reference/nn_kl_div_loss.html | 174 +- dev/reference/nn_l1_loss.html | 189 +- dev/reference/nn_layer_norm.html | 224 +- dev/reference/nn_leaky_relu.html | 187 +- dev/reference/nn_linear.html | 204 +- dev/reference/nn_log_sigmoid.html | 165 +- dev/reference/nn_log_softmax.html | 188 +- dev/reference/nn_lp_pool1d.html | 219 +- dev/reference/nn_lp_pool2d.html | 230 +- dev/reference/nn_lstm.html | 290 +- dev/reference/nn_margin_ranking_loss.html | 197 +- dev/reference/nn_max_pool1d.html | 233 +- dev/reference/nn_max_pool2d.html | 240 +- dev/reference/nn_max_pool3d.html | 244 +- dev/reference/nn_max_unpool1d.html | 249 +- dev/reference/nn_max_unpool2d.html | 237 +- dev/reference/nn_max_unpool3d.html | 219 +- dev/reference/nn_module.html | 269 +- dev/reference/nn_module_list.html | 186 +- dev/reference/nn_mse_loss.html | 189 +- dev/reference/nn_multi_margin_loss.html | 177 +- dev/reference/nn_multihead_attention.html | 261 +- dev/reference/nn_multilabel_margin_loss.html | 195 +- .../nn_multilabel_soft_margin_loss.html | 173 +- dev/reference/nn_nll_loss.html | 237 +- dev/reference/nn_pairwise_distance.html | 201 +- dev/reference/nn_parameter.html | 154 +- dev/reference/nn_poisson_nll_loss.html | 223 +- dev/reference/nn_prelu.html | 206 +- dev/reference/nn_relu.html | 186 +- dev/reference/nn_relu6.html | 181 +- dev/reference/nn_rnn.html | 424 +- dev/reference/nn_rrelu.html | 204 +- dev/reference/nn_selu.html | 183 +- dev/reference/nn_sequential.html | 182 +- dev/reference/nn_sigmoid.html | 168 +- dev/reference/nn_smooth_l1_loss.html | 165 +- dev/reference/nn_soft_margin_loss.html | 165 +- dev/reference/nn_softmax.html | 195 +- dev/reference/nn_softmax2d.html | 170 +- dev/reference/nn_softmin.html | 190 +- dev/reference/nn_softplus.html | 189 +- dev/reference/nn_softshrink.html | 181 +- dev/reference/nn_softsign.html | 165 +- dev/reference/nn_tanh.html | 168 +- dev/reference/nn_tanhshrink.html | 168 +- dev/reference/nn_threshold.html | 193 +- dev/reference/nn_triplet_margin_loss.html | 235 +- .../nn_triplet_margin_with_distance_loss.html | 287 +- dev/reference/nn_utils_clip_grad_norm_.html | 169 +- dev/reference/nn_utils_clip_grad_value_.html | 159 +- .../nn_utils_rnn_pack_padded_sequence.html | 195 +- dev/reference/nn_utils_rnn_pack_sequence.html | 188 +- .../nn_utils_rnn_pad_packed_sequence.html | 251 +- dev/reference/nn_utils_rnn_pad_sequence.html | 199 +- dev/reference/nnf_adaptive_avg_pool1d.html | 154 +- dev/reference/nnf_adaptive_avg_pool2d.html | 154 +- dev/reference/nnf_adaptive_avg_pool3d.html | 154 +- dev/reference/nnf_adaptive_max_pool1d.html | 160 +- dev/reference/nnf_adaptive_max_pool2d.html | 160 +- dev/reference/nnf_adaptive_max_pool3d.html | 160 +- dev/reference/nnf_affine_grid.html | 179 +- dev/reference/nnf_alpha_dropout.html | 166 +- dev/reference/nnf_avg_pool1d.html | 202 +- dev/reference/nnf_avg_pool2d.html | 212 +- dev/reference/nnf_avg_pool3d.html | 212 +- dev/reference/nnf_batch_norm.html | 208 +- dev/reference/nnf_bilinear.html | 178 +- dev/reference/nnf_binary_cross_entropy.html | 180 +- .../nnf_binary_cross_entropy_with_logits.html | 190 +- dev/reference/nnf_celu.html | 164 +- dev/reference/nnf_contrib_sparsemax.html | 161 +- dev/reference/nnf_conv1d.html | 208 +- dev/reference/nnf_conv2d.html | 208 +- dev/reference/nnf_conv3d.html | 208 +- dev/reference/nnf_conv_tbc.html | 170 +- dev/reference/nnf_conv_transpose1d.html | 216 +- dev/reference/nnf_conv_transpose2d.html | 216 +- dev/reference/nnf_conv_transpose3d.html | 216 +- dev/reference/nnf_cosine_embedding_loss.html | 188 +- dev/reference/nnf_cosine_similarity.html | 171 +- dev/reference/nnf_cross_entropy.html | 194 +- dev/reference/nnf_ctc_loss.html | 206 +- dev/reference/nnf_dropout.html | 168 +- dev/reference/nnf_dropout2d.html | 168 +- dev/reference/nnf_dropout3d.html | 168 +- dev/reference/nnf_elu.html | 192 +- dev/reference/nnf_embedding.html | 215 +- dev/reference/nnf_embedding_bag.html | 242 +- dev/reference/nnf_fold.html | 205 +- dev/reference/nnf_fractional_max_pool2d.html | 201 +- dev/reference/nnf_fractional_max_pool3d.html | 201 +- dev/reference/nnf_gelu.html | 155 +- dev/reference/nnf_glu.html | 159 +- dev/reference/nnf_grid_sample.html | 209 +- dev/reference/nnf_group_norm.html | 170 +- dev/reference/nnf_gumbel_softmax.html | 166 +- dev/reference/nnf_hardshrink.html | 154 +- dev/reference/nnf_hardsigmoid.html | 154 +- dev/reference/nnf_hardswish.html | 161 +- dev/reference/nnf_hardtanh.html | 170 +- dev/reference/nnf_hinge_embedding_loss.html | 170 +- dev/reference/nnf_instance_norm.html | 208 +- dev/reference/nnf_interpolate.html | 207 +- dev/reference/nnf_kl_div.html | 162 +- dev/reference/nnf_l1_loss.html | 162 +- dev/reference/nnf_layer_norm.html | 186 +- dev/reference/nnf_leaky_relu.html | 162 +- dev/reference/nnf_linear.html | 160 +- dev/reference/nnf_local_response_norm.html | 172 +- dev/reference/nnf_log_softmax.html | 167 +- dev/reference/nnf_logsigmoid.html | 148 +- dev/reference/nnf_lp_pool1d.html | 174 +- dev/reference/nnf_lp_pool2d.html | 174 +- dev/reference/nnf_margin_ranking_loss.html | 176 +- dev/reference/nnf_max_pool1d.html | 210 +- dev/reference/nnf_max_pool2d.html | 210 +- dev/reference/nnf_max_pool3d.html | 210 +- dev/reference/nnf_max_unpool1d.html | 190 +- dev/reference/nnf_max_unpool2d.html | 190 +- dev/reference/nnf_max_unpool3d.html | 190 +- dev/reference/nnf_mse_loss.html | 162 +- .../nnf_multi_head_attention_forward.html | 352 +- dev/reference/nnf_multi_margin_loss.html | 196 +- dev/reference/nnf_multilabel_margin_loss.html | 164 +- .../nnf_multilabel_soft_margin_loss.html | 180 +- dev/reference/nnf_nll_loss.html | 192 +- dev/reference/nnf_normalize.html | 175 +- dev/reference/nnf_one_hot.html | 163 +- dev/reference/nnf_pad.html | 176 +- dev/reference/nnf_pairwise_distance.html | 172 +- dev/reference/nnf_pdist.html | 161 +- dev/reference/nnf_pixel_shuffle.html | 154 +- dev/reference/nnf_poisson_nll_loss.html | 198 +- dev/reference/nnf_prelu.html | 156 +- dev/reference/nnf_relu.html | 156 +- dev/reference/nnf_relu6.html | 154 +- dev/reference/nnf_rrelu.html | 176 +- dev/reference/nnf_selu.html | 186 +- dev/reference/nnf_sigmoid.html | 148 +- dev/reference/nnf_smooth_l1_loss.html | 164 +- dev/reference/nnf_soft_margin_loss.html | 164 +- dev/reference/nnf_softmax.html | 165 +- dev/reference/nnf_softmin.html | 169 +- dev/reference/nnf_softplus.html | 165 +- dev/reference/nnf_softshrink.html | 156 +- dev/reference/nnf_softsign.html | 148 +- dev/reference/nnf_tanhshrink.html | 148 +- dev/reference/nnf_threshold.html | 170 +- dev/reference/nnf_triplet_margin_loss.html | 212 +- ...nnf_triplet_margin_with_distance_loss.html | 206 +- dev/reference/nnf_unfold.html | 181 +- dev/reference/optim_adadelta.html | 210 +- dev/reference/optim_adagrad.html | 208 +- dev/reference/optim_adam.html | 231 +- dev/reference/optim_asgd.html | 223 +- dev/reference/optim_lbfgs.html | 230 +- dev/reference/optim_required.html | 133 +- dev/reference/optim_rmsprop.html | 214 +- dev/reference/optim_rprop.html | 199 +- dev/reference/optim_sgd.html | 228 +- dev/reference/optimizer.html | 291 +- dev/reference/pipe.html | 133 +- dev/reference/probs_to_logits.html | 238 - dev/reference/reexports.html | 139 +- dev/reference/slc.html | 188 +- dev/reference/tensor_dataset.html | 146 +- dev/reference/threads.html | 164 +- dev/reference/torch_abs.html | 175 +- dev/reference/torch_absolute.html | 153 +- dev/reference/torch_acos.html | 181 +- dev/reference/torch_acosh.html | 186 +- dev/reference/torch_adaptive_avg_pool1d.html | 159 +- dev/reference/torch_add.html | 212 +- dev/reference/torch_addbmm.html | 205 +- dev/reference/torch_addcdiv.html | 210 +- dev/reference/torch_addcmul.html | 200 +- dev/reference/torch_addmm.html | 203 +- dev/reference/torch_addmv.html | 203 +- dev/reference/torch_addr.html | 205 +- dev/reference/torch_allclose.html | 197 +- dev/reference/torch_amax.html | 205 +- dev/reference/torch_amin.html | 207 +- dev/reference/torch_angle.html | 169 +- dev/reference/torch_arange.html | 233 +- dev/reference/torch_arccos.html | 153 +- dev/reference/torch_arccosh.html | 153 +- dev/reference/torch_arcsin.html | 153 +- dev/reference/torch_arcsinh.html | 153 +- dev/reference/torch_arctan.html | 153 +- dev/reference/torch_arctanh.html | 153 +- dev/reference/torch_argmax.html | 208 +- dev/reference/torch_argmin.html | 204 +- dev/reference/torch_argsort.html | 193 +- dev/reference/torch_as_strided.html | 210 +- dev/reference/torch_asin.html | 181 +- dev/reference/torch_asinh.html | 181 +- dev/reference/torch_atan.html | 181 +- dev/reference/torch_atan2.html | 187 +- dev/reference/torch_atanh.html | 186 +- dev/reference/torch_atleast_1d.html | 200 +- dev/reference/torch_atleast_2d.html | 200 +- dev/reference/torch_atleast_3d.html | 148 +- dev/reference/torch_avg_pool1d.html | 197 +- dev/reference/torch_baddbmm.html | 261 +- dev/reference/torch_bartlett_window.html | 204 +- dev/reference/torch_bernoulli.html | 203 +- dev/reference/torch_bincount.html | 202 +- dev/reference/torch_bitwise_and.html | 157 +- dev/reference/torch_bitwise_not.html | 151 +- dev/reference/torch_bitwise_or.html | 157 +- dev/reference/torch_bitwise_xor.html | 157 +- dev/reference/torch_blackman_window.html | 204 +- dev/reference/torch_block_diag.html | 198 +- dev/reference/torch_bmm.html | 250 +- dev/reference/torch_broadcast_tensors.html | 181 +- dev/reference/torch_bucketize.html | 207 +- dev/reference/torch_can_cast.html | 175 +- dev/reference/torch_cartesian_prod.html | 188 +- dev/reference/torch_cat.html | 189 +- dev/reference/torch_cdist.html | 169 +- dev/reference/torch_ceil.html | 181 +- dev/reference/torch_celu.html | 159 +- dev/reference/torch_celu_.html | 159 +- dev/reference/torch_chain_matmul.html | 183 +- dev/reference/torch_channel_shuffle.html | 245 +- dev/reference/torch_cholesky.html | 199 +- dev/reference/torch_cholesky_inverse.html | 185 +- dev/reference/torch_cholesky_solve.html | 201 +- dev/reference/torch_chunk.html | 163 +- dev/reference/torch_clamp.html | 223 +- dev/reference/torch_clip.html | 165 +- dev/reference/torch_clone.html | 162 +- dev/reference/torch_combinations.html | 201 +- dev/reference/torch_complex.html | 183 +- dev/reference/torch_conj.html | 167 +- dev/reference/torch_conv1d.html | 289 +- dev/reference/torch_conv2d.html | 291 +- dev/reference/torch_conv3d.html | 225 +- dev/reference/torch_conv_tbc.html | 169 +- dev/reference/torch_conv_transpose1d.html | 297 +- dev/reference/torch_conv_transpose2d.html | 299 +- dev/reference/torch_conv_transpose3d.html | 233 +- dev/reference/torch_cos.html | 181 +- dev/reference/torch_cosh.html | 181 +- dev/reference/torch_cosine_similarity.html | 255 +- dev/reference/torch_count_nonzero.html | 191 +- dev/reference/torch_cross.html | 199 +- dev/reference/torch_cummax.html | 231 +- dev/reference/torch_cummin.html | 231 +- dev/reference/torch_cumprod.html | 205 +- dev/reference/torch_cumsum.html | 205 +- dev/reference/torch_deg2rad.html | 177 +- dev/reference/torch_dequantize.html | 156 +- dev/reference/torch_det.html | 192 +- dev/reference/torch_device.html | 190 +- dev/reference/torch_diag.html | 167 +- dev/reference/torch_diag_embed.html | 228 +- dev/reference/torch_diagflat.html | 207 +- dev/reference/torch_diagonal.html | 241 +- dev/reference/torch_diff.html | 219 +- dev/reference/torch_digamma.html | 175 +- dev/reference/torch_dist.html | 197 +- dev/reference/torch_div.html | 219 +- dev/reference/torch_divide.html | 170 +- dev/reference/torch_dot.html | 182 +- dev/reference/torch_dstack.html | 197 +- dev/reference/torch_dtype.html | 167 +- dev/reference/torch_eig.html | 166 +- dev/reference/torch_einsum.html | 205 +- dev/reference/torch_empty.html | 217 +- dev/reference/torch_empty_like.html | 217 +- dev/reference/torch_empty_strided.html | 230 +- dev/reference/torch_eq.html | 185 +- dev/reference/torch_equal.html | 173 +- dev/reference/torch_erf.html | 175 +- dev/reference/torch_erfc.html | 175 +- dev/reference/torch_erfinv.html | 175 +- dev/reference/torch_exp.html | 173 +- dev/reference/torch_exp2.html | 177 +- dev/reference/torch_expm1.html | 173 +- dev/reference/torch_eye.html | 219 +- dev/reference/torch_fft.html | 322 -- dev/reference/torch_fft_fft.html | 206 +- dev/reference/torch_fft_ifft.html | 209 +- dev/reference/torch_fft_irfft.html | 220 +- dev/reference/torch_fft_rfft.html | 208 +- dev/reference/torch_finfo.html | 148 +- dev/reference/torch_fix.html | 153 +- dev/reference/torch_flatten.html | 201 +- dev/reference/torch_flip.html | 193 +- dev/reference/torch_fliplr.html | 182 +- dev/reference/torch_flipud.html | 182 +- dev/reference/torch_floor.html | 181 +- dev/reference/torch_floor_divide.html | 187 +- dev/reference/torch_fmod.html | 187 +- dev/reference/torch_frac.html | 175 +- dev/reference/torch_full.html | 230 +- dev/reference/torch_full_like.html | 203 +- dev/reference/torch_gather.html | 200 +- dev/reference/torch_gcd.html | 188 +- dev/reference/torch_ge.html | 181 +- dev/reference/torch_generator.html | 165 +- dev/reference/torch_geqrf.html | 153 +- dev/reference/torch_ger.html | 194 +- dev/reference/torch_greater.html | 159 +- dev/reference/torch_greater_equal.html | 159 +- dev/reference/torch_gt.html | 181 +- dev/reference/torch_hamming_window.html | 224 +- dev/reference/torch_hann_window.html | 204 +- dev/reference/torch_heaviside.html | 189 +- dev/reference/torch_histc.html | 195 +- dev/reference/torch_hstack.html | 185 +- dev/reference/torch_hypot.html | 181 +- dev/reference/torch_i0.html | 181 +- dev/reference/torch_ifft.html | 299 -- dev/reference/torch_iinfo.html | 148 +- dev/reference/torch_imag.html | 172 +- dev/reference/torch_index.html | 154 +- dev/reference/torch_index_put.html | 170 +- dev/reference/torch_index_put_.html | 170 +- dev/reference/torch_index_select.html | 200 +- dev/reference/torch_inverse.html | 194 +- dev/reference/torch_irfft.html | 321 -- dev/reference/torch_is_complex.html | 151 +- dev/reference/torch_is_floating_point.html | 151 +- dev/reference/torch_is_installed.html | 133 +- dev/reference/torch_is_nonzero.html | 179 +- dev/reference/torch_isclose.html | 201 +- dev/reference/torch_isfinite.html | 179 +- dev/reference/torch_isinf.html | 179 +- dev/reference/torch_isnan.html | 175 +- dev/reference/torch_isneginf.html | 177 +- dev/reference/torch_isposinf.html | 177 +- dev/reference/torch_isreal.html | 167 +- dev/reference/torch_istft.html | 247 +- dev/reference/torch_kaiser_window.html | 212 +- dev/reference/torch_kthvalue.html | 215 +- dev/reference/torch_layout.html | 135 +- dev/reference/torch_lcm.html | 188 +- dev/reference/torch_le.html | 181 +- dev/reference/torch_lerp.html | 199 +- dev/reference/torch_less.html | 159 +- dev/reference/torch_less_equal.html | 159 +- dev/reference/torch_lgamma.html | 179 +- dev/reference/torch_linspace.html | 229 +- dev/reference/torch_load.html | 165 +- dev/reference/torch_log.html | 183 +- dev/reference/torch_log10.html | 184 +- dev/reference/torch_log1p.html | 191 +- dev/reference/torch_log2.html | 183 +- dev/reference/torch_logaddexp.html | 187 +- dev/reference/torch_logaddexp2.html | 159 +- dev/reference/torch_logcumsumexp.html | 197 +- dev/reference/torch_logdet.html | 194 +- dev/reference/torch_logical_and.html | 183 +- dev/reference/torch_logical_not.html | 175 +- dev/reference/torch_logical_or.html | 187 +- dev/reference/torch_logical_xor.html | 193 +- dev/reference/torch_logit.html | 189 +- dev/reference/torch_logspace.html | 237 +- dev/reference/torch_logsumexp.html | 191 +- dev/reference/torch_lstsq.html | 224 +- dev/reference/torch_lt.html | 181 +- dev/reference/torch_lu.html | 226 +- dev/reference/torch_lu_solve.html | 189 +- dev/reference/torch_manual_seed.html | 146 +- dev/reference/torch_masked_select.html | 199 +- dev/reference/torch_matmul.html | 291 +- dev/reference/torch_matrix_exp.html | 187 +- dev/reference/torch_matrix_power.html | 194 +- dev/reference/torch_matrix_rank.html | 185 +- dev/reference/torch_max.html | 247 +- dev/reference/torch_maximum.html | 190 +- dev/reference/torch_mean.html | 212 +- dev/reference/torch_median.html | 234 +- dev/reference/torch_memory_format.html | 137 +- dev/reference/torch_meshgrid.html | 201 +- dev/reference/torch_min.html | 247 +- dev/reference/torch_minimum.html | 190 +- dev/reference/torch_mm.html | 190 +- dev/reference/torch_mode.html | 208 +- dev/reference/torch_movedim.html | 202 +- dev/reference/torch_mul.html | 201 +- dev/reference/torch_multinomial.html | 212 +- dev/reference/torch_multiply.html | 159 +- dev/reference/torch_mv.html | 188 +- dev/reference/torch_mvlgamma.html | 183 +- dev/reference/torch_nanquantile.html | 215 +- dev/reference/torch_nansum.html | 216 +- dev/reference/torch_narrow.html | 197 +- dev/reference/torch_ne.html | 181 +- dev/reference/torch_neg.html | 183 +- dev/reference/torch_negative.html | 153 +- dev/reference/torch_nextafter.html | 181 +- dev/reference/torch_nonzero.html | 182 +- dev/reference/torch_norm.html | 209 +- dev/reference/torch_normal.html | 237 +- dev/reference/torch_not_equal.html | 159 +- dev/reference/torch_ones.html | 225 +- dev/reference/torch_ones_like.html | 224 +- dev/reference/torch_orgqr.html | 159 +- dev/reference/torch_ormqr.html | 179 +- dev/reference/torch_outer.html | 194 +- dev/reference/torch_pdist.html | 157 +- dev/reference/torch_pinverse.html | 218 +- dev/reference/torch_pixel_shuffle.html | 177 +- dev/reference/torch_poisson.html | 185 +- dev/reference/torch_polar.html | 191 +- dev/reference/torch_polygamma.html | 184 +- dev/reference/torch_pow.html | 214 +- dev/reference/torch_prod.html | 213 +- dev/reference/torch_promote_types.html | 175 +- dev/reference/torch_qr.html | 196 +- dev/reference/torch_qscheme.html | 139 +- dev/reference/torch_quantile.html | 218 +- dev/reference/torch_quantize_per_channel.html | 203 +- dev/reference/torch_quantize_per_tensor.html | 195 +- dev/reference/torch_rad2deg.html | 177 +- dev/reference/torch_rand.html | 219 +- dev/reference/torch_rand_like.html | 195 +- dev/reference/torch_randint.html | 245 +- dev/reference/torch_randint_like.html | 203 +- dev/reference/torch_randn.html | 219 +- dev/reference/torch_randn_like.html | 195 +- dev/reference/torch_randperm.html | 213 +- dev/reference/torch_range.html | 248 +- dev/reference/torch_real.html | 172 +- dev/reference/torch_reciprocal.html | 181 +- dev/reference/torch_reduction.html | 137 +- dev/reference/torch_relu.html | 151 +- dev/reference/torch_relu_.html | 153 +- dev/reference/torch_remainder.html | 187 +- dev/reference/torch_renorm.html | 204 +- dev/reference/torch_repeat_interleave.html | 203 +- dev/reference/torch_reshape.html | 189 +- dev/reference/torch_result_type.html | 173 +- dev/reference/torch_rfft.html | 322 -- dev/reference/torch_roll.html | 197 +- dev/reference/torch_rot90.html | 205 +- dev/reference/torch_round.html | 181 +- dev/reference/torch_rrelu_.html | 187 +- dev/reference/torch_rsqrt.html | 181 +- dev/reference/torch_save.html | 171 +- dev/reference/torch_scalar_tensor.html | 164 +- dev/reference/torch_searchsorted.html | 215 +- dev/reference/torch_selu.html | 151 +- dev/reference/torch_selu_.html | 153 +- dev/reference/torch_sgn.html | 173 +- dev/reference/torch_sigmoid.html | 181 +- dev/reference/torch_sign.html | 181 +- dev/reference/torch_signbit.html | 179 +- dev/reference/torch_sin.html | 181 +- dev/reference/torch_sinh.html | 181 +- dev/reference/torch_slogdet.html | 206 +- dev/reference/torch_solve.html | 222 +- dev/reference/torch_sort.html | 221 +- dev/reference/torch_sparse_coo_tensor.html | 239 +- dev/reference/torch_split.html | 165 +- dev/reference/torch_sqrt.html | 181 +- dev/reference/torch_square.html | 181 +- dev/reference/torch_squeeze.html | 216 +- dev/reference/torch_stack.html | 157 +- dev/reference/torch_std.html | 222 +- dev/reference/torch_std_mean.html | 242 +- dev/reference/torch_stft.html | 256 +- dev/reference/torch_sub.html | 189 +- dev/reference/torch_subtract.html | 165 +- dev/reference/torch_sum.html | 224 +- dev/reference/torch_svd.html | 212 +- dev/reference/torch_symeig.html | 210 +- dev/reference/torch_t.html | 191 +- dev/reference/torch_take.html | 183 +- dev/reference/torch_tan.html | 181 +- dev/reference/torch_tanh.html | 181 +- dev/reference/torch_tensor.html | 212 +- dev/reference/torch_tensordot.html | 192 +- dev/reference/torch_threshold_.html | 163 +- dev/reference/torch_topk.html | 221 +- dev/reference/torch_trace.html | 175 +- dev/reference/torch_transpose.html | 191 +- dev/reference/torch_trapz.html | 204 +- dev/reference/torch_triangular_solve.html | 233 +- dev/reference/torch_tril.html | 195 +- dev/reference/torch_tril_indices.html | 230 +- dev/reference/torch_triu.html | 199 +- dev/reference/torch_triu_indices.html | 230 +- dev/reference/torch_true_divide.html | 187 +- dev/reference/torch_trunc.html | 181 +- dev/reference/torch_unbind.html | 213 +- dev/reference/torch_unique_consecutive.html | 247 +- dev/reference/torch_unsafe_chunk.html | 170 +- dev/reference/torch_unsafe_split.html | 172 +- dev/reference/torch_unsqueeze.html | 187 +- dev/reference/torch_vander.html | 199 +- dev/reference/torch_var.html | 222 +- dev/reference/torch_var_mean.html | 242 +- dev/reference/torch_vdot.html | 190 +- dev/reference/torch_view_as_complex.html | 178 +- dev/reference/torch_view_as_real.html | 178 +- dev/reference/torch_vstack.html | 193 +- dev/reference/torch_where.html | 209 +- dev/reference/torch_zeros.html | 225 +- dev/reference/torch_zeros_like.html | 224 +- dev/reference/with_detect_anomaly.html | 204 +- dev/reference/with_enable_grad.html | 191 +- dev/reference/with_no_grad.html | 178 +- dev/sitemap.xml | 2019 ++++++++ 761 files changed, 42579 insertions(+), 104961 deletions(-) delete mode 100644 dev/404.html delete mode 100644 dev/CONTRIBUTING.html delete mode 100644 dev/articles/examples/basic-autograd_files/anchor-sections-1.0/anchor-sections.css delete mode 100644 dev/articles/examples/basic-autograd_files/anchor-sections-1.0/anchor-sections.js delete mode 100644 dev/articles/examples/basic-nn-module_files/anchor-sections-1.0/anchor-sections.css delete mode 100644 dev/articles/examples/basic-nn-module_files/anchor-sections-1.0/anchor-sections.js delete mode 100644 dev/articles/examples/dataset_files/anchor-sections-1.0/anchor-sections.css delete mode 100644 dev/articles/examples/dataset_files/anchor-sections-1.0/anchor-sections.js delete mode 100644 dev/articles/examples/index_files/anchor-sections-1.0/anchor-sections.css delete mode 100644 dev/articles/examples/index_files/anchor-sections-1.0/anchor-sections.js delete mode 100644 dev/articles/examples/mnist-cnn.html delete mode 100644 dev/articles/examples/mnist-cnn_files/accessible-code-block-0.0.1/empty-anchor.js delete mode 100644 dev/articles/examples/mnist-dcgan.html delete mode 100644 dev/articles/examples/mnist-dcgan_files/accessible-code-block-0.0.1/empty-anchor.js delete mode 100644 dev/articles/examples/mnist-mlp.html delete mode 100644 dev/articles/examples/mnist-mlp_files/accessible-code-block-0.0.1/empty-anchor.js delete mode 100644 dev/articles/extending-autograd_files/anchor-sections-1.0/anchor-sections.css delete mode 100644 dev/articles/extending-autograd_files/anchor-sections-1.0/anchor-sections.js delete mode 100644 dev/articles/getting-started/assets/mnist.png delete mode 100644 dev/articles/getting-started/autograd.html delete mode 100644 dev/articles/getting-started/autograd_files/accessible-code-block-0.0.1/empty-anchor.js delete mode 100644 dev/articles/getting-started/autograd_files/anchor-sections-1.0/anchor-sections.css delete mode 100644 dev/articles/getting-started/autograd_files/anchor-sections-1.0/anchor-sections.js delete mode 100644 dev/articles/getting-started/control-flow-and-weight-sharing.html delete mode 100644 dev/articles/getting-started/control-flow-and-weight-sharing_files/accessible-code-block-0.0.1/empty-anchor.js delete mode 100644 dev/articles/getting-started/control-flow-and-weight-sharing_files/anchor-sections-1.0/anchor-sections.css delete mode 100644 dev/articles/getting-started/control-flow-and-weight-sharing_files/anchor-sections-1.0/anchor-sections.js delete mode 100644 dev/articles/getting-started/custom-nn.html delete mode 100644 dev/articles/getting-started/custom-nn_files/accessible-code-block-0.0.1/empty-anchor.js delete mode 100644 dev/articles/getting-started/custom-nn_files/anchor-sections-1.0/anchor-sections.css delete mode 100644 dev/articles/getting-started/custom-nn_files/anchor-sections-1.0/anchor-sections.js delete mode 100644 dev/articles/getting-started/neural-networks.html delete mode 100644 dev/articles/getting-started/neural-networks_files/accessible-code-block-0.0.1/empty-anchor.js delete mode 100644 dev/articles/getting-started/neural-networks_files/anchor-sections-1.0/anchor-sections.css delete mode 100644 dev/articles/getting-started/neural-networks_files/anchor-sections-1.0/anchor-sections.js delete mode 100644 dev/articles/getting-started/new-autograd-functions.html delete mode 100644 dev/articles/getting-started/new-autograd-functions_files/accessible-code-block-0.0.1/empty-anchor.js delete mode 100644 dev/articles/getting-started/new-autograd-functions_files/anchor-sections-1.0/anchor-sections.css delete mode 100644 dev/articles/getting-started/new-autograd-functions_files/anchor-sections-1.0/anchor-sections.js delete mode 100644 dev/articles/getting-started/nn.html delete mode 100644 dev/articles/getting-started/nn_files/accessible-code-block-0.0.1/empty-anchor.js delete mode 100644 dev/articles/getting-started/nn_files/anchor-sections-1.0/anchor-sections.css delete mode 100644 dev/articles/getting-started/nn_files/anchor-sections-1.0/anchor-sections.js delete mode 100644 dev/articles/getting-started/optim.html delete mode 100644 dev/articles/getting-started/optim_files/accessible-code-block-0.0.1/empty-anchor.js delete mode 100644 dev/articles/getting-started/optim_files/anchor-sections-1.0/anchor-sections.css delete mode 100644 dev/articles/getting-started/optim_files/anchor-sections-1.0/anchor-sections.js delete mode 100644 dev/articles/getting-started/tensors-and-autograd.html delete mode 100644 dev/articles/getting-started/tensors-and-autograd_files/accessible-code-block-0.0.1/empty-anchor.js delete mode 100644 dev/articles/getting-started/tensors-and-autograd_files/anchor-sections-1.0/anchor-sections.css delete mode 100644 dev/articles/getting-started/tensors-and-autograd_files/anchor-sections-1.0/anchor-sections.js delete mode 100644 dev/articles/getting-started/tensors.html delete mode 100644 dev/articles/getting-started/tensors_files/accessible-code-block-0.0.1/empty-anchor.js delete mode 100644 dev/articles/getting-started/tensors_files/anchor-sections-1.0/anchor-sections.css delete mode 100644 dev/articles/getting-started/tensors_files/anchor-sections-1.0/anchor-sections.js delete mode 100644 dev/articles/getting-started/warmup.html delete mode 100644 dev/articles/getting-started/warmup_files/accessible-code-block-0.0.1/empty-anchor.js delete mode 100644 dev/articles/getting-started/warmup_files/anchor-sections-1.0/anchor-sections.css delete mode 100644 dev/articles/getting-started/warmup_files/anchor-sections-1.0/anchor-sections.js delete mode 100644 dev/articles/getting-started/what-is-torch.html delete mode 100644 dev/articles/getting-started/what-is-torch_files/accessible-code-block-0.0.1/empty-anchor.js delete mode 100644 dev/articles/getting-started/what-is-torch_files/anchor-sections-1.0/anchor-sections.css delete mode 100644 dev/articles/getting-started/what-is-torch_files/anchor-sections-1.0/anchor-sections.js delete mode 100644 dev/articles/indexing_files/anchor-sections-1.0/anchor-sections.css delete mode 100644 dev/articles/indexing_files/anchor-sections-1.0/anchor-sections.js delete mode 100644 dev/articles/installation_files/anchor-sections-1.0/anchor-sections.css delete mode 100644 dev/articles/installation_files/anchor-sections-1.0/anchor-sections.js delete mode 100644 dev/articles/loading-data_files/anchor-sections-1.0/anchor-sections.css delete mode 100644 dev/articles/loading-data_files/anchor-sections-1.0/anchor-sections.js delete mode 100644 dev/articles/serialization_files/anchor-sections-1.0/anchor-sections.css delete mode 100644 dev/articles/serialization_files/anchor-sections-1.0/anchor-sections.js delete mode 100644 dev/articles/tensor-creation_files/anchor-sections-1.0/anchor-sections.css delete mode 100644 dev/articles/tensor-creation_files/anchor-sections-1.0/anchor-sections.js delete mode 100644 dev/articles/tensor/index_files/anchor-sections-1.0/anchor-sections.css delete mode 100644 dev/articles/tensor/index_files/anchor-sections-1.0/anchor-sections.js delete mode 100644 dev/articles/using-autograd_files/anchor-sections-1.0/anchor-sections.css delete mode 100644 dev/articles/using-autograd_files/anchor-sections-1.0/anchor-sections.js create mode 100644 dev/reference/call_torch_function.html delete mode 100644 dev/reference/dependent.html delete mode 100644 dev/reference/figures/torch-full.png delete mode 100644 dev/reference/logits_to_probs.html delete mode 100644 dev/reference/probs_to_logits.html delete mode 100644 dev/reference/torch_fft.html delete mode 100644 dev/reference/torch_ifft.html delete mode 100644 dev/reference/torch_irfft.html delete mode 100644 dev/reference/torch_rfft.html create mode 100644 dev/sitemap.xml diff --git a/dev/404.html b/dev/404.html deleted file mode 100644 index b1f69d84d..000000000 --- a/dev/404.html +++ /dev/null @@ -1,217 +0,0 @@ - - - - - - - - -Page not found (404) • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - -
- -
-
- - -Content not found. Please use links in the navbar. - -
- - - -
- - - -
- - -
-

Site built with pkgdown 1.6.1.

-
- -
-
- - - - - - - - diff --git a/dev/CONTRIBUTING.html b/dev/CONTRIBUTING.html deleted file mode 100644 index ad250c576..000000000 --- a/dev/CONTRIBUTING.html +++ /dev/null @@ -1,278 +0,0 @@ - - - - - - - - -Contributing to torch • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - -
- -
-
- - -
- -

This outlines how to propose a change to torch. For more detailed info about contributing to this, and other tidyverse packages, please see the development contributing guide.

-
-

-Fixing typos

-

You can fix typos, spelling mistakes, or grammatical errors in the documentation directly using the GitHub web interface, as long as the changes are made in the source file. This generally means you’ll need to edit roxygen2 comments in an .R, not a .Rd file. You can find the .R file that generates the .Rd by reading the comment in the first line.

-

See also the [Documentation] section.

-
-
-

-Filing bugs

-

If you find a bug in torch please open an issue here. Please, provide detailed information on how to reproduce the bug. It would be great to also provide a reprex.

-
-
-

-Feature requests

-

Feel free to open issues here and add the feature-request tag. Try searching if there’s already an open issue for your feature-request, in this case it’s better to comment or upvote it intead of opening a new one.

-
-
-

-Examples

-

We welcome contributed examples. feel free to open a PR with new examples. The examples should be placed in the vignettes/examples folder.

-

The examples should be an .R file and a .Rmd file with the same name that just renders the code.

-

See mnist-mlp.R and mnist-mlp.Rmd

-

One must be able to run the example without manually downloading any dataset/file. You should also add an entry to the _pkgdown.yaml file.

-
-
-

-Code contributions

-

We have many open issues in the github repo if there’s one item that you want to work on, you can comment on it and ask for directions.

-
-

-Requirements

-
    -
  • R installation
  • -
  • R Tools for compilation (only on Windows)
  • -
  • The devtools package
  • -
  • CMake to compile lantern binaries
  • -
-
-
-

-Workflow

-

We use devtools as the toolchain for development, but a few steps must be done before setiing up.

-

The first time you clone the repository, you must run:

-
-source("tools/buildlantern.R")
-

This will compile Lantern binaries and download LibTorch and copy the binaries to deps folder in the working directory.

-

This command must be run everytime you modify lantern code. ie. code that lives in lantern/src.

-

You can the run

-
-devtools::load_all()
-

To load torch and test interactively. Or

-
-devtools::test()
-

To run the test suite.

-
-
-
-

-Documentation

-

We use roxygen2 to generate the documentation. IN order to update the docs, edit the file in the R directory. To regenerate and preview the docs, use the custom tools/document.R script, as we need to patch roxygen2 to avoid running the examples on CRAN.

-
-
- -
- - - -
- - - -
- - -
-

Site built with pkgdown 1.6.1.

-
- -
-
- - - - - - - - diff --git a/dev/LICENSE-text.html b/dev/LICENSE-text.html index 8c2a4b165..6d56b37af 100644 --- a/dev/LICENSE-text.html +++ b/dev/LICENSE-text.html @@ -1,78 +1,18 @@ - - - - - - - -License • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -License • torch - - - - - - - - + + -
-
- -
- -
+
+
-
- +
- - + + diff --git a/dev/LICENSE.html b/dev/LICENSE.html index 98eba5eb0..f837eff11 100644 --- a/dev/LICENSE.html +++ b/dev/LICENSE.html @@ -1,78 +1,18 @@ - - - - - - - -MIT License • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -MIT License • torch - - - - - - - - + + -
-
- -
- -
+
+
-
- +
- - + + diff --git a/dev/articles/distributions.html b/dev/articles/distributions.html index 6b08fa798..f58a1dfa0 100644 --- a/dev/articles/distributions.html +++ b/dev/articles/distributions.html @@ -27,6 +27,8 @@ + +
-
- +
- - + + diff --git a/dev/articles/indexing.html b/dev/articles/indexing.html index 49320be84..29423bfcf 100644 --- a/dev/articles/indexing.html +++ b/dev/articles/indexing.html @@ -27,6 +27,8 @@ + +
@@ -193,108 +115,95 @@ in Jacobian-vector product, usually the pre-computed gradients w.r.t. each of the outputs. If an output doesn’t require_grad, then the gradient can be None).

-
autograd_grad(
-  outputs,
-  inputs,
-  grad_outputs = NULL,
-  retain_graph = create_graph,
-  create_graph = FALSE,
-  allow_unused = FALSE
-)
+
+
autograd_grad(
+  outputs,
+  inputs,
+  grad_outputs = NULL,
+  retain_graph = create_graph,
+  create_graph = FALSE,
+  allow_unused = FALSE
+)
+
-

Arguments

- - - - - - - - - - - - - - - - - - - - - - - - - - -
outputs

(sequence of Tensor) – outputs of the differentiated function.

inputs

(sequence of Tensor) – Inputs w.r.t. which the gradient will be -returned (and not accumulated into .grad).

grad_outputs

(sequence of Tensor) – The “vector” in the Jacobian-vector +

+

Arguments

+
outputs
+

(sequence of Tensor) – outputs of the differentiated function.

+
inputs
+

(sequence of Tensor) – Inputs w.r.t. which the gradient will be +returned (and not accumulated into .grad).

+
grad_outputs
+

(sequence of Tensor) – The “vector” in the Jacobian-vector product. Usually gradients w.r.t. each output. None values can be specified for scalar Tensors or ones that don’t require grad. If a None value would be acceptable -for all grad_tensors, then this argument is optional. Default: None.

retain_graph

(bool, optional) – If FALSE, the graph used to compute the +for all grad_tensors, then this argument is optional. Default: None.

+
retain_graph
+

(bool, optional) – If FALSE, the graph used to compute the grad will be freed. Note that in nearly all cases setting this option to TRUE is not needed and often can be worked around in a much more efficient way. -Defaults to the value of create_graph.

create_graph

(bool, optional) – If TRUE, graph of the derivative will be constructed, allowing to compute higher order derivative products. Default: FALSE`.

allow_unused

(bool, optional) – If FALSE, specifying inputs that were +Defaults to the value of create_graph.

+
create_graph
+

(bool, optional) – If TRUE, graph of the derivative will be constructed, allowing to compute higher order derivative products. Default: FALSE`.

+
allow_unused
+

(bool, optional) – If FALSE, specifying inputs that were not used when computing outputs (and therefore their grad is always zero) is an -error. Defaults to FALSE

- -

Details

- +error. Defaults to FALSE

+
+
+

Details

If only_inputs is TRUE, the function will only return a list of gradients w.r.t the specified inputs. If it’s FALSE, then gradient w.r.t. all remaining leaves will still be computed, and will be accumulated into their .grad attribute.

+
-

Examples

-
if (torch_is_installed()) {
-w <- torch_tensor(0.5, requires_grad = TRUE)
-b <- torch_tensor(0.9, requires_grad = TRUE)
-x <- torch_tensor(runif(100))
-y <- 2 * x + 1
-loss <- (y - (w*x + b))^2
-loss <- loss$mean()
-
-o <- autograd_grad(loss, list(w, b))
-o
- 
-}
-#> [[1]]
-#> torch_tensor
-#> -0.9935
-#> [ CPUFloatType{1} ]
-#> 
-#> [[2]]
-#> torch_tensor
-#> -1.6206
-#> [ CPUFloatType{1} ]
-#> 
-
+
+

Examples

+
if (torch_is_installed()) {
+w <- torch_tensor(0.5, requires_grad = TRUE)
+b <- torch_tensor(0.9, requires_grad = TRUE)
+x <- torch_tensor(runif(100))
+y <- 2 * x + 1
+loss <- (y - (w*x + b))^2
+loss <- loss$mean()
+
+o <- autograd_grad(loss, list(w, b))
+o
+ 
+}
+#> [[1]]
+#> torch_tensor
+#> -1.0326
+#> [ CPUFloatType{1} ]
+#> 
+#> [[2]]
+#> torch_tensor
+#> -1.6274
+#> [ CPUFloatType{1} ]
+#> 
+
+
+
-
- +
- - + + diff --git a/dev/reference/autograd_set_grad_mode.html b/dev/reference/autograd_set_grad_mode.html index a519fa7f6..ad91d3138 100644 --- a/dev/reference/autograd_set_grad_mode.html +++ b/dev/reference/autograd_set_grad_mode.html @@ -1,79 +1,18 @@ - - - - - - - -Set grad mode — autograd_set_grad_mode • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Set grad mode — autograd_set_grad_mode • torch - - - - - - + + - - -
-
- -
- -
+
@@ -189,43 +111,37 @@

Sets or disables gradient history.

-
autograd_set_grad_mode(enabled)
- -

Arguments

- - - - - - -
enabled

bool wether to enable or disable the gradient recording.

+
+
autograd_set_grad_mode(enabled)
+
+
+

Arguments

+
enabled
+

bool wether to enable or disable the gradient recording.

+
+
-
- +
- - + + diff --git a/dev/reference/backends_mkl_is_available.html b/dev/reference/backends_mkl_is_available.html index e55200364..24f14a641 100644 --- a/dev/reference/backends_mkl_is_available.html +++ b/dev/reference/backends_mkl_is_available.html @@ -1,79 +1,18 @@ - - - - - - - -MKL is available — backends_mkl_is_available • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -MKL is available — backends_mkl_is_available • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,38 +111,36 @@

MKL is available

-
backends_mkl_is_available()
- - -

Value

+
+
backends_mkl_is_available()
+
+
+

Value

Returns whether LibTorch is built with MKL support.

+
+
-
- +
- - + + diff --git a/dev/reference/backends_mkldnn_is_available.html b/dev/reference/backends_mkldnn_is_available.html index fd0a3246d..dcecd16cf 100644 --- a/dev/reference/backends_mkldnn_is_available.html +++ b/dev/reference/backends_mkldnn_is_available.html @@ -1,79 +1,18 @@ - - - - - - - -MKLDNN is available — backends_mkldnn_is_available • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -MKLDNN is available — backends_mkldnn_is_available • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,38 +111,36 @@

MKLDNN is available

-
backends_mkldnn_is_available()
- - -

Value

+
+
backends_mkldnn_is_available()
+
+
+

Value

Returns whether LibTorch is built with MKL-DNN support.

+
+
-
- +
- - + + diff --git a/dev/reference/backends_openmp_is_available.html b/dev/reference/backends_openmp_is_available.html index 105ebfd47..c66b667a8 100644 --- a/dev/reference/backends_openmp_is_available.html +++ b/dev/reference/backends_openmp_is_available.html @@ -1,79 +1,18 @@ - - - - - - - -OpenMP is available — backends_openmp_is_available • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -OpenMP is available — backends_openmp_is_available • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,38 +111,36 @@

OpenMP is available

-
backends_openmp_is_available()
- - -

Value

+
+
backends_openmp_is_available()
+
+
+

Value

Returns whether LibTorch is built with OpenMP support.

+
+
-
- +
- - + + diff --git a/dev/reference/broadcast_all.html b/dev/reference/broadcast_all.html index f5c2ae087..80f2b8675 100644 --- a/dev/reference/broadcast_all.html +++ b/dev/reference/broadcast_all.html @@ -1,84 +1,23 @@ - - - - - - - -Given a list of values (possibly containing numbers), returns a list where each -value is broadcasted based on the following rules: — broadcast_all • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Given a list of values (possibly containing numbers), returns a list where each +value is broadcasted based on the following rules: — broadcast_all • torch - - - - - - - - - - - - - - - + + - - -
-
- -
- -
+
@@ -198,49 +120,42 @@ TODO: add has_torch_function((v,)) See: https://github.com/pytorch/pytorch/blob/master/torch/distributions/utils.py

-
broadcast_all(values)
+
+
broadcast_all(values)
+
-

Arguments

- - - - - - -
values

List of:

    -
  • torch.*Tensor instances are broadcasted as per _broadcasting-semantics.

  • +
    +

    Arguments

    +
    values
    +

    List of:

    • torch.*Tensor instances are broadcasted as per _broadcasting-semantics.

    • numeric instances (scalars) are upcast to tensors having the same size and type as the first tensor passed to values. If all the values are scalars, then they are upcasted to scalar Tensors. values (list of numeric, torch.*Tensor or objects implementing torch_function)

    • -
- + +
+
-
- +
- - + + diff --git a/dev/reference/call_torch_function.html b/dev/reference/call_torch_function.html new file mode 100644 index 000000000..c1691b51a --- /dev/null +++ b/dev/reference/call_torch_function.html @@ -0,0 +1,193 @@ + +Call a (Potentially Unexported) Torch Function — call_torch_function • torch + + +
+
+ + + +
+
+ + +
+

This function allows calling a function prefixed with torch_, including unexported +functions which could have potentially valuable uses but which do not yet have +a user-friendly R wrapper function. Therefore, this function should be used with +extreme caution. Make sure you understand what the function expects as input. It +may be helpful to read the torch source code for help with this, as well as +the documentation for the corresponding function in the Pytorch C++ API. Generally +for development and advanced use only.

+
+ +
+
call_torch_function(name, ..., quiet = FALSE)
+
+ +
+

Arguments

+
name
+

Name of the function to call as a string. Should start with "torch_"

+
...
+

A list of arguments to pass to the function. Argument splicing with +!!! is supported.

+
quiet
+

If TRUE, suppress warnings with valuable information about the dangers of +this function.

+
+
+

Value

+

The return value from calling the function name with arguments ...

+
+ +
+

Examples

+
if (torch_is_installed()) {
+## many unexported functions do 'backward' calculations (e.g. derivatives)
+## These could be used as a part of custom autograd functions for example.
+x <- torch_randn(10, requires_grad = TRUE)
+y <- torch_tanh(x)
+## calculate backwards gradient using standard torch method
+y$backward(torch_ones_like(x))
+x$grad
+## we can get the same result by calling the unexported `torch_tanh_backward()`
+## function. The first argument is 1 to setup the Jacobian-vector product.
+## see https://pytorch.org/blog/overview-of-pytorch-autograd-engine/ for details.
+call_torch_function("torch_tanh_backward", 1, y) 
+all.equal(call_torch_function("torch_tanh_backward", 1, y, quiet = TRUE), x$grad)
+}
+#> Warning: Because this function allows access to unexported functions, please use with caution, and
+#>             only if you are sure know what you are doing. Unexported functions will expect inputs that
+#>             are more C++-like than R-like. For example, they will expect all indexes to be 0-based instead
+#>             of 1-based. In addition unexported functions may be subject to removal from the API without
+#>             warning. Set quiet = TRUE to silence this warning.
+#> [1] TRUE
+
+
+
+ +
+ + +
+ +
+

Site built with pkgdown 2.0.1.

+
+ +
+ + + + + + + + diff --git a/dev/reference/contrib_sort_vertices.html b/dev/reference/contrib_sort_vertices.html index 806a752fe..bb358c352 100644 --- a/dev/reference/contrib_sort_vertices.html +++ b/dev/reference/contrib_sort_vertices.html @@ -1,79 +1,18 @@ - - - - - - - -Contrib sort vertices — contrib_sort_vertices • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Contrib sort vertices — contrib_sort_vertices • torch - - - - - + + - - - -
-
- -
- -
+
-

Based on the implementation from Rotated_IoU

+

Based on the implementation from Rotated_IoU

-
contrib_sort_vertices(vertices, mask, num_valid)
- -

Arguments

- - - - - - - - - - - - - - -
vertices

A Tensor with the vertices.

mask

A tensors containing the masks.

num_valid

A integer tensors.

- -

Details

+
+
contrib_sort_vertices(vertices, mask, num_valid)
+
+
+

Arguments

+
vertices
+

A Tensor with the vertices.

+
mask
+

A tensors containing the masks.

+
num_valid
+

A integer tensors.

+
+
+

Details

All tensors should be on a CUDA device so this function can be used.

-

Note

- +
+
+

Note

This function does not make part of the official torch API.

+
-

Examples

-
if (torch_is_installed()) {
-if (cuda_is_available()) {
-v <- torch_randn(8, 1024, 24, 2)$cuda()
-mean <- torch_mean(v, dim=2, keepdim=TRUE)
-v <- v - mean
-m <- (torch_rand(8, 1024, 24) > 0.8)$cuda()
-nv <- torch_sum(m$to(dtype = torch_int()), dim=-1)$to(dtype = torch_int())$cuda()
-result <- contrib_sort_vertices(v, m, nv)
-}
-}
-
+
+

Examples

+
if (torch_is_installed()) {
+if (cuda_is_available()) {
+v <- torch_randn(8, 1024, 24, 2)$cuda()
+mean <- torch_mean(v, dim=2, keepdim=TRUE)
+v <- v - mean
+m <- (torch_rand(8, 1024, 24) > 0.8)$cuda()
+nv <- torch_sum(m$to(dtype = torch_int()), dim=-1)$to(dtype = torch_int())$cuda()
+result <- contrib_sort_vertices(v, m, nv)
+}
+}
+
+
+
-
- +
- - + + diff --git a/dev/reference/cuda_current_device.html b/dev/reference/cuda_current_device.html index 7d7f4423d..3a6e38d2e 100644 --- a/dev/reference/cuda_current_device.html +++ b/dev/reference/cuda_current_device.html @@ -1,79 +1,18 @@ - - - - - - - -Returns the index of a currently selected device. — cuda_current_device • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Returns the index of a currently selected device. — cuda_current_device • torch - - - - - - + + - - -
-
- -
- -
+
@@ -189,35 +111,32 @@

Returns the index of a currently selected device.

-
cuda_current_device()
- +
+
cuda_current_device()
+
+
-
- +
- - + + diff --git a/dev/reference/cuda_device_count.html b/dev/reference/cuda_device_count.html index 4eb1cc992..4960479cf 100644 --- a/dev/reference/cuda_device_count.html +++ b/dev/reference/cuda_device_count.html @@ -1,79 +1,18 @@ - - - - - - - -Returns the number of GPUs available. — cuda_device_count • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Returns the number of GPUs available. — cuda_device_count • torch - - - - - - + + - - -
-
- -
- -
+
@@ -189,35 +111,32 @@

Returns the number of GPUs available.

-
cuda_device_count()
- +
+
cuda_device_count()
+
+
-
- +
- - + + diff --git a/dev/reference/cuda_get_device_capability.html b/dev/reference/cuda_get_device_capability.html index 51d328b7b..9a406be59 100644 --- a/dev/reference/cuda_get_device_capability.html +++ b/dev/reference/cuda_get_device_capability.html @@ -1,79 +1,18 @@ - - - - - - - -Returns the major and minor CUDA capability of device — cuda_get_device_capability • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Returns the major and minor CUDA capability of device — cuda_get_device_capability • torch - - - - - - + + - - -
-
- -
- -
+
@@ -189,43 +111,37 @@

Returns the major and minor CUDA capability of device

-
cuda_get_device_capability(device)
- -

Arguments

- - - - - - -
device

Integer value of the CUDA device to return capabilities of.

+
+
cuda_get_device_capability(device)
+
+
+

Arguments

+
device
+

Integer value of the CUDA device to return capabilities of.

+
+
-
- +
- - + + diff --git a/dev/reference/cuda_is_available.html b/dev/reference/cuda_is_available.html index 8e8354016..70d930163 100644 --- a/dev/reference/cuda_is_available.html +++ b/dev/reference/cuda_is_available.html @@ -1,79 +1,18 @@ - - - - - - - -Returns a bool indicating if CUDA is currently available. — cuda_is_available • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Returns a bool indicating if CUDA is currently available. — cuda_is_available • torch - - - - - - + + - - -
-
- -
- -
+
@@ -189,35 +111,32 @@

Returns a bool indicating if CUDA is currently available.

-
cuda_is_available()
- +
+
cuda_is_available()
+
+
-
- +
- - + + diff --git a/dev/reference/dataloader.html b/dev/reference/dataloader.html index 9ca25b802..acef31f73 100644 --- a/dev/reference/dataloader.html +++ b/dev/reference/dataloader.html @@ -1,82 +1,21 @@ - - - - - - - -Data loader. Combines a dataset and a sampler, and provides -single- or multi-process iterators over the dataset. — dataloader • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Data loader. Combines a dataset and a sampler, and provides +single- or multi-process iterators over the dataset. — dataloader • torch - - - - - - - - + + -
-
- -
- -
+
@@ -194,148 +116,113 @@ single- or multi-process iterators over the dataset. single- or multi-process iterators over the dataset.

-
dataloader(
-  dataset,
-  batch_size = 1,
-  shuffle = FALSE,
-  sampler = NULL,
-  batch_sampler = NULL,
-  num_workers = 0,
-  collate_fn = NULL,
-  pin_memory = FALSE,
-  drop_last = FALSE,
-  timeout = -1,
-  worker_init_fn = NULL,
-  worker_globals = NULL,
-  worker_packages = NULL
-)
+
+
dataloader(
+  dataset,
+  batch_size = 1,
+  shuffle = FALSE,
+  sampler = NULL,
+  batch_sampler = NULL,
+  num_workers = 0,
+  collate_fn = NULL,
+  pin_memory = FALSE,
+  drop_last = FALSE,
+  timeout = -1,
+  worker_init_fn = NULL,
+  worker_globals = NULL,
+  worker_packages = NULL
+)
+
-

Arguments

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
dataset

(Dataset): dataset from which to load the data.

batch_size

(int, optional): how many samples per batch to load -(default: 1).

shuffle

(bool, optional): set to TRUE to have the data reshuffled -at every epoch (default: FALSE).

sampler

(Sampler, optional): defines the strategy to draw samples from -the dataset. If specified, shuffle must be False.

batch_sampler

(Sampler, optional): like sampler, but returns a batch of +

+

Arguments

+
dataset
+

(Dataset): dataset from which to load the data.

+
batch_size
+

(int, optional): how many samples per batch to load +(default: 1).

+
shuffle
+

(bool, optional): set to TRUE to have the data reshuffled +at every epoch (default: FALSE).

+
sampler
+

(Sampler, optional): defines the strategy to draw samples from +the dataset. If specified, shuffle must be False.

+
batch_sampler
+

(Sampler, optional): like sampler, but returns a batch of indices at a time. Mutually exclusive with batch_size, -shuffle, sampler, and drop_last.

num_workers

(int, optional): how many subprocesses to use for data +shuffle, sampler, and drop_last.

+
num_workers
+

(int, optional): how many subprocesses to use for data loading. 0 means that the data will be loaded in the main process. -(default: 0)

collate_fn

(callable, optional): merges a list of samples to form a mini-batch.

pin_memory

(bool, optional): If TRUE, the data loader will copy tensors +(default: 0)

+
collate_fn
+

(callable, optional): merges a list of samples to form a mini-batch.

+
pin_memory
+

(bool, optional): If TRUE, the data loader will copy tensors into CUDA pinned memory before returning them. If your data elements are a custom type, or your collate_fn returns a batch that is a custom type -see the example below.

drop_last

(bool, optional): set to TRUE to drop the last incomplete batch, +see the example below.

+
drop_last
+

(bool, optional): set to TRUE to drop the last incomplete batch, if the dataset size is not divisible by the batch size. If FALSE and the size of dataset is not divisible by the batch size, then the last batch -will be smaller. (default: FALSE)

timeout

(numeric, optional): if positive, the timeout value for collecting a batch -from workers. -1 means no timeout. (default: -1)

worker_init_fn

(callable, optional): If not NULL, this will be called on each +will be smaller. (default: FALSE)

+
timeout
+

(numeric, optional): if positive, the timeout value for collecting a batch +from workers. -1 means no timeout. (default: -1)

+
worker_init_fn
+

(callable, optional): If not NULL, this will be called on each worker subprocess with the worker id (an int in [1, num_workers]) as -input, after seeding and before data loading. (default: NULL)

worker_globals

(list or character vector, optional) only used when +input, after seeding and before data loading. (default: NULL)

+
worker_globals
+

(list or character vector, optional) only used when num_workers > 0. If a character vector, then objects with those names are copied from the global environment to the workers. If a named list, then this list is copied and attached to the worker global environment. Notice -that the objects are copied only once at the worker initialization.

worker_packages

(character vector, optional) Only used if num_workers > 0 +that the objects are copied only once at the worker initialization.

+
worker_packages
+

(character vector, optional) Only used if num_workers > 0 optional character vector naming packages that should be loaded in -each worker.

- -

Parallel data loading

- +each worker.

+
+
+

Parallel data loading

When using num_workers > 0 data loading will happen in parallel for each worker. Note that batches are taken in parallel and not observations.

-

The worker initialization process happens in the following order:

    -
  • num_workers R sessions are initialized.

  • -
- -

Then in each worker we perform the following actions:

    -
  • the torch library is loaded.

  • -
  • a random seed is set both using set.seed() and using torch_manual_seed.

  • +

    The worker initialization process happens in the following order:

    • num_workers R sessions are initialized.

    • +

    Then in each worker we perform the following actions:

    • the torch library is loaded.

    • +
    • a random seed is set both using set.seed() and using torch_manual_seed.

    • packages passed to the worker_packages argument are loaded.

    • objects passed trough the worker_globals parameters are copied into the global environment.

    • the worker_init function is ran with an id argument.

    • the dataset fetcher is copied to the worker.

    • -
    - +
+
-
- +
- - + + diff --git a/dev/reference/dataloader_make_iter.html b/dev/reference/dataloader_make_iter.html index 89a9efbd0..ee2e22ad3 100644 --- a/dev/reference/dataloader_make_iter.html +++ b/dev/reference/dataloader_make_iter.html @@ -1,79 +1,18 @@ - - - - - - - -Creates an iterator from a DataLoader — dataloader_make_iter • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Creates an iterator from a DataLoader — dataloader_make_iter • torch - - - - - - + + - - -
-
- -
- -
+
@@ -189,43 +111,37 @@

Creates an iterator from a DataLoader

-
dataloader_make_iter(dataloader)
- -

Arguments

- - - - - - -
dataloader

a dataloader object.

+
+
dataloader_make_iter(dataloader)
+
+
+

Arguments

+
dataloader
+

a dataloader object.

+
+
-
- +
- - + + diff --git a/dev/reference/dataloader_next.html b/dev/reference/dataloader_next.html index 80f6c8574..64dd7e08e 100644 --- a/dev/reference/dataloader_next.html +++ b/dev/reference/dataloader_next.html @@ -1,79 +1,18 @@ - - - - - - - -Get the next element of a dataloader iterator — dataloader_next • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Get the next element of a dataloader iterator — dataloader_next • torch - - - - - - + + - - -
-
- -
- -
+
@@ -189,47 +111,39 @@

Get the next element of a dataloader iterator

-
dataloader_next(iter, completed = NULL)
- -

Arguments

- - - - - - - - - - -
iter

a DataLoader iter created with dataloader_make_iter.

completed

the returned value when the iterator is exhausted.

+
+
dataloader_next(iter, completed = NULL)
+
+
+

Arguments

+
iter
+

a DataLoader iter created with dataloader_make_iter.

+
completed
+

the returned value when the iterator is exhausted.

+
+
-
- +
- - + + diff --git a/dev/reference/dataset.html b/dev/reference/dataset.html index f181d1bbe..d6d449251 100644 --- a/dev/reference/dataset.html +++ b/dev/reference/dataset.html @@ -1,84 +1,23 @@ - - - - - - - -Helper function to create an R6 class that inherits from the abstract Dataset class — dataset • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Helper function to create an R6 class that inherits from the abstract Dataset class — dataset • torch - - - - - - - - - - - - - - - - - + + -
-
- -
- -
+
@@ -196,57 +118,46 @@ class. All subclasses should overwrite the .getitem() method, which fetching a data sample for a given key. Subclasses could also optionally overwrite .length(), which is expected to return the size of the dataset (e.g. number of samples) used by many sampler implementations -and the default options of dataloader().

+and the default options of dataloader().

-
dataset(
-  name = NULL,
-  inherit = Dataset,
-  ...,
-  private = NULL,
-  active = NULL,
-  parent_env = parent.frame()
-)
- -

Arguments

- - - - - - - - - - - - - - - - - - - - - - - - - - -
name

a name for the dataset. It it's also used as the class -for it.

inherit

you can optionally inherit from a dataset when creating a -new dataset.

...

public methods for the dataset class

private

passed to R6::R6Class().

active

passed to R6::R6Class().

parent_env

An environment to use as the parent of newly-created -objects.

- -

Note

+
+
dataset(
+  name = NULL,
+  inherit = Dataset,
+  ...,
+  private = NULL,
+  active = NULL,
+  parent_env = parent.frame()
+)
+
-

dataloader() by default constructs a index +

+

Arguments

+
name
+

a name for the dataset. It it's also used as the class +for it.

+
inherit
+

you can optionally inherit from a dataset when creating a +new dataset.

+
...
+

public methods for the dataset class

+
private
+

passed to R6::R6Class().

+
active
+

passed to R6::R6Class().

+
parent_env
+

An environment to use as the parent of newly-created +objects.

+
+
+

Note

+

dataloader() by default constructs a index sampler that yields integral indices. To make it work with a map-style dataset with non-integral indices/keys, a custom sampler must be provided.

-

Get a batch of observations

- +
+
+

Get a batch of observations

@@ -256,32 +167,29 @@ of observations (eg, subsetting a tensor by multiple indexes at once is faster t subsetting once for each index), in this case you can implement a .getbatch method that will be used instead of .getitem when getting a batch of observations within the dataloader.

+
+
-
- +
- - + + diff --git a/dev/reference/dataset_subset.html b/dev/reference/dataset_subset.html index 0a12fbb29..7002c7ce5 100644 --- a/dev/reference/dataset_subset.html +++ b/dev/reference/dataset_subset.html @@ -1,79 +1,18 @@ - - - - - - - -Dataset Subset — dataset_subset • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Dataset Subset — dataset_subset • torch - - - - - - + + - - -
-
- -
- -
+
@@ -189,47 +111,39 @@

Subset of a dataset at specified indices.

-
dataset_subset(dataset, indices)
- -

Arguments

- - - - - - - - - - -
dataset

(Dataset): The whole Dataset

indices

(sequence): Indices in the whole set selected for subset

+
+
dataset_subset(dataset, indices)
+
+
+

Arguments

+
dataset
+

(Dataset): The whole Dataset

+
indices
+

(sequence): Indices in the whole set selected for subset

+
+
-
- +
- - + + diff --git a/dev/reference/default_dtype.html b/dev/reference/default_dtype.html index 499dbef72..66fe2b6ed 100644 --- a/dev/reference/default_dtype.html +++ b/dev/reference/default_dtype.html @@ -1,79 +1,18 @@ - - - - - - - -Gets and sets the default floating point dtype. — torch_set_default_dtype • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Gets and sets the default floating point dtype. — torch_set_default_dtype • torch - - - - - - + + - - -
-
- -
- -
+
@@ -189,46 +111,40 @@

Gets and sets the default floating point dtype.

-
torch_set_default_dtype(d)
+    
+
torch_set_default_dtype(d)
 
-torch_get_default_dtype()
- -

Arguments

- - - - - - -
d

The default floating point dtype to set. Initially set to -torch_float().

+torch_get_default_dtype()
+
+
+

Arguments

+
d
+

The default floating point dtype to set. Initially set to +torch_float().

+
+ -
- +
- - + + diff --git a/dev/reference/dependent.html b/dev/reference/dependent.html deleted file mode 100644 index 651142394..000000000 --- a/dev/reference/dependent.html +++ /dev/null @@ -1,277 +0,0 @@ - - - - - - - - -Public interface -TODO: check .GreaterThan and other classes, -which are not instanced — dependent • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - -
- -
-
- - -
-

Public interface -TODO: check .GreaterThan and other classes, -which are not instanced

-
- -
dependent
- - -

Format

- -

An object of class torch_Dependent (inherits from torch_Constraint, R6) of length 4.

- -
- -
- - -
- - -
-

Site built with pkgdown 1.6.1.

-
- -
-
- - - - - - - - diff --git a/dev/reference/distr_bernoulli.html b/dev/reference/distr_bernoulli.html index 59b0e4b24..bcc26dbf7 100644 --- a/dev/reference/distr_bernoulli.html +++ b/dev/reference/distr_bernoulli.html @@ -1,88 +1,27 @@ - - - - - - - -Creates a Bernoulli distribution parameterized by probs +<!-- Generated by pkgdown: do not edit by hand --><html lang="en"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Creates a Bernoulli distribution parameterized by probs or logits (but not both). Samples are binary (0 or 1). They take the value 1 with probability p -and 0 with probability 1 - p. — distr_bernoulli • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + -
-
- -
- -
+
@@ -204,69 +126,62 @@ Samples are binary (0 or 1). They take the value 1 with probability and 0 with probability 1 - p.

-
distr_bernoulli(probs = NULL, logits = NULL, validate_args = NULL)
- -

Arguments

- - - - - - - - - - - - - - -
probs

(numeric or torch_tensor): the probability of sampling 1

logits

(numeric or torch_tensor): the log-odds of sampling 1

validate_args

whether to validate arguments or not.

- -

See also

+
+
distr_bernoulli(probs = NULL, logits = NULL, validate_args = NULL)
+
-

Distribution for details on the available methods.

+
+

Arguments

+
probs
+

(numeric or torch_tensor): the probability of sampling 1

+
logits
+

(numeric or torch_tensor): the log-odds of sampling 1

+
validate_args
+

whether to validate arguments or not.

+
+
+

See also

+

Distribution for details on the available methods.

Other distributions: -distr_chi2(), -distr_gamma(), -distr_multivariate_normal(), -distr_normal(), -distr_poisson()

+distr_chi2(), +distr_gamma(), +distr_multivariate_normal(), +distr_normal(), +distr_poisson()

+
-

Examples

-
if (torch_is_installed()) {
-m <- distr_bernoulli(0.3)
-m$sample()  # 30% chance 1; 70% chance 0
-}
-#> torch_tensor
-#>  0
-#> [ CPUFloatType{1} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+m <- distr_bernoulli(0.3)
+m$sample()  # 30% chance 1; 70% chance 0
+}
+#> torch_tensor
+#>  0
+#> [ CPUFloatType{1} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/distr_categorical.html b/dev/reference/distr_categorical.html index efdb8a565..a945f39fb 100644 --- a/dev/reference/distr_categorical.html +++ b/dev/reference/distr_categorical.html @@ -1,82 +1,21 @@ - - - - - - - -Creates a categorical distribution parameterized by either probs or -logits (but not both). — distr_categorical • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Creates a categorical distribution parameterized by either probs or +logits (but not both). — distr_categorical • torch - - - - - - - - + + -
-
- -
- -
+
@@ -194,28 +116,22 @@ logits (but not both)." /> logits (but not both).

-
distr_categorical(probs = NULL, logits = NULL, validate_args = NULL)
- -

Arguments

- - - - - - - - - - - - - - -
probs

(Tensor): event probabilities

logits

(Tensor): event log probabilities (unnormalized)

validate_args

Additional arguments

- -

Note

+
+
distr_categorical(probs = NULL, logits = NULL, validate_args = NULL)
+
-

It is equivalent to the distribution that torch_multinomial() +

+

Arguments

+
probs
+

(Tensor): event probabilities

+
logits
+

(Tensor): event log probabilities (unnormalized)

+
validate_args
+

Additional arguments

+
+
+

Note

+

It is equivalent to the distribution that torch_multinomial() samples from.

Samples are integers from \(\{0, \ldots, K-1\}\) where K is probs$size(-1).

If probs is 1-dimensional with length-K, each element is the relative probability @@ -229,43 +145,42 @@ The logits argument will be interpreted as unnormalized log probabi and can therefore be any real number. It will likewise be normalized so that the resulting probabilities sum to 1 along the last dimension. attr:logits will return this normalized value.

-

See also: torch_multinomial()

+

See also: torch_multinomial()

+
-

Examples

-
if (torch_is_installed()) {
-m <- distr_categorical(torch_tensor(c(0.25, 0.25, 0.25, 0.25)))
-m$sample()  # equal probability of 1,2,3,4
-
-}
-#> torch_tensor
-#> 3
-#> [ CPULongType{} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+m <- distr_categorical(torch_tensor(c(0.25, 0.25, 0.25, 0.25)))
+m$sample()  # equal probability of 1,2,3,4
+
+}
+#> torch_tensor
+#> 4
+#> [ CPULongType{} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/distr_chi2.html b/dev/reference/distr_chi2.html index 358357c31..b1b23fc2f 100644 --- a/dev/reference/distr_chi2.html +++ b/dev/reference/distr_chi2.html @@ -1,82 +1,21 @@ - - - - - - - -Creates a Chi2 distribution parameterized by shape parameter df. -This is exactly equivalent to distr_gamma(alpha=0.5*df, beta=0.5) — distr_chi2 • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Creates a Chi2 distribution parameterized by shape parameter df. +This is exactly equivalent to distr_gamma(alpha=0.5*df, beta=0.5) — distr_chi2 • torch - - - - - - - - + + -
-
- -
- -
+
@@ -194,67 +116,62 @@ This is exactly equivalent to distr_gamma(alpha=0.5*df, beta=0.5)distr_gamma(alpha=0.5*df, beta=0.5)

-
distr_chi2(df, validate_args = NULL)
- -

Arguments

- - - - - - - - - - -
df

(float or torch_tensor): shape parameter of the distribution

validate_args

whether to validate arguments or not.

- -

See also

+
+
distr_chi2(df, validate_args = NULL)
+
-

Distribution for details on the available methods.

+
+

Arguments

+
df
+

(float or torch_tensor): shape parameter of the distribution

+
validate_args
+

whether to validate arguments or not.

+
+
+

See also

+

Distribution for details on the available methods.

Other distributions: -distr_bernoulli(), -distr_gamma(), -distr_multivariate_normal(), -distr_normal(), -distr_poisson()

+distr_bernoulli(), +distr_gamma(), +distr_multivariate_normal(), +distr_normal(), +distr_poisson()

+
-

Examples

-
if (torch_is_installed()) {
-m <- distr_chi2(torch_tensor(1.0))
-m$sample()  # Chi2 distributed with shape df=1
-torch_tensor(0.1046)
-
-}
-#> torch_tensor
-#>  0.1046
-#> [ CPUFloatType{1} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+m <- distr_chi2(torch_tensor(1.0))
+m$sample()  # Chi2 distributed with shape df=1
+torch_tensor(0.1046)
+
+}
+#> torch_tensor
+#>  0.1046
+#> [ CPUFloatType{1} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/distr_gamma.html b/dev/reference/distr_gamma.html index eedc3afb7..ab9bd31e1 100644 --- a/dev/reference/distr_gamma.html +++ b/dev/reference/distr_gamma.html @@ -1,79 +1,18 @@ - - - - - - - -Creates a Gamma distribution parameterized by shape concentration and rate. — distr_gamma • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Creates a Gamma distribution parameterized by shape concentration and rate. — distr_gamma • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,71 +111,64 @@

Creates a Gamma distribution parameterized by shape concentration and rate.

-
distr_gamma(concentration, rate, validate_args = NULL)
- -

Arguments

- - - - - - - - - - - - - - -
concentration

(float or Tensor): shape parameter of the distribution -(often referred to as alpha)

rate

(float or Tensor): rate = 1 / scale of the distribution -(often referred to as beta)

validate_args

whether to validate arguments or not.

- -

See also

+
+
distr_gamma(concentration, rate, validate_args = NULL)
+
-

Distribution for details on the available methods.

+
+

Arguments

+
concentration
+

(float or Tensor): shape parameter of the distribution +(often referred to as alpha)

+
rate
+

(float or Tensor): rate = 1 / scale of the distribution +(often referred to as beta)

+
validate_args
+

whether to validate arguments or not.

+
+
+

See also

+

Distribution for details on the available methods.

Other distributions: -distr_bernoulli(), -distr_chi2(), -distr_multivariate_normal(), -distr_normal(), -distr_poisson()

+distr_bernoulli(), +distr_chi2(), +distr_multivariate_normal(), +distr_normal(), +distr_poisson()

+
-

Examples

-
if (torch_is_installed()) {
-m <- distr_gamma(torch_tensor(1.0), torch_tensor(1.0))
-m$sample()  # Gamma distributed with concentration=1 and rate=1
-}
-#> torch_tensor
-#>  3.5967
-#> [ CPUFloatType{1} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+m <- distr_gamma(torch_tensor(1.0), torch_tensor(1.0))
+m$sample()  # Gamma distributed with concentration=1 and rate=1
+}
+#> torch_tensor
+#>  0.5747
+#> [ CPUFloatType{1} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/distr_mixture_same_family.html b/dev/reference/distr_mixture_same_family.html index 9097570d6..ee34d4ec8 100644 --- a/dev/reference/distr_mixture_same_family.html +++ b/dev/reference/distr_mixture_same_family.html @@ -1,84 +1,23 @@ - - - - - - - -Mixture of components in the same family — distr_mixture_same_family • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Mixture of components in the same family — distr_mixture_same_family • torch - - - - - - - - + + -
-
- -
- -
+
@@ -199,71 +121,63 @@ distribution, i.e., a Distribution with a rightmost batch shape (equal to [k]) which indexes each (batch of) component.

-
distr_mixture_same_family(
-  mixture_distribution,
-  component_distribution,
-  validate_args = NULL
-)
+
+
distr_mixture_same_family(
+  mixture_distribution,
+  component_distribution,
+  validate_args = NULL
+)
+
-

Arguments

- - - - - - - - - - - - - - -
mixture_distribution

torch_distributions.Categorical-like +

+

Arguments

+
mixture_distribution
+

torch_distributions.Categorical-like instance. Manages the probability of selecting component. The number of categories must match the rightmost batch dimension of the component_distribution. Must have either scalar batch_shape or batch_shape matching -component_distribution.batch_shape[:-1]

component_distribution

torch_distributions.Distribution-like -instance. Right-most batch dimension indexes component.

validate_args

Additional arguments

- - -

Examples

-
if (torch_is_installed()) {
-# Construct Gaussian Mixture Model in 1D consisting of 5 equally
-# weighted normal distributions
-mix <- distr_categorical(torch_ones(5))
-comp <- distr_normal(torch_randn(5), torch_rand(5))
-gmm <- distr_mixture_same_family(mix, comp)
-
-}
-
+component_distribution.batch_shape[:-1]

+
component_distribution
+

torch_distributions.Distribution-like +instance. Right-most batch dimension indexes component.

+
validate_args
+

Additional arguments

+
+ +
+

Examples

+
if (torch_is_installed()) {
+# Construct Gaussian Mixture Model in 1D consisting of 5 equally
+# weighted normal distributions
+mix <- distr_categorical(torch_ones(5))
+comp <- distr_normal(torch_randn(5), torch_rand(5))
+gmm <- distr_mixture_same_family(mix, comp)
+
+}
+
+
+
-
- +
- - + + diff --git a/dev/reference/distr_multivariate_normal.html b/dev/reference/distr_multivariate_normal.html index e0755d785..5a2082120 100644 --- a/dev/reference/distr_multivariate_normal.html +++ b/dev/reference/distr_multivariate_normal.html @@ -1,80 +1,19 @@ - - - - - - - -Gaussian distribution — distr_multivariate_normal • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Gaussian distribution — distr_multivariate_normal • torch - - - - - - + + - - -
-
- -
- -
+
@@ -191,41 +113,31 @@ parameterized by a mean vector and a covariance matrix." /> parameterized by a mean vector and a covariance matrix.

-
distr_multivariate_normal(
-  loc,
-  covariance_matrix = NULL,
-  precision_matrix = NULL,
-  scale_tril = NULL,
-  validate_args = NULL
-)
- -

Arguments

- - - - - - - - - - - - - - - - - - - - - - -
loc

(Tensor): mean of the distribution

covariance_matrix

(Tensor): positive-definite covariance matrix

precision_matrix

(Tensor): positive-definite precision matrix

scale_tril

(Tensor): lower-triangular factor of covariance, with positive-valued diagonal

validate_args

Bool wether to validate the arguments or not.

- -

Details

+
+
distr_multivariate_normal(
+  loc,
+  covariance_matrix = NULL,
+  precision_matrix = NULL,
+  scale_tril = NULL,
+  validate_args = NULL
+)
+
+
+

Arguments

+
loc
+

(Tensor): mean of the distribution

+
covariance_matrix
+

(Tensor): positive-definite covariance matrix

+
precision_matrix
+

(Tensor): positive-definite precision matrix

+
scale_tril
+

(Tensor): lower-triangular factor of covariance, with positive-valued diagonal

+
validate_args
+

Bool wether to validate the arguments or not.

+
+
+

Details

The multivariate normal distribution can be parameterized either in terms of a positive definite covariance matrix \(\mathbf{\Sigma}\) or a positive definite precision matrix \(\mathbf{\Sigma}^{-1}\) @@ -233,62 +145,63 @@ or a lower-triangular matrix \(\mathbf{L}\) with positive-valued diagonal entries, such that \(\mathbf{\Sigma} = \mathbf{L}\mathbf{L}^\top\). This triangular matrix can be obtained via e.g. Cholesky decomposition of the covariance.

-

Note

- +
+
+

Note

Only one of covariance_matrix or precision_matrix or scale_tril can be specified. Using scale_tril will be more efficient: all computations internally are based on scale_tril. If covariance_matrix or precision_matrix is passed instead, it is only used to compute the corresponding lower triangular matrices using a Cholesky decomposition.

-

See also

- -

Distribution for details on the available methods.

+
+
+

See also

+

Distribution for details on the available methods.

Other distributions: -distr_bernoulli(), -distr_chi2(), -distr_gamma(), -distr_normal(), -distr_poisson()

+distr_bernoulli(), +distr_chi2(), +distr_gamma(), +distr_normal(), +distr_poisson()

+
-

Examples

-
if (torch_is_installed()) {
-m <- distr_multivariate_normal(torch_zeros(2), torch_eye(2))
-m$sample()  # normally distributed with mean=`[0,0]` and covariance_matrix=`I`
-
-
-
-}
-#> torch_tensor
-#> -0.5606
-#> -1.9732
-#> [ CPUFloatType{2} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+m <- distr_multivariate_normal(torch_zeros(2), torch_eye(2))
+m$sample()  # normally distributed with mean=`[0,0]` and covariance_matrix=`I`
+
+
+
+}
+#> torch_tensor
+#>  0.7704
+#> -0.2949
+#> [ CPUFloatType{2} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/distr_normal.html b/dev/reference/distr_normal.html index 99a44e639..a0f8549e4 100644 --- a/dev/reference/distr_normal.html +++ b/dev/reference/distr_normal.html @@ -1,82 +1,21 @@ - - - - - - - -Creates a normal (also called Gaussian) distribution parameterized by -loc and scale. — distr_normal • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Creates a normal (also called Gaussian) distribution parameterized by +loc and scale. — distr_normal • torch - - - - - + + - - - -
-
- -
- -
+
@@ -194,75 +116,68 @@ loc and scale." /> loc and scale.

-
distr_normal(loc, scale, validate_args = NULL)
- -

Arguments

- - - - - - - - - - - - - - -
loc

(float or Tensor): mean of the distribution (often referred to as mu)

scale

(float or Tensor): standard deviation of the distribution (often referred to as sigma)

validate_args

Additional arguments

- -

Value

+
+
distr_normal(loc, scale, validate_args = NULL)
+
+
+

Arguments

+
loc
+

(float or Tensor): mean of the distribution (often referred to as mu)

+
scale
+

(float or Tensor): standard deviation of the distribution (often referred to as sigma)

+
validate_args
+

Additional arguments

+
+
+

Value

Object of torch_Normal class

-

See also

- -

Distribution for details on the available methods.

+
+
+

See also

+

Distribution for details on the available methods.

Other distributions: -distr_bernoulli(), -distr_chi2(), -distr_gamma(), -distr_multivariate_normal(), -distr_poisson()

+distr_bernoulli(), +distr_chi2(), +distr_gamma(), +distr_multivariate_normal(), +distr_poisson()

+
-

Examples

-
if (torch_is_installed()) {
-m <- distr_normal(loc = 0, scale = 1)
-m$sample()  # normally distributed with loc=0 and scale=1
-
-
-}
-#> torch_tensor
-#> 0.01 *
-#>  6.6750
-#> [ CPUFloatType{1} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+m <- distr_normal(loc = 0, scale = 1)
+m$sample()  # normally distributed with loc=0 and scale=1
+
+
+}
+#> torch_tensor
+#> -0.7069
+#> [ CPUFloatType{1} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/distr_poisson.html b/dev/reference/distr_poisson.html index ff3377d08..ba21e38ae 100644 --- a/dev/reference/distr_poisson.html +++ b/dev/reference/distr_poisson.html @@ -1,82 +1,21 @@ - - - - - - - -Creates a Poisson distribution parameterized by rate, the rate parameter. — distr_poisson • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Creates a Poisson distribution parameterized by rate, the rate parameter. — distr_poisson • torch - - - - - - - - - - - - - - - - - + + -
-
- -
- -
+
@@ -195,65 +117,60 @@ $$ $$

-
distr_poisson(rate, validate_args = NULL)
- -

Arguments

- - - - - - - - - - -
rate

(numeric, torch_tensor): the rate parameter

validate_args

whether to validate arguments or not.

- -

See also

+
+
distr_poisson(rate, validate_args = NULL)
+
-

Distribution for details on the available methods.

+
+

Arguments

+
rate
+

(numeric, torch_tensor): the rate parameter

+
validate_args
+

whether to validate arguments or not.

+
+
+

See also

+

Distribution for details on the available methods.

Other distributions: -distr_bernoulli(), -distr_chi2(), -distr_gamma(), -distr_multivariate_normal(), -distr_normal()

+distr_bernoulli(), +distr_chi2(), +distr_gamma(), +distr_multivariate_normal(), +distr_normal()

+
-

Examples

-
if (torch_is_installed()) {
-m <- distr_poisson(torch_tensor(4))
-m$sample()
-}
-#> torch_tensor
-#>  5
-#> [ CPUFloatType{1} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+m <- distr_poisson(torch_tensor(4))
+m$sample()
+}
+#> torch_tensor
+#>  3
+#> [ CPUFloatType{1} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/enumerate.dataloader.html b/dev/reference/enumerate.dataloader.html index f45e028a8..33b201a48 100644 --- a/dev/reference/enumerate.dataloader.html +++ b/dev/reference/enumerate.dataloader.html @@ -1,79 +1,18 @@ - - - - - - - -Enumerate an iterator — enumerate.dataloader • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Enumerate an iterator — enumerate.dataloader • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,52 +111,42 @@

Enumerate an iterator

-
# S3 method for dataloader
-enumerate(x, max_len = 1e+06, ...)
- -

Arguments

- - - - - - - - - - - - - - -
x

the generator to enumerate.

max_len

maximum number of iterations.

...

passed to specific methods.

+
+
# S3 method for dataloader
+enumerate(x, max_len = 1e+06, ...)
+
+
+

Arguments

+
x
+

the generator to enumerate.

+
max_len
+

maximum number of iterations.

+
...
+

passed to specific methods.

+
+
-
- +
- - + + diff --git a/dev/reference/enumerate.html b/dev/reference/enumerate.html index 3ed181548..604b0ce3d 100644 --- a/dev/reference/enumerate.html +++ b/dev/reference/enumerate.html @@ -1,79 +1,18 @@ - - - - - - - -Enumerate an iterator — enumerate • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Enumerate an iterator — enumerate • torch - - - - - - + + - - -
-
- -
- -
+
@@ -189,47 +111,39 @@

Enumerate an iterator

-
enumerate(x, ...)
- -

Arguments

- - - - - - - - - - -
x

the generator to enumerate.

...

passed to specific methods.

+
+
enumerate(x, ...)
+
+
+

Arguments

+
x
+

the generator to enumerate.

+
...
+

passed to specific methods.

+
+
-
- +
- - + + diff --git a/dev/reference/figures/torch-full.png b/dev/reference/figures/torch-full.png deleted file mode 100644 index 61d24b86074b110f4cf3298f417c4148938c8f05..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1697283 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

L6&UrfrNQjR z#)IwBL7E%y+fDwFx3*-$lv~fr(tlo`xujd`Yt6CP+x)Bc2+lox;XF&V--MTJ&0O~$ z7hMQVJNHy}^1ADH^5eJNKKJr#@xJr6jNfnme7-F)yk`H($Ng`wUpu+`@1L!||Ge8{ z!Qo=;uzW%U%X`PokuX^$PtsCqzzx-!Vcvrvo#}@Xlmwe-|{d!uhz9M$d?+U(nJr%T$B-D9i;?_y+m253c`~ASQ_mF&Ql+|O~v(;Au3_1Qj zdL6zouhi#+O|7{@nYH`hJg@4#izA=wo#&l%*fw#;^ZopV*VC&+(q-6|t?D>l_RNY& zo&V>d-)CBne%$y?UF(l!S$*7_YpSj*pU>GDs(-Iwb(qPs{!QCl-^Y2bpZ29QZF%*U zd>IA?hJqMKyH)GUt+mTNs^%||Uj?a8u--Nl0u%xi7xxX9^1Wm$@NHYR{v)^uI&B& zTV4L}i<0NO`HCm__B=RWlkdFGDU>~amGB0QJA#v+7To?&Th4qy>EE6kC(KLj6Q|GG z>2+uCvw4^8HkUNairTNAw#)T&!tC2ipRrZ%yRxrh_U)JH%)1O2N_PKzRQ=L@;r)%L zTTkp{uq@{bj{fs%&Q)*mFN-$6zq0xKp6oLdjbG-g?A>(p<-I^~#$^D{G-h4R-hOV% z7ctNOp@~K&kN55TuXA_D*OR;6AJA;pP^Jrq!9d+?_ipvfL7VVnemGXU_^|at~ zuY+u3R@N=H$l%N@yS4%J1=lhQxTl4JRs@1#gtG|h^ zoPYDnufFH=iX8OsR;)f3y|uWhdWL4L=YI8|`t_|Tld#PEIZ zUM=-&j~BENOfN|<)sp`9Guv>N>5|`$XZN1I9mjX?WZUOc1{!|t&MPObSh+wauDUSh z#PrGB#~*Dli%2!oA%p({~Ykw`0KwP-*fsl zJkRj>HP5*0^{3wWORrSf<)7B-SXG1e62CXKzN-u#hHJP9>AncByPjtoe(ATW?M~1V zET@|n=D*+NF*mmV^1{|HQnhs^lejh&O$^eSVKg_y?7+%vxyG^qc@7!Q{Pu5F@A_9H z*#6eS>wEIi(A(BhrhX=-Mi=F`zi{&}oRGTy4V(Y7y2}gW|Ge?>U1)H?tK89zvG?U8 z=`x0C|Li``HJ)`jcK!JhhFyvaBAd^*HEy%pzxrICuW9!8pMq;{-woS)%x?9D-RJ9< zt5u6V{9G{aw8y{F?gieaZ$5O_r(LqwEtJSOKY?GTe_8kWwf5!xD--fV64oTdSNQxp zvyFShL{6r^o7d0K{<`?}yNjQ%-(9xz%!@0M-%LZ3?f&lqx1S86!6U>4hrZle`&lJc z{UvC_L2lmN?UC}gsuq^XMrm2soHt${9sI>GP&=yu0&R^f1G^ zlK#T@V3RrFq1j(=28(ZNQh32_Z&uzf1m_4VDaKg>UV zQBrirvp&!Eb#*6FU-MlrE9vF>)>l{Ze8t!QamaO`C|M9E) z>H5}drswQ(zQ6U?y(ih}cTk#)2GS5O-}!oL?PZl%<(FBWr?d3ZSLN7mi89aK84_Rp z!X$mQe83Hcr4sLa*H)*;C+>Lt;b!hXsaiD=p7TN_Gh7)XB($G0H-A`@H@8q=CRfp= zxph0U+mx+VhdV4wVuh^*I1*c{Sr_msuXKC+bsyIHbB3v?@~k7JH2B9%88^6WS?!z_ZkK%&QY+qRUPkQ3!5j0@z;+h2d4 z`FZEUxOc`6|Mz@-+CJyygZvU-ckS=RGpyA9UVhTH@#pH6#QQ&PT#+4o|wL{qpTuzwZkndHxZ24zS_zGVnsCElbKhqT)fBKB2zzUrM$2 z|L=`oXT87Opv)tBrsI@B&Bxt84_)l4Q+U8`m^Wim)Z+Xr84mGURUF@cet%dla`fv? z#vc1VL%yO@4`$Rb%vg1>CVsBw_HA>d`}{6-PPID1`MS-E_jviN^{Ol1tPVW0a{h}a z+|2gnfA?+J?brEN?ab@kC*iIM;|V~`|hiIi`K38cmD_e)v~ht!DY{V)jqdk zx^;ftS-0Sq7kgivS%2AlU9kRFpWyE{o^xjWUVn5)_>rj|SD!Dlmv}4P_ou}9fvW3D zd7I+ddbbO@!%UvJ$K|u-PXAKnX>M*Eo3?<7f#Jap1<;o21BDl}x9{`6YE^qbx?K12 z(hJY!Di+yod;Ia1d3^8tDUSlqu~fW#ADq7S-^+iDc6RxSl@Am3Hb{y8T52WmH!6sk zGq-$3^%{8z(>d!_S={Ni-gM}l_W%3ucC~)I{%qFDueUBW`ab%1c2`AnpY8tO^)hnF zPP+oKOqScGzg&C#x!v07to|gIf?BDd4%hpbRagSMhuKk?b^=)pgmJbaR&7*GQK4p*0%eXYXjd8}$eINGq z9d@(dQ+T|4*4~{_cda{{Cw*KPAQNzOvH01)%iOA$owKl-a-wv4uUP3b-ko=A4>zxV z&#msJ4O$ww*W}>+g0=gODO}KIE05(n>}W3V<-Vf*k$BF~dvEl~x#fygcHQ!LtxKE2`Q3}#WNXW+E8c%Q*>e7LE!W3= z2e&Eg(Vn~Ymrq7GkJS&K71Oy2*x7l`&#Y=noIbx&{Lt5%T?ajmwcS~_=0o1!i}M~@ zOWU;vzR&*kdNC)fd+C9t?`^iS&ENU`ipGt?zOpIH<9A2DU-397w)WZ9mD$S=9|`&X zUL~}}{`a$Dp?^Kg|4S?UOsw7$J4s6G%iZ)hSG>*YJXcSbkqA8Nb4&kal;?GG>$~od zZS?B);O>}>7IlIL~LDkspKTI;5T_V;TiT3MUFyl`mF8Tn6l->un@uNKp+w^x@Z z^G?C(zsa>$EUV82lzv;fNT&L%#g@+RH?7`I4XSm2DR5EV_GQ_-srT&4>wm-qDO(2L z<~C((j9Hg_X8-j+>%AT4yzKp0l7BNsTl}8L#gDCAQ&a12tPP)5yY$-IZhQN0>+Y_< z)3E+ln!WtD7lDm;JF52X%`>0z+tT=9j;M$H>GcZ|S3Fton6d5H{KgOtiN1F=Uy1~4 zDtb&_N&d3eeK~*q2IKR8E4R$u`%(Mx_hWzGPl%m=KF;!AByYXn-{)`JR=*5fq5Vwk zOH=9h7w*^YF5CHLR+sT>IZ&f_`B}g6m>|%`;uP?J^n)2+Z>{wP?Ze~09(#Jr&r|z+ ze?7Ryz4i5lO$q*b37>w}&-=dn$|2>;kF~kq^M9Ns`|xFZ=gWI~+mDq@eP`Pe>sY8C zwWBP;D#VAq;oIOAehQIo^(xMQ-l?{>BQn^l|0lQVy+G(%f#|6;3eG47Z5igV51dV8w4ym0@I zE!X+47koJ{Sw8<~`G<(MhJ_Y6#jpKXALgaL`&d`;T7Ifk^Y1=!#~tErjqmF075ZLp zNbfj&<4Q+J@w~04XD8JK z&PuSm$8)prg~{D5UxP}&uk~x;Sb5LfUWfDl4Y{&2M`UyICIn`b7)6SI?RyLU27kpmNbhvNt98W9e%k%m6%auoK z?5o?eZ$9VmqWIYYCfDyy-*-NSV+KEa@bi;*%k2{Q4@Z6%eRw|npO@K@Vr%K(|Bo9s zRG+Vr`}5##+p34f1^2t}>QYZ|h&YZ?hrJ{nulwQmw_mmOtu~t-rhT z(#sjtTTy-Zf<^PHM{Ocll&cDBw#cWvqe#Hj;K25dPvx;7y?yo61|FV41%ma$z z2Y!^luCJfM7-GVA#WwzfmAZipTfH)qjqtyj%Pm&%o7C+4clSuP$ghX#F&pd6AMZZ% z>A3Hquvc}{{whCm(C5*1Zw(0gQ9SAQeU+ArzZbv#WUP35Md9kj_ilQwfAF85{g3}n zTP2z6k$dmOG6#F@UH|X@fdy4{SEVLAcG_F`aL@le(?yonJy@e#_3&5pmOX~{AB|@S z+Ir?s`C>n7?z@SQHp9tA@FW{(%jWq|(|w;O?aH31*J}6ufbds!>v=2KpG$xG|6=~{ zqneO|2YMvs`k4I8>*D3to8=YJe{!hYff4XMr`Z|lJ za*yw2|0^vkS^mFPZ_O!Nd37gkDL?V}XOdzMZ8If4RL0gdzkj>^;P+=+&#mw;7g@1C zFJ91g^M-Jp`^wXPy}9xB;cuDy+i!*)^(uTIS*E?ruKQVs#TD+|m%3K0+mL;+tnaBz z^o;4drhnM?M%3+o{;TCT*V~%5U8&U%O7HwFbol#O`(=vOLZ<(A`jodXyY^)Dx!Lv0 z3V%%hl^>b<^%CpejK9~vo_RL+W^&q%>)<^&_R-+3B6Rbp#LDY=bJbs3dFrnL*PzVl zFQ4g7e=(0)Td4Z5eZg_Y`A^(9KFWXpySY`_NV@3yR{y>kocVZOvb`#8|Id5;GCB1zs}`S#vot+sY#()Hf4>2X$#RJ`N7K(e-@D~Y zpJdtBlYc{Q+*qn_9JEp5NY+z>6)W#ut!P>PpXadQhKI7fzfBE9A1t-onYX~oGeDRv zsVw@H+@tG9pL>)W9{ZkdefiFL53MyarEjl%Us-MPTtc+u*yFgvyQdVD=bBED%bsO- zi?{Xf1e3jdDSO1`|I7=Set*aO^D(jg_D>tu-T0GgoA~tHlbz{z=6n6RnzsD+T1biU z1=5WKowee7Nm^yE*QHIMSp|N%$d&wgxi9B`pSQB^<@)7j@BSb4TRZ=0TUy=pIrmGa zzIQEd=Dxf%`AhTr;>Jb4m;cysS^bTe@t?ZQ1|1*WO_#+*TU1|uE!y|`)Tv&Ak-WLMZZ!Thgf=l17z@(=I+PV|5E^G15f zm%9Zk&uu&DY$zRav)EVYN$cw`y|1cd_shj=h4|b}&Z>WP*W3N<%Kvsx9-sMO@mp?I z;oNuGZ#d3>*st<(tHI#{(|7NYQy45#d+J%5On$EBTw=O<_$8M*4SG6zU1(gcuRfY2lbU2cMKQrj6ZPZ#JP&ITMZmao5Qzn zHsbsEX17RxyX@7I(^eVu&G;PjaQa&tZtD|4bLYM*4L-iaX4=Bb6*~{)UrE>cyZ3Ko zaq~7WWv;Vtx1NbS^gMaDWApiShtB&xTyr{H?R)>Lb+YoWp7{uInQuvY*AchjU3AsG zUAM1x%sY7Iw%*IHlk)P)cG-Z2jd;K{Xu^u?d4Hun%{_kI+m$`jZ2Q~WD`szxTM^qn zjepw=zu7SlroY>46z#(zQf72>!MQogJkf^)=M^#}pU-!zTbBLlFq?VLM{WM(=8C)9 z0|Ucs*sjDyU)&cH9=7hczTDXv?|MI3Pi~63`#|sO*4tC3zxq_{-emQA)rRwI#i1vX zu08tf>`-5mzA$j2$HPCD*BuW#vCsV9#KMNjd`ZXmPXD;^UFjuz*23k>ZSTeI&!6;h z?YFBhH%@*m>+2!fRCKk{iCxn0VydiXZhiE?mEPn*Zge-t8;5{<^Ka z-hT1FNYD^*45awr11FMz^>=TrShe{5^4IH9Z@sZ7nFU(X{_aNktk3P=Pcl!8$#_;? z`_xJ6w|m`h_kv=za+aitmXB9VP`vx_`Tv`>lh&;Z5r4E~eP_RSuMAJ~t}79a|8H43 zu9zxuUNiH?)Nr=!_m=D~jt^Gs);k^4yGT*`_>Ryehm`;KohjV8aav)7@ZF0YuiQBA zUk_Zk>SnUDP4rHAzg?zFnG)-dERWuQ*S@nb+j7~e^8U^C@{12$_)+nD^Yni^xep)N zar*lEZ>84uf6v+dzSqu}^{4ii@s!uks!QfhS-j{~;QMCYUx&`;WPg>5-T2WvYIn{1 z8QJHTNUQ#h+I;ygWSiLv@b>ouJfJy$l~~Z}POCxPaG6*77w5m(;WB@3{oZH4U!G9p zI~^n&RyXHidHT=0)*lVc@>Xp7k^S}NyS;TEN*8|Me`dL|s;7Y0vikYU1nD;z<&;8il`lfBg5+SUMt=o^geGOk2msPvZ>D{f`l?#sB8DD06 z!KS~h+2rm?$&iU0!o`hqEtmiH5tW&J>wW)=Go|}~&hNMADLVhSZ0E1@%OBQEkG}sg zJInYZ?B5gze%fU3wbfGD*y8NbMFZg)?~sbt!4^D5 zkrn_tWooa-rP4|B0*WnzmtA-+U(sZ@?Qv&SL7nG@<(JO?VYGSk#`Ejlr^iB0-PS)^ z?@<0@j^k~5e;<5x{TB1@`SEwf`}xnCRx(&?@p#{zEEL~g zwRCU%f8iN&k2AmZPOpCF{(07&${vGF-us<{D#HHHd~P@MTlN2)A-8`Y{=4k-`FYxF zR^H0G_H^^}zUE6Gte)+-vhC!(_QJ&Z`|rzte$^+WH}~<|^Yd2+EWGOd{Oh8x{};W_ zzqj<``|oFdhJza9C)1XnKFr9#FvAd>RX|(Dx2o**zqEfXsHR=Zoc?l|uKzV#cE7+? z=EwhSv=?1)qjbv|`6s!{BPHIPu-q>HqUEkpV)^{tVc}5{CPx-d5NXSQxB74Cy+0cl zy^H*7x=&4Nx9)=a4U zemLOxz4ANTMUQ1CI?Vc|(_56oxWGQj`0KtUyB@tM+wZLZXU&e-x__Tf_RjtCJ|jj# z^xpdV{FlEAzV~+-Up}~8I_75e#_GEl&i1|ZDb?L|-tJ!{_w{$HxBXlk8|=1rx@Ba9 z)yu+%^~dip=$G<+F3!I$^5y>iE7g~-3;S6v&^D`&?2q4B+_WqGT)HY~yt?c)_-GV$ z@Mg^eJukLK`+DY2{L&p%RCoJK73esqf@tsmJD#sO7?oS7@rXT9wERfQuKlNN@BR6B z`(NShJb(6%pL#RhzMX$pDDMB&zub32On;D!SWBXt%)ge`$A3EZ?LHO}vwY{W-+QZF zWIjA~T6XaJOw*rjraQAgiXQxWs!sF)Yxd`*yZ&>XjJ~hG?s$vUOH+AYjtG{<>6}eD z7bY963eS=GUh!G-OnLCn>oQkG#rNxdtz4nSVK4kIJ;P|R)AE?LL4RiQA77b} z`&nG6kKGsFqdUIsD7vvR{eSVDa=XuoKjv|{6epLzJ-@_$-R0Q#`Zm++r|t3~CJ?K!LrR&@5_P%B+Ewl4u7n5qXR~K)#H{5;KEU)~`55AQ< zrfc1K)TZ+=s`%j!Ki1!GuWwtogI`Cs_vzuTD?2=XhdyKxENs8G!f$`f@-VA_0_O=a z?%{u8+8pQZOiu5$EAA=xKX=2ge(t`yueToVYdf_`fB)(8wSEUZyo9Cx{eQE!a!cy< z*!w?izlW|2(TdcH?OkeQ7GXAT-5nm;f(B7GcBwPU3CWgzo5IX(FYMiQ_|T1nI|&@l z3P;YUm2BGeQthB{p0mMWZ<%E#2|1^mcd1q+aOd>A4a(d%%S&(Ss#o*=J-$<0_u20G zG_QT(U+d!6KP`Vh?_B=-&FA+mz5o2rH?hYN>%7yyy!=;bp~1A}Q;pL-d+XOrYy>VZ zIw%(P;`1e&A6FYS`Fbi?qQWOBZ8kY_x$;t%;q#N3r;oe+xVhyM&yfYO{R`)Pu9_WI zx&O!2J?azf{j2m&RtY`v40xX3zv^_wbA@Y-n%nnb;~F5bjqN2%ETg0uG@WUt@JEByS=e%p1H4fSjf>gT_EGcR(x;mQ!Lsa{Ki zR;v4R{t1F`^b*c)PuFMspvIsdvt4)gvfFZYP21(`<=$1jQJQ*rflGpKmBE4H+7r** zua!=^&}RL3?}^14kJeip+#6P^GLMD5=(NMTuI~?`S$cC?f>vs;f9+~?)p36BC+)pm z55&Z?S36iwJo_+yb%Wf&^I^HSZ}!LTP6({I#AJJI>AbdMHnUdGW@MT3!)(K*{ee$H zSiT)|`F*t^LB-Zxc}-64(}oGn2X9#Iyt<~wEsG(G=fI~|4BPaDHh&UwUi(w|V506c z!8y7=Hd_cT@Ui!1iON2I_Cnaa)vg~aZCBqdk4-!DX>ZX)uP2*&{FY4n`OE8k-pl%K zvFoxHt>JQeMfGcLsk8sus=k%`!PU!i@BZJD=L`*yApbt0A4?&e*oIm8=jX9LSkAa7 z=kB(gS?}z=n(TSnC;9Ks!_%(6vLc!p+FC+mclDfmHRt{}oBf@;n!NHJ@%7Bb%x#Vpho^*dvc2& zKVQ$6`?o}w@8_4(>_w~n?DSX6+bh4R|JI_S-n`fk?+*4(x9tdz`_C9t`@r$|J=^u= zj6deRJooPYn%fhg3FpesP^SG*Hn+#;w>OtE?2|uG&U|5Ec6HQpvELuwzprBa_h4Uk zVcAAjg*J_r%QY;^u1>uYeJ4|5Mf797{J8ZDs)m{ZtdH={rvqCS6#$5 zzHpFYj`Xiv_HXLGU$+}>{SH$Il%18?U}Dl-YH4Y{sM29;iAW~T?-Pd>c9`&0WEWKU zSe?K8{b2W_tqdoxJ$)hY;eCbY%!Ec)`Mbv(HQSpCRpL5J7VBEIpZfLbd1LPBb*Y8{ zz0VSuXP7o^zkhXla_p-Y9FCl&W6?3>}+)|5D;*F1K=;)Ej*}>5@Q+qPEmU zVZMwvKTA`}dHd!?*S9P5yqnl!DRl0}O_krNjYjkBZRWn3d%C{qSHg{Fu0Q8hs4U9U z?E3Lo_tfv_N0(=M#9Vq4*&(#*)`^FqAq6wqp53`7C87IBuzFAKrb%zEU94?6;#pMp zVukDNxSo}|UE7VPzW(%g`NvJK{|V{OyJvUdx$R18#yxTeZZEUmUHKys8XUnf@N#J0 zqgnaq_lexKtc~B57j5P%|NqR?iqjj#9|+Ii$s)*GJloC3Py6=Smw=4$e8Y^WSHkhXr3&HT0c%{P_A>N3kXAc70tr z&-tI&yaxUkYfRQWvwVC_Xl^`nbnG1+roJ~4Qtz`+`o2y4>7l^( zH@n$Pr#zo~R!sBWFM}rDI_XU|@24~W{PMH<^jj0t3&P=F&%Mo_RVRI5l3nIDhiF|b zgUjv~n{FGmDzV{Qck4&x9ZJ)S3#T!g?ef1qy<^=KIVZ&g)1ACVtB!46t9|&q zQ#DBk#_f95^0OS9*T-MD4M@@bJIw@1VA&x_xxzVs@K`(Pvc z^u|)RiD_kS)wcsqZIUxvd-9wz_fAc7uf?l_YNfb4%Dk&OZ#19yzF6+42K40SRG&ij{_$wwpF1s}a0Ob4|OLbSe$T&$_S z#_%HzRG>v>o25T4xqaCE!?(xhkH+@LzOg#J^YT86dQ+AusVX89Hnh5Lb!k||rnyJg zcBk$h-brraU)G*}DsX6#?cK0Fyo>ujU0R^kWMLMyLC*W?_s#wH4hx-YbhKf!y}Gly zHcIn6V*kQJuPmQ7r|oc6wV!O~vDEE}Jl5pTXsXIn8?} zz3XL<-E3I-DSwY>mW`RztHO*`%HMvJ?`!+8wym^|d3Rc+^77;R)~N40dhhPWzzITs zDwPyYhWq{Vd8wPm=@MW4Kqap7OW2+Vne%y~?qB{T&9I*J!|ls+W9Oe*25BZNHS%mV0{H%Xh*4hoj%mcz9lJ-<^}HGZryAw>(}WeS3B2k-3lKQi9%k z{hGy-)2e$@YKq)JX9s4ME{#v?7dp1yIW{r=veiG;10T+5UYV~vL-gwBPo?TiAFhYT z9@?#%@+7*+jQ609++Oki+{^Wolb11W78iZlxVQMPzsXM1CHBoJk-N0|?>#C$eE692 zx86=IY3=-+Co)s~o3@3Xa{GO0v-8KvV&6`0ev=aYOY*V6UFJPiclK`n8z#Sg;cwm( z#lIKr`crxJ^MWatU(bo1`sak5-M3FuTQ70lZLQkXvdm`Er03bIE51B&nwo96JEt#P z?k~f-eJ>Q3^!#HuQ0`k^_CM)v+Y)Hdyn-jGtp{i2pI^pM$8z95PeS(DXE{^+bhmww zE?psqe zmU~}*5zwr1dsd5C(QWs+e)o5p#)Sw?ef-$KNNKHoaR0lRy&sBSZTMsND*xuRjwitn z{1+)mDc@YKm%i!D!|28$g=cs9?N%z zVQ_7>e{TPG6|;AuIkVc|JiQ$7X>VoD;^@7rOCRJNJQn8m=i|oJu5XSylvMOAHtqAy zzaBa7`7N<&GCWxi!e0d~nZy3kCS!ZSwqLq`=Oid8{Wz9XusiPP`6j*hdwVvl&-{2b zyq@d!^*Ro5-*YW*-vrKO{gBV_=R!$(`M$hlXy66ygEvKU7d*SYxt8IdI)gn|!mhMp zGauf2#{Xmf{F-b2;Na!oA@fRX-8q^TRqaTgf9`d+%#&EI{(_5w`ZhsnJthU(D<3QE zHQBRZ-^*{gBA0f&wNhTaS7TqSFa@%22r(r%P9{+pI6JK=btb4!ishsO^5t9Y4Q z?#;|Ei;l3a6D;Vn%XT$L=h$-debwx9dROOFAA8=py)@m%JZppgtHT%ee0Y^{akAdQ zHRj5eJJvNvc5|pYd~e)oQ@?)7lI$sOb>JoU-U$|;-jei(H$G_ z1QC__t;5v;8f_kk4cgyw)3(LTi3sBO)NW3 z$ngt_nb(WVT~fW-=l%H)(chLwT0Mz;GB4+pQ;=@mwfM^s8Y|tGm0o@`BYUQS3db)-Hy?A*+AC|g{gXd|_XyZJT(1*ZwD5^BN2SmUA{M2^BF; z{Jc9YdgDo}tCoJBw$;43w8K`;F#51J$l3(Vt1ZLXk9+8>X9e4Ye)N?lWx8EiTo|$_6$!Ddm zXO|ysczs9tg3Sf>&nA7nzZX6(SzJ{XeTj)d_rv=G6Z?V}$4Cc0b1eO`%_HDx=9|xH z$FJUAH#w^J_$+(jOKv|SADP)b+te=;Z5HuBXTu$V>)%9k?uZ}D%I!{{T^D!iv;?=# zug_+tKc2k}kb5sJubvs$%o1hfB57qMc6Jy)V};s^nVdz`|>ucpt+9QahBl~=3c*&-$rZsO2S$z40%2; zSioPY+B50vSF_1-YqTn*KKz_mdns+!Ww~R0uPUYU_?$nzkerm7nv&n>{AcHkhWUTh z43*ZZ?vdsE-?c|qednLta^+su}t^S9q;rH7-zw#WhT^Y+RmvylHrC@q9!7@}CVo z0ZxINOGk7j-M<(SjObB=E^2x{VzcbW2fvH#cesh2H!oDcnaUMN+z zDEzYMo7eWm8?J9tJG6fPdY$vk3-*M{J=~m-yw-iX`xDRZ*A^GtK1~g=csb9+MUG!Q zXG*+@`IE}xuWyB3hkrS^j@A=o_6;IL&c+k?cNR^{XF$I~tsuc6Hll)8(fhD_q?jrMdq_D9iq#iXngg zyEkg0zR)Dr3@`83I(~k8bNT}7ANyW=jd`I$eSGuvlQ4nNnI-l+L0$L_w-fkSNm zx<|IntI_rsTbZu(`_$D)5rtFb48F>VV*l^-MqYOR{IX{6(#2=r|C{e#*7;9j0jv7{ z8tdKvjh2b;)mFQc3xLVl6DVA~b+RT4di*+>%VwoJI zq&Iw7SbFB1>#kX>)q9RlQM+!MTe@=b`NX9kSsJAEcgwH0`NbGhdeM2^-0B$f#n$)V zH^U3Jto4Y}KRxjC+na(6_KXkqM}ms~;BMVLuir`jdvNb{!L1`~6%!p?>sX}Q%|bR? zyn4JtxhPOvyr?ilm}5$Zz$(=~F%_>V*B@B^vur*r(9YZuR&(uQ)xCJTxIeT0{Lz;G z;o4X9?WXN)|GTRXe*Vp{?{B*0{Ppg^YD@)}o_iixoEVmD_mU&9tK`vb#xm1a3>z-p z7kJgvYAX{YRIw@d!k!1U%B$NJ{XBL%c=MJR-{q0sdzWu~a@%8b(7H3e@=}4>yPkG3 z?Opm`>{sCIJ#+4TD%`rlBeMPblyxW1KYOfIyiqi>NbJ?m1@4QQBZYHx8KOdYZmS?Pb#Vr*IBzdar>(+3jOo1x*Hf&saej;x$r0_)n!-J@7ZGU zwO{W)l3xE;KyTKZ!m5qWzrJUv`CpR${amT^BuJ}&YxtA{`jA@V)#e31zrA5-c+d2K znL#ghv!(Phw)eFUia(xveEtyg^6#4J6}Fd_TYOu(`EK{UhYgL&Y?AGdoORDPu4|la z=kDWVxjvQemyXRNze0OAPq!@}*Z#I(xRPplMA>tBEpNNq1<^HcHktofW4p!S@S;|U zC)!Vcl+6`6xn0JW?VH!GyPGDzQHqGZ^Zk-jzF9?JK$T6&llaWQd#6AC?@ZnPMusW3 z&_wxUlS7?cvgbroj)bGN9~xs)mjBl|S?T(%U(%TSYL-HPl3`_DJY!v|jhfo0iQ7Yu zwVqqm&9Exu?a$67*B4&%{H~B7$ll6wJaf;BHFmb|bt`l)+}~eqbgJ;+tq%f=W1Caf zfBlnk`zzP))DqRNo=i^JYp>0)6rX;v)?&|plYLK5=HT@84F4D#<}(%?o^|%7MeU;}BKelzoNE4D^j@GC^?cK}a}ysa z^f+(ui>s7mUF0~wk7whC(@tA0J}qu@U9#0qY|DJc-07_HLP1CRvhK#mY2Vrvxc#J^ zyI_^F%&Si}`svEkC)_vYFjKNzoh zJX9eu_s*gh`>r0J-LGlCdcD~+-8Xv|Sk+|v?K{O#lahGJcD3>q`TYK@>#ZDJ*OmSD ziu2xDa8B!jzy0eyf1H+HXE0l8`+8FQ$5qSg1?CrjnD<~-b(B2&hbV^q#&>V}YR!Tq zyRRyUOgwqX&u?#98S3~BTwiy4n(yUKWA+cL%kOo3KeyiHc9gnhf7NTHB8^4M#nh9x zubMJZ;?hc8#`*V_owurZTE2VZ@;;%@i@rxih+FSZdL5^EN#cS)^PXMjP46-Fd;M5( z)VO4(oTKf$?|pa=)HToIfx9O48nZyE7{r4;4@B zd3O1`_N}0xLq4kw6|(M#%{R5+n;3TL*7M|rmsDmge_{MH#y=!PGSX$j`Xx8s+CF^~ z$$F)?yQL>2dS{o#i^um*-{&~(dE=<^&jW9ste)C8>54AD?bkiLrzQ(lSuF}V7i@ob z-9fvY&9A@i%s6BF@s-H!HEIlTHha1C?Td{0-dg`;$=RLo^*6)5>|L9GPluOzube{Q zgRr01{QQ=~^`M>ck3Pe;YuRVhG8;MX)t)cjP<-C_!%X9&h3jPB%kbQ|p{*;o_^9mJ zPx8C&B*uAt{=8w)2?6~}hx-XuX+!8P-kQ99JJu=TYL;3fUuU`EX(Po>@bTfQXYW7;4tmsth z_WQo+E1mG~j;D6K{RYBSV)ORgk6oh7z9=;{$02&&rwD8NqWm50 zVhmmuD-yG0pIzJ>TdkS+!cwR7RD|!G-wxkSuedG6@V=xVyD@*yxAh;chTm`Ny!=e= zdL+YtsRR7}%bo2fy|H>V&(ATIg&El0lLzu*CTb^}mRx7@z|3CF#%qvnv^$g)3c{;`Mg|0`$ScmKYz_^`{B_`^|~878}{zpSvmXMO7V=AQg= z&)RDXyyL4aCcW?cr#@BwpvX;!zl(Eivb!E$-q~>Smhg(pCzv?3p60Ai7M|%RSW{)= z#aX@g6Hn=U6^~B~=7pcvj$U)=`~`~@s~Gj#{dG_4Usu22E-?GB_s(4}{$(iK=-3t& zCTIKRa_zHhukUl6zh=xkm0|mPQlp%7{u!GC$B+Be+lljDe?D>Uy}zFqBs8;KkF60} zZ&SrRul%L@{DxZbHSgFzG&9s??%G_PcJ~;xYah!2?^l${ncSaO%iCbiIAbj+)7tjO zcWsy3Ex6sTW@bU_sSa7*CnYWZuXjXv+Bs>@-+6hC`&UtR>+_F4ov&N0Va+5iu8jm7UI>q3@W*YjTptXiYEYdO!aiFa+H zHVZCZt^A3@D??*hp~vcK<(zBZwb+ zA7-+wN}2n@-Z+)})6Qp^yOzwkyvN4AxnJq&t8|%5pXCo1ollDYYGo=B6=$LGjY;4D z$A#|`mGf5ARot#{i#WU6y6l^oclR#csp5aO-@DUhy?@U`A*QT=&VP68HZ6<2m3uya@`0)Dh95uwt`YFQp~P0samm(# zRXu*WTSDWyWW}oj5fcvN%luh!aE)R>>hrCvL0=-{Jo6q#zS%AoAh$oBWs%q+quMz2 zv)ns*^|o5F{6055>$8iqM??Ny&Er$fUuF}SSXQFCj*0Q>)b_A>pWaL+XxSw&z_D2+Lo7O7~H;)u{|e ze#O`OqN5HUqGclMRxu_8G-`1S>;620AFW08Y9+@n-z=m(r>c?x{1y8l@Nc!&S{zNcM z=lM6$hF7^OvmdTu*<6;p==F_{edoDkFWsji5RX|ttoG&!@-#9u@*IWb{NZ;VW$&_csg*9F=dgxLc(T^9?>=m_tA z(w);W=kq3W=L>8LHvdveuj*cQ^VOoS4RSZWuKjkgPB?Jc`Q+!nry9ko%zu0L$jjL* zc4AX2jnC{Czf!(aH^XFiNt_7pla+SoO$0U^XxN_e`uh2$-3P8*cq6xI{;em`?xzaB zFA(XqZ7&h@V{ACN>5htw^3OBotNuv*u;lsw=I_#N*%Lgz#e7?rU|Ki-=ZtAaHeTnQ zP7BR_6S?AGyk@%hR2x}U$wqt5=+x>GJ`H*0+55C|WV!Ep>7TB8)m(nh`Bgg0t?1D6 z)qFYiKl1N0{VCsYc{87FPq^$~hIw@#=7}ClJpaO?;W~50ZRF7?4|uyzYUR&wZ@e$e zz5M-A>FrIKR)yaf?iK!V`}4AVanl-4h`-tpw)`8yxat(VQO zUcUC~gTCn-^y=Twv3sfTZQG>FAKJG+&GpV$@Axxr*S4VBq3j{oUgjBdbLu0~H*+Hw5$AqT7XlJy@CX+NCHdh+(PZ6B&_8(AJs6cyI_@aSc1#m%qgk1t$1 zd10FEn(v^loin1DvvL7T9dsg$c~<`UK87FS4Eu7=F3XuCmhoZt_d2_}-|x~N7^iRZ z*(d%mz~$WQW2GI}<}4}Pv*6yZjenl@MfKHZ6}a8@y1wql-ZZT3ZO#ewwE{_wn0B=O-sCERwS2ZVuC`VtISdL?S*UZJ9q3!OnB;eCu-Losi_k#xE}Vhp1#s-iznDYkIs4u@3c24D zp&Wb@OuhJq>nATTR?q(6_cH6<KFX?z28% zXNUofA^YuCUw8O+pDq7!`PY30S1v|GEc^8`rf!!!voa&YQqkpanqt>qc`~u#Yxb+` z>g!+EzrT8A?}JGfmU~}}E`DV+uQ)n>b%O}6^_QC!duB2{4e_5Au>SY%7Yz%9Pr5(< zpnGwGma|~>mezFk`juh_6F9ZJEcJK!^I*Qm+*3Ltc}n;IL~+a)*0?8(G@ZA=aoOKIn8unVz>XJWsA2zsGMGR zNq*VhwZaVlEE~*y%gg-N!pF9J;Z1POr9Z!|Vf^6BP$zbP7d%mR|MB!kx}c#N=l1EE zGOtSSn+7~!Xgn;zcaGs@&a*%VGqw$h*A>`zmAuKilkqrV3G>Z)q8X1bzWLb@u=dA+ z%l!-+3r>WKTnzt|)wTWJWAO}!iM4COb)44Ahi`37zqzh>Q;TqHAX8&Pbk(mDK~DDk zyqEV}c(Cb7K#6?*Ub(Z&P1(L(ed@^gevKRNkAz>(Bg2_%SG%$NT>R!~<_?wl&w~!z zdr!*0s<}AkW!Im+V3!U29$C*tUuBreezdX?yJhxX$3?H|B*QY9_~H!K2~U5PznWa0 zZgcy|iIZQond*M!*#4Y;*jhj8e7ybN&-}+3?CR`){;1M7by&LA>i$YO`^D?MpMG|? zYcI0)=YF@VRJ-rO)x8h=Mf+X8FZkE3x0`>xO_lL7aoZBU+Px3H7J{bItSk3HCvT@9 z0(IHXZ*N#ZvuKcB;LD?SdtSeL{`mX5y?o2X?;Mo2ZZ_4ruv13nhrx;8Vy>f|w*k!KdKlgZJm%>FYhwyoPemUo#y&d+eqK{oXeCbna=Q|(o-A^~L)jYNPXjWSxo}cgeHaGE(#k|wT z;mtMw?kuYgC{lY@;eEnWU{mOKO{TNk$_wM(mbbnN-uc(Jd;QL5!WAz~<&XV4`EtSk z>Ztwf4@@u5y}LhVyCSr>oV^HMaxy%-y;+;#k3mB{*8w@V?aQw|_{(p@{NAFDS%ZR?@ zFqBTcykqU{dBL;Gd>&lsd~%krHf?^Z{lBng-aVEEdQ7>0YPXkFC&;||eIcEHc2#+p zlW?8v&Q$fQvosDwHdi|*CtPpc`1o0`_|0>SLb2{mu}sx0rYlSHxjhfWvDZ$?DRDnl zY>;OAabNL8Z6OiU*RG7yrg2tH46Q4fUp`gwW_s_d*F`pa+b*cAnC1{WzxxHVYi!&3 z!-gw%v}rQ_)G0W9^4GifqQB*jZ;$!^{D*aWzI;ZZ|0|t_|GeP-qI?8=a{M*C7_E-_ z{Pw0D!~MQ@F*CHU=bStCa4ac{5M z>h?unYaE`s2D)wtuD|y4ut7`xw}o<7HT@s3L`QrnnEd=j*pjzmJ5GJ`zH)y?;m2*^ zSE6_)t<$>6{@aOh{{CNo0{CWsiCwg>eDlS5E5q%?txaOCWp82oZ}sVl|K~+*($mgu zzt)$dkoJ{Vq0xvZgqJ5lfoaX;*~Z8Zg>8?^vRU9?R#?_S56n>`cyi3zW>SF zY(L&yOuqaevR&@b>b`qDi`n1vzP)pJm;Bwz)B8>C-n88fA1%AK6qa7Ut$B8P^Ln@K zwa>f3)8|KSGFKe`D0$C%KUexx{b|<9JCi57|6A}sCd*^_{xZ(X-zVL6w3V~I(zz%z z^NL;zn(X>NFU4dATj=3)N&hVS7@jEa_sLdU@cD<$&4%37wv^ z*O!`Jm>kXc>dU${_4ls-Yz;QtHZ58HuoQ1d>FPQcwY$cEAc|u7`2-zWBn;|0%Cp zKdEH?-d%sVcpLP0f3n#3^Tb(;Eu}^q()?eaXV_D(QIuDvAwPCPl zeGm=mW@a|B?Js{{{9$&vJ+u1xH_YY1la%ke#r*t`aO3B?hkg2Tg@;bR)|mXx*!6bA z^3BhuJiVx6*8lzR>TKo73qC#hS~@$BrN3m)XI;Ow$}xxi??v0%^)i+--O^-u;rey! zTc;`4(?5#dSbjX<&~B#Ooy_yDcPiCAx#9VXLzTwHmcZogOM6U~ z&EsF${(xtGb)mKC1w%uIwpX|JT$D6GpA@?DB>WO{tOj)@Q?*HvPTN z%4(io-QM-%Qpoyv_7A&23nSOT8(HUHxj?xPCyOZj^@b};Q96e>DPHgwqw>p(3y+P$H>7V?RrD(?2BoI+Ub*gr)-|>=6oya-NKT- z&#!ygnf`s7v+t^@Yx<{?KhqmU*?In5efw9QeO+6_3byb)Ei%`mvSWmOe&yPDTif+q zmRP-prOstR*xQ*MuWrgEN$+-@`Ze09*PMN>EI zOD*^^iSg!{=ZnAde6+m1AVf~JP&#q`qtf?(|frVG_-Wj@bLfd7oMJ;qL{v~HS|)ecA{|kq3XZ_ zGo`eLHPa?m8y)ID?e@~;lVkE;UOO?XLn#)s0-qPUoLV@MrTK8edGG7fqn!4A+WCIM zomH2&=qdeJAzm^+^*`6Kr=Qa@LRN}a`{!Pn9)5ea`zF!ZV$R0^C9e&?E!JyZDN z%;G3BeWtL9S&OyaPiKAnZ(H*{(IsbZ1-+lSVQagR!pgr^JhE(yogMs_e=OWwntH_` zB7X1Z4;80nW40X7XPPbc&Q+hc;%iA%=Mvd{oBwe$-Md-$Z$@vS_6JL$xyRL?cij`4 zcK)VDlHa-7uDWZB6`l*<-TyB9cz*o1J5IKp#ocHBSSK9!?yqG1P?^3)&wl@lO}`5+ zU;Lg}b@8x= zyXTL;zgsOU7w@Ch7vkWiUg1~%?%VQPMXMb)_?xyDK40}Lu=Z~H0k?ZsQWm!N%y_V^ zVp`9}%lEzf4xO8%w0+`g>qiHFtv!D=>fpHW#esO z_c}^9u&Ke_ZucxPQj8@26&ePrmj?Ox(9& z{k~t1f3#)i9sGAPb4kxV{s-2}t#`}E!JAwD(_oo@mxAg2d9myd)ER1S&+@(LU|R8? z`TT+Zwa;yNdnulHH+9`xD&@c1rahSg^(KXy&@cu%9xqt1a#C^nVz(=LwvOW!7OpXVxxaQi#8 zZc4_CplSIJJ(UlgK4Izh{QgVB2Y;`IvHX>r!hTB0LS=FHlfOO6KaS;I-PN_X;qCTq zvFGz^~o=^wg<|sz7_L%p6#jZ8E50>ZS~DRow@zO z+d9oBR%_QjOt`&{M~ba#|Kv^iAK!Ovo@F($YTcaahA!57Vs1bB@b7ZP&#&7bcJtR? z$=Cmy&j_B4TnC?xEZsL1IvaU~bt!l-Zrxpm-{kHLvLLx=49tSp<%G7fm>(s|2@~Z zY$janUBkcVz3S9_)z`h;>(B4MexPani#c|3do#~VHlN&{YP%y;_U(axFLp}vJAC~% zchC8cE3V~CozUn0c47Yg`ZA@p+rGYxa9t3x?cDhvi#I-e9ell9%Kab9$7!iwmh6kR za>_q5ZLZa?{7o$rwrnlrefO%U%4d)#IBrJZ0#mea9O7$>#og;qK(OO-P>HFkN#YnrC!SW zE2BC^uK!-N8iS5j|Mg94Zx^rJ5xVKSky88p?@VSV1kW*cu-Dr*gf~aZy;++py`nm* z_---BLgk-1DHFx){omYSyn2D>npw5R?L}fYSF!poeP3E~W9k!!Yqxh9cUAN(Qao>K zWMs9T-|xL?#Zv=*g$2izJG#G^%`33Ko>s)N0MBX1kXEHkYSf zyQ42OOulWz^Z(U_^ZD-UjJ~z<<@fA7D{Nf1W$AL8>i%fw%75=~%$Vo8;o5K6shbyn zvKDgv_4Vb}`wCjO7dYP5+hCgc;gNRV!`c0N;rDkt_Wh;bjSC<7Jpb~v;iy$_xA5i;cR!bRagt|) zvOEo30)@oBe0U*soB8F0^^f^A+-rNzs%-cW^HuK8XPLJ)vEF&xx3AK_$aGRF!{GKl z%?sDRO|0F-`mel+t-I`E?&qCog?=JtGeeGD(IXUUp zv~=$NN1NaMv%1m!SxI5(>58AbZ0l>(PJjMVlK&)ZOYh3F3)i$?I6dQI;p~phnoo-# zu4Hq~oyXsw^l`tXL$SXvTy&R;lI<>@M_2J+``5C(_W}oGfCE-x-L?EE^|v? zRk*~lU13#o76pAe%FcTsH$-Rs>gOxi=KZUUWZm%j-sjxV#cOT1)>he_vRu7hVeNZe z0|tNXhDHXjDcf%HU9oN7Dm~jdI{gFh^*WLG%ByQf8OOQx99mOaTFB@yIk=r%ATF$&Fo<($6~kCILf`)Wun!tKO2O1F@2nK zZ-=hV_B$nuoo5*D$l1U0pmgR<=F)lc`^&hk7O#(3rF&(C$D!RT&d12LUD|eRl3+Ub z@%^V zDmzm8sQPmcnS<`()4!*^F*Z*-SM}-H#_;*)-+s(q`zLqP+E+WnPGyJWUw>~jZ=1N) zTxUDY|DGZa>!kLEPi(7l*mLdmmY{8!1%HpuKd9Yb$8p~B%gSG0zb!k*^uv|G-stYl z+64G4!Q5_GT~~D~bD!;PrVnploQvOCboN=!oOjiK1n!m9v_;F=@Hkk{TiYDeBrkv7 zrJ}=GVdkZd5Xsgclf?VB57gIQTU%J5zW!`=`o@W+H?A>qvWwljR=p{dpYLaV?P}W% zPj@WX`+_gmyuD$m+3L%?cg$4YmBW5(`rGrr9@jqNE9PCovEowfqPnV!HdQ>wYo9+p zxc~Dev-8ZHLf59*@U2^6)7$v>{0a-DwR}5YJy;)?6nauah5uuT!G=bD_e>s@J5$cL z-eudm<*X^s;l*)o3Ho{N=fZn+_fC6ayIjQjd1Y2}+g$bM=eP5zU#fBstXdkHU-#>W z=Q-b9=3h(InCj+9{Sd5;i@uj$HIF0Z)z)d#KPtwHuv(>9UeIYYbv(4p|MG;5zw7_i z1o)X;|M6%0%Z+n37G3`$_P4Tj(Jn1mcBgq z?q;d z6n!yC3#jyE-g4)l9Ap1dI$ktanem*w3-!qwbd#>#Np%oVYn! zwy%*d`JhX#Po?JW+6D7`O%*EgqD1{Fzy2|Ne7<$=_kTUw4(q+uBMcjRUR@4MV_2Xp zwe^)?pDFJ{?|rW7hc;~y`YRpUkRyB)kQloQs5Rz*ksyvrO?vv$S9Y~F7vQ&i*m zqc7ZLaDyFJ@v>~B|I)AQ!qJh>2k-A@^N4Z{j5jwjClC%a|8dR_mc zud&+$ik9kLS-|}Ghn1Ym%cJ^pKAb*Pc3SHE_Kat*Z~r?Px#!6${|B$v|5W(qd+tZ> zyWGE$4dMRfW&bnai`0AJo7((2&u&kj&;4LI!=9wG%W{_F)qR**ar~pSL4D1BkM*w0 zeSe*ws9kkKH2&0qnB%L@&V9$K@gw?T=7cAVJvZd`rY>jkzhw4OWxZwS;}yc^7csnO zJ(svucRu&OIrY1yd)SK2Wfwdu?tZnmush& zy-QeYXKgWMT_fwO{kGh`)4J0W?({GGdEj(l_BZRRmoKK@+tWXhZNBs;Yu7?Aiwjp{ z4oDwn%2ncJ{>W$kTT4MJ%DW;?ckVi$>tEd5>aJy0-S*47+LC)-^EcO4-gRxKghOxb zHcEItab9*D|Dw`}x@pm~uBp7fF!kro&P#dHhT7Zp*V^W@e$l-m^D3>USLNA$3Db(_ zd-pta{qwQz$GgcDxnkKrP8k2@n)CVG3uIg zyv?iQ+Ryi(6f`Os3vVVn!}=mwi%sv(lV$p_pQ%E&ff+Pr{^jN5@CRqh_b_aqze9vU z!O?AcQ2DlCua)vUtB>zku=V!U{e0^UuQkTXES>8-S7A!eg9UakPV`NB?EdIPRnczC z_cfY%>8q8NE%{nAJ1EQXTkrR+Pu%?y9o!qfM3=AnbMEKrm_4jKdY^yVJPg+k^s95} zWm}TU?U-r1-(T-aN$70uHQkDHHYC4xO**y9OzSN3ZZofsF;8q=s}o4-zTa{E)RJp zUT>!06?C)n#;(axxd+l+Rw^G4WD=_mo6nx^6(_@Lt@B^9>sVO+?Ux5_yVe^lt z;=-;TQ`d=8J&Y^2MtuzG#4Vd+= z_4&8$dATpwTnV4>_W14DL7tL#mnXK{MW1eNxHRp>{M&L1E+h+Ce6YNdEq)>WXQ9N6 zsV@`c7HYje_vzz?`+KVozrGdugqd;X{hi-l|MxUvTQPN#kx<9=)pNy{rM{0n+a^`> z@Mpr)FEiG#WtrUhyyipNl_QD!q*?2Ew_!qo-8R}jbHiG5?G4SA&73zj ze*QUSbA%hyqWh;dyC?@npZdAaXL+vmPqP}ikcAr`?l?KW+_dFUrsxaNp8ThC4D|ia zOTM4i*BlWzi(O!kT~GepPj8GJ{L|PMR{ZU3T z6^kx7p8ayId#QEZl=~@`&sa~0a4IhG5rI7 zf1SX2yDys8m)WipJFuViL)*)9?_%MDbX*?pQIM54yccS!%NP!nGyQO6@Q>bXDZTvX zOXrHyvc`8lJxF}KV#_%jZqW)kOW&nCHixV}tsSu7cMjt`7LB{+k$#ITx!Jce$605l zo-aM?wlpg62uE+XIn$-<^?s>kM^Ze-C<9(BFGT2|-$oHdi!^+ar7iUb( zkl<|QXw%yuke(2EyjJF>hV1*0N1cDwJ$N@wwS1RbsLt3@(h~i^fMrLL^{K5k0N}mRU$pC!&>hbg7dKSq)xe?bUZav2EF#|HWqN?>A>l zvf9^s2r+m`?+x63G1I2MKm6ytt=ijBX}7$u5<8<{#eT_a=)o+IE&LzRy*@HfvVi+IQFA9CLC!z~1!tw1f`R?aphL z^^;vz?Jara`o8mvD$kRyYddb;`p!E2ZgaRytvuiRdW$W^{I3NW?71F@FSFj=zaBRI zTpbNt>$KMQbn&lkjDK_*($|BAM_(Qlt9$+K`Q!5U)=kIH`#Bw7+EQyOk&znvu_}7! zq}OxLANRfx8DcPP+OB(%b=Ty2bxh4VmCroc@nN5SRm4i!zZ)+b7cDu)aM+uF!7_{e z{ARWtIxiQoh}-UH&T2gO==0pSPp(WC^tz>c?za}>WOI8jzC@KxZ|)qpW)XSdWqkj- zm$v*LzY8*KpY^PE`Zt$vA1{5osq^4c_pwjU6Iec&Y?%1rcoW;|Pdf8X-%Q^nt5>IQ z$?*7F>HXZ0g6-ELZiFixKi5@LmwNAhS>&p3Nex>fm}b7)+?(~dp?~@5Z55K81#iuE z+|$yGp8VCa=Ce}5+i5GLSgvhreo}m@eQCrx+sBQQCcdw)pz9>>KlomSr86 zyBg12q1*6(!t>wYmiW}D>9D4FRQI#no5dM^STe+K&xo|Pxxm3C3 z{)9a@mx{W6k96=j-&Pm)CE};R`nRvII&A%0w{OADcig@ETMqmY?^xgc@!F!lQ7rOm zuKp8ickRu!`pe<8*UoG9;;$8vo43`fGknn4xk0A6$vNnCb>}hdGMDI*Q`*N2^tG1P zUteUUdY8H9^55kjH!1(u-}m9e+rxkF%>EV2uzu#dH+3nncKNMpScCD^=2btxz2Rc8 zXL(@FkOSJ)eR<>L_K(`-djz)6w^$;x;g@{grC6(D50B4X|0HB;Uvjr*MMzv`r}eJV zBc~=P-&*8yZ&iCq%KjzVH>@T;&i#=UaH{{s<^`vj`d7T&asE)_9rq5F=>3+tre~+^ zyni(CPJ`Q4S8b(#Cxomg$=DZ6Q2D(&nf0fwgtgq$Ea#t6Nk<(#y65YgrL8`9H8Ebd zAerOFk)`b$7Rn_{Rz{wC8EuhT(jwoR%3||6{Yd4t%1PPnTN)ecuQ$acn}jXibSI7T zPlf%d9QBS|Q?t8G$v;0G4oH#TYP}^kJ@Ry^Wptd|1ID5^TYglXW{lK6=4&4u*Rq+t zPowu;a~-GhEY-ky|GgjVeY1#BAw#zGRr{sq@276MS6RK)YR?|=zt86^jk@-p>Bk;% z(LI*O_Pf_tO3&M~b^Wzz+a6lB%N^40-^cH+x6gdfF}Z7z4Es4AxG%Hb%@5zORqYNd zRcgab?$66*{87eW&-UOHXdtla%Ny5<=X1>;`M=vQ)VZ>ezRvrCjYSk@4-${R;dYn>n=Bvzzw!6Pj(|v*1OyTIuSHB+c z;1R2RUcCB2ym$IHMuCfRf9BX9DPEBC+jDVtqrc_uvxkyo-+R_xV7S1}d$B(0hs5=3 z+f(=I@_*gRRl@LkeT%bM?TuqEPIk`M;7(WZkma_oDY>zsZdy^%Z&&_DR~LmvGoHyf z?Piz0>yO0w6P0JLcduBJ=esAQr+G|Qm|wZJgmGU@ z70>;WyT1!gUQ2Gieye#GKd9etzubCvI=scs9S@5G+n1mNF}M!QX4sPfUGvud-B$Yj zuGf+lg=z8g-&y}qQF?7xeKGV!a9aTD(h7mZhjG{Q9FIq92b#NHJE-;c;7kzc`ZMj9qRQE3 z%7*iodZh2MN%v9GUMF?uif(r4OBpYh?}6LbI>t?rUn%$3NG#{4fxG*&X|Jy+&r30x zXrAr=f~ei zep&LP{^t$P7wnVIo0has4^NL)Z@*pUrqKWVWzi#6-fvEA;-V5uIzPTyyk)Vj=i7Yo z^NZ*4&p*EWw#20G(JMde-L-0-9`{|a=IGSzvw}^785(Xw=Esk}hHjI+(z+JbSDI&n zItXA_^eAf2*S_bEFRSxwY+uT1Zn%c&cife4xjqrQSnKyWM_4DXENiS3oOU7n{kzZIFC#3N+5W21_8HS>?)bZjVZGr0^^138 z6&z=;Ha+m<=A$n+RzAL)8|!|^E3cV-^Ov8+o9e$s)z$HayZr4+TrmCd)+_W7)qi<({(-2weZzB^UnO6ysw4KZfky)T;j`u9@X2zk_u$F$3fqS3 zj5{hoV~Ed|>mLN2moSZeeZae1rqXK*pYPnk`0~yYqbFN7b9A~3os5!N_c6ME|0md5 zfS{-PmVbA}yuHDueSZ79F9kEUU!A?rF5my~zDYusb8DAtG=18q6l2WxZsV5+G5eOi zobx|-_lwh0|9vd}X>%mpE_1`__5OdSeSI=xtJ2v+Y1LN~9UeCJiit@q{{P1HSmVtj ziLTdY-SsQ2DT!inJ(d2d`KZ7y*^W;^$qsx|XBr4xPEve#vL)B_<=nk){{C;id}nNK zS@L-4^L^&?WL|7tWpmu-qS)FZ-p1tmm*V^Ln12c#(6Z2FIuIwap~kV{Si)BgyX@Aw zSII9PtrakuzhGy~=Hu&nZEmg4dHQnhSM$Wzz5IP|%>O;=+Pki;o%PPiO8Y-|tg{Un z^bc9xvb%YE-Q|WuU5lOvKJRC2jN3I`-u2^EhI!lfmcCv8&OiLW&b}9)et-P*`hN4_ z-|{Q_PRm_Qei7GJ{kSCk`$gD5-(cESo_wgSL1b2;Aq^4M}ljdNAak%*{=6Ei+pPK~Z?ntI{0 zbnUv{XEM8e-@SVDeg7J98-Hfc>ipezSiLuXH_uzRZ&SgBhs+vwa+}udSu};M*5sK? zN%i^GdG=GcI^Rj&>$~c^5YzeTwK`^1*Vi%5y%e73-ub7yz#_hWjq9&_r|L3F?ye6% zonalke$Mvm>$k4WnjULwRla^nWpw$g^Q+?Q>)Ez_-?HESV}$$p)Gv4X>Q6SVi@qju zZ(aDg?UVDLd)4o)lbgYyzw=k}k6o+nJ8CBzFV4A>Y{mAVnsHC^uFcVlzdMRDV0lP{()xJbrM6UA~5`?(2`uh5sM_cHPx3AeFIvO_v-2H|9msy;VpqRy~jM7x#VW5r#IS&pPBDo_1aH5(J3(0 zxnUVw?4Rm&i_h#)4`UMG^|3g#A)uu>mwRR9m&Nt^H6F?H3uQ$kpn@&0L-dEC}A6K{F+E<&Gc9&y5#u{Yh%BD9{cYb-;>gpM5V}| zUmoYOzqQo$V%@H@v(|?6yN3vWcwAW$%6nzEW!+KN)w}}FIN%%;C98Y#oix!o_p9xC=2_uin*R>z5Z3vW%^_HqDlp? zZ8iIpFYl=RrT^YL-IwRjACu1GC12vq<+vH0fByHrz+Uovg|CRiS{cb#bnw#7xm9u(PqWCWJPPdlcP4wy$6Jv zY}P7fgx~snEoS|^efxA*Kj(-&I632M>eO9&=cAMV8cn>U z8$F#-cx(72t>ay+W)F7zpYQNk3Y8P+uZCNmj&t0(~l{CdUI`_ zoyhfK7q=gkn;V!9P5M8_ng7wU#qSSK?0(Oid+%@-;~%32bD#3E_i?awmGgFaEsuc= zBotq&sV)<2c+c|TJcCUxs4|eVtro0%drtD-kAJHRwykYk=_hqNqg}qd`xFOn@7X6i zbEh0$T$Ew$|8wV+nHuSHx6Zut&gPZ>^o{dV_a`&li1Z2c{j{4^=1QK(*~JT|_poW- zUpv|8hxUW`%&JR=_k>yWygcJ_YgTdQ@l7$E&kkQ|Jad|1;^G@t-&VHuO?zA#_Se55 zbOGD;iPn>q7d&B(tE{j5zh?1mw{161Xup=|Z;%Sx_$L} zGh5F}Rq@!qzZI0Ld%piz<(cB=i~YW=wpDQCjjw;R;#Rtw)7QMO%WC98)i3YwOiZ1#@||SQSbcoi4y<9 zD#~Ks?o7UDk)6KJKF##Oqq&aDw%7D*+qC50afR|2mD@9_-!ks|xVG~AhAqC#uJe@M ztGj-^`a9~ko!ue*pvJ^|mbESSQ>644Z)cijx>r(f`}(aDt~jU5z0gmX;Ql?c@?yj# zuU(65qz&s7mBLKUXFYAZy)mG3(fVCKA3vSS@i5}zor%f5|MeG&EuDVtN9^>}8#4+f z9Dm&&czNn)=Tg}Nb>+WQ_I*Bapi$TM^v~KFojvE5u2Zj?soux+W!>5J2OrMWd;j(F zt)+{1el5@Bys6MwbT)3m(WTMpAA7I=W!?AaRCM6{_tjzbybnwn{w2ef5oC$Nb`_a| z)*gRm{3FxwKkM$coJDq3kEB48+mCOYY;K(Fw<}Zkk<#~VB^M$;Ub<$e=h(kzSDSf_ zwcf5>M+N51zPtH!an|Rx=XM+p&$}-+_oLeFX@P?OzSgFjF0H)X`?64zchw8w_jlCU zzkOYN!TrNVjs5o)Ogp7F_o!-D%c;qacV?>m=~9@~Bcc8G>SM?69iMD2n2PzF*p^!& z->4&f_So~>X0i0dhw*Pzz8_ENxhrOU@#~&+g{-qof0OLzN^728sK0uC%FjEmG<5G? zm$Ra_r9}%0LzUYR~)aSQLJ_%laxkp!St@*QeuXmm*e&a3kt+MOc&h6{IZ*I&#%lRXF z?YYkhbMEciyeH$J@)x%`7mpubSo3b}+w1SDSndk5zYF^|>tE!QxVag&R|Ts!lI%vz1@23M6uiDsSU?+u5&K9Ul)A9N?mHn z_G!&_7p}F6oe@-deP`K|nCa0Q3KJB!CrHn#kCQ*{-M5y7?^jlcm%G%|klnp9`AgXf z*1lSh%`;_Vszrws(}S<-JAcdDPxp8G^78XWuh{(VYb*Af_ExI>khvmQqZ*sdH0$Y7 zx%G+1C*O{n*D5s8{WZhZi!(lcbaZ3sEL9O+x=pJ$D`5ZESzAxtI`s7F=Vwb=A4z>U zSvU2q+2d)_4ZZ8_^Gp0wXKe}oV`O^zZO7edIlcelGA@Ll>Rf9zxA5D6x#eN^FZ`^n zy6yLG?%A~lR_kJSOsw5xzPfS0VZiRNuz9P~mA{=>6&0d=b*b6Tl3GdD)2Dg=uhaR^ zI{kik{@#E7g+Kqfvz>b9IhXN6H$z>@uFbz6?CSLdN5s~fuu5F(N=@}P)(7)?5yoHZ9@&uKKlWs{P_uFDY7XxZbtzr^MOJ zk`wDQbFZCCJRg`d_uwAccL#E&i~V};R(Vn6R;Q-pbD?vY$5XaUjX4{+a(kz9WBrT9 z_``O^7uYKToEBMde*O{hV?lerLcc}x3&*$f{|Cm~vTRtDWO2jdd-4g#eNiUz56+wZ zyizdX`Pu5Y>(b8`z6i?lbaTrLxV4DceAn90#upWpAG-PjMOe>l&z$RUPKeXZX3won zv$zfWo~|n5eJohL)Mo4Y^Ky@CS2c5RJDc3lUix~Xm+4L8?+S0W7V|84Yms`SST}05 zy*jT!vfa0nTc>^4qj89T)3qY*txorqOZq4 zl!n(c{8mdp&VS_I#af1Y3=jU#diUlT12{6K7QvdZQ&#`{_C}j=59fjUjo@+8st?5< zRv(|={9Eq+`Iwj@ZohXjQzLjzUwZOodVmg7gP2?7jbN{GzMp!r^R16YtF+I5-?G~B zz0HLc**B^tUJlt7d%NmPdsT>eU)~3q#UCRB_!v_C9@|~&Z{GW~{Qa91c0v;la`9hk zym@Nz{}uoD*vywVDVw)?-!=WL+f978{dn(B3E_0JxY2PS;_bX?vqJpbjQTd~w^`l^ z+NJ#M&dN*MIaX9PT$K;M8^*($Ba$9+%x&-0qmA?KL|vV?Q{#9;j{e26suJ-F-*;WP zq&+XkRPMCKB+vP4pFj6pu>5=EcafKI?D{fAV{=ho@|J50J?_KY5fe$UVhc{-;;O9Am z)-RlA`4G&I7qwk?_6lpi*gkXl*$)%NrO~wOn16y97O6q9|YN zGJW&UQ(^OKMHCLmyqOm~KmK^%%${uz1rErsuZr*bVzxfv`t_AHyB#?EV>?{I8GYUD@+2us2R*;<^5Ji|0SL{I<97<2BZQ zdux`>d^Pv|)4d%J`j_@bJpHRTzw}C=%I>$Bk?CTqVwk0b<62wdVIx}=X>WoUjM(Qu6Xtv%W1!)o)(86%Ts@28-FXRUi*0! z|K9ry@1^F~zjWU5^2Pi|yO_VPyYO$`C2Pi-_a*7yC&P!4p1}_L)nqtOQ(eY!;5FkO zz5_==b;FmLn}2^iXC2>Rzwdw6oZR-g>x2#zvP)a~FAbg|6Z_=DmhE z>+DSj(;tU_=O4(w^V7$sC~f}a=yJx>`9hZhX65wGiIZA?GCS&fX5p==Q`n4x-0Ru1 z4?3~l-)NuGoO5;2lwbDti(lBiKJ(y$ESFPDtA#G`ST28DcYK1gyTZ$wFW0Y33@S}1eb@K#R?n09x_2I)7dt;$ zFyh~x?}Dv+%5N=tx88R4ga`f`wU|PZO&rA~H4n}yz3}?u!e5396cxN53m-hq`orpy zqy4PoaV%My#}ip1AG!xk-6V90QLHG)lGD|uv{vkMDUmXP_^vRuUk^E;ko0!k9_toE#Ap|o08_J?4&-oPw2rpkMo>4 zirz~!POT3+>^@cO)yF@1t9N|bJLfw~*t(amt8};P2wmuJ`SMno;}E06_nj^_SsriB z3uWDxU#|EdiaGPvNtv%_`t39;r=*?ll2YgWn8d#Ah^*MZiFW_%N>u-H=8T%iIrWPWq(;_QhNU< z6V5L+9t#({FWr-VaQ1JT^G$(2o1CVwM>M1#ui3gb=cml3@MoW|MXznIlhr9$^#8fo z*R5x!&6&FO*zJEiYV>klqU*j*e-^E39qm;$vGESeHouqY*;70AeipnKzRvq|r9{io zguef?otTSk_b*Cca8LffjKl5up%3KOKR)ay^?EV8|AS?(@As$6T5SvZUG4GSwS3=w zU3mFa1zRa=yW;1!H&G1sd=K_J|EoUmqVY2O$7_$xA35{O#4W2}ICo#JcX9uxyH@|Y zPqg~=?F>5Z?((Ehb%)ydd5@Obn(ML47(H4RGu@r*$B*TFl@}v`%RftA z-`YQqHDF_O^~~kUZdbm|`DL?DuQT`k%@5Y6kDY0(zhn108)vKX|-s@!v0!C7*h%?wPgEy!5G%@3Yjd31+9VKc$;CwSN0~P4}hxgil{>r~)YP-X(j_W3r=C*1ysaA*7dJ!M~S zyL<~i=jZ1=T_v&ib_@M{zE(cr>x;Mx z-i*8Y@BO-Tl;e6scmBq*7tuEsJ=`A3QffQ*wsD|%ZwvcJl`|6==D2hIdLFm!bm7f@q z?sW#`n_<^Vsuni?e^;rnLGEmNxW&&y7iOe4JzMvEPJd(Vt~(J5t1t8Ui2azg`af5E z^;gi0e%Xgz)dBp>KLQ#4XYJbj`v=ik1p0VQGtg|;gYF`{Y zfADs{z4Ukceex48pSJq8_4gTOy}&i|N@x6fXK`2U|C_x(`6ndLkGCxQaq(LHVLtnr ztA87P@%N6~{Op7F^9Ww+KY#Wlrl&rSSeLJ^b?$?(uDijNJjRt1J7gG({ssSMi z>8bO&7kqYY-855Rk9H=5_j7R>hDwGX+vdExHZP4~*RQ`4Q{LKm|5cp&dZTG~|I-^D z`xX|-o%#GJYf|y_cdc!;-&z}QNp9s^VEQz}uWu^5VYu)2YqqnGA8&Xk%Mep}@iFM2 z)nnayzgJ%@dvEyHwBfo>dD;KNu!E4kKGBAr<14=7+3n5G7c$qz?+5iBj{C><#an)3 zs(CW;w1A`VdDb@%S$Ti$nIxhcJo!%8>$jIa-?X);Z+=7V-o=tk3|V(BTboYrdwTCsYPFcnMT-n~ zwXK=kvt_0KKJY%z&p+#A-N_XyuNt4{d~2A$b-}h;+3l;%zOQI=@!Z49|1OaC-Yphk zohlCDtq%^maON^396S*G){fUzFtX$9@x#qkG7khjHb4JasU5EUNwr~H@}&fcCxxa9 za_wv{D4q6tknx<8y~Qx*^}egyE!Lb~xBu`{uY6sG@7Jw%U(MExR{E7S;l#cah1|Y4 zpAYkNe|MV}t=W@dqp#of=JHRjdzINN@!5MnxjF}y?YU!d~&r}gWP_w$OQ7r%pAu`{!m zF)+Mm`*7>!xp(f@VW%m=!9}g=ko{yf9 zeJW!`ap{k%zm8mDc@VwKoOidH${pq^hvRc!vb?+TV!N)|*_NfH4f%(ZJS`L$_ovzK z6O33i<T7r`KRkZCe7>ne-p!K-=gG2LFRF3TSo-p} zPjTdVGybF(pNyo8`fg3uH_xc9xS64S_?FLw#R~3+Zuf<`y*T-qQMcgH=Z$<*Z`I`_ zdwW~kB>Aro{bL<_UCFj^s$EuohMSAq$I@v_86Q8GXEpge!{$>v>zwubGh749S3B5O zswpr1c|Lo(_IZ2N7vk49KbD`rJ^c6gV-X53Rx!>;RZF_e*Z1aKX zzV^LuAp^2g-`-`mVtx?M_~YWsbMKmAOYpAzgspz^AJJ~|UN|CzN(H?uht+cz0&KF-`qPURG7F1?jOcPjN|>uwcVpL_WH=A)ah z>nBfalj4i2DcvViC-o$L1Jxj%!?eGCCb)L zp?}W3F#ISx*V!*R|65hT;X@3spY)y=|Ge+IL*CtMKRQ1@FXpZJW!v(3ZnJe$ph^0V zIjRQAvLA}NV{PU3#N_&PZH*I&&(&G9f771-Z``%dF$w1+Zj@=~{9?B5m*l%^%g_Bv zyV)du(>yTw>ZY=vQszu1JEi6cul77AwRi2Jn9C_DQ`kS)c)lo*@O1%e@ruW-7%g-1o&(mV3cGgIJ z6pvP4X4@;N%JLy?QER%q zX@C8?ShTcDH6S}_kKLE^hW5+#Z_NtcD@WPFr}cX6_qe%1X;<%8=IbsI&w2f> zhk-$X!PCVtMDNvqwH1sutFBM2{&mp3@bcI9$Dhmo`m&<%M)NMw1E7=l>Nn*%2Z7sO zbLF9f>aUnU$L{$s*mFLZ`g&Wc@Ye?~n=5XAl>XSruE)+`awF+nkk#!|>{9c%Z@Ojv zJm>cA#V3PVIpNJJ{AGbs4$+^FJ}-9F%hijEa(2s|S!VWHL*w?h50P%SHeO%%D5g&xzWhx`i zYCmQSj9XsTZ@uTrQa=~n+v%L#Poe^U1x58fY-|&ma&GSLuW$KI%JHY&_#MeCd&?@S z+cqMYo#WHZ37?w}7ydi*qjpR9n|D`|I2WdDsc1POJ@r()T*E#y_R?oNqn4RYe)>zy zT? zw|-!~`;W&Cx0=UWUr*31yZbp;%Q_+4VIGV1mbLOrKff-x@x1nX%#o76EA}Ut9dWp< zRn)a8|75vJU-6HZcAD&E@>`isd|pve{K`-3dD;6fV%H~q=r4-$`S5@9_jMPi#fDct z*zUjATkGVmpqGK0bf@N=blcU#$1>?1L!v=}&;fJa8x6ewE-!S>xp~ZtE%}gk3j^~T z9*&n!{Fh%gG27v3@I~Tb5(mGu%1sk5hUq&m9Bbe`Hc9v7u1%+=t?~+*d)NNk%=CTN z?|q-PqKTeFI!IWOZ@nC>2LbSo$48#Cp^k?C(0}|7S+$c`r~K+Hp45A8(QtOVi&1a z1jrS|+?bc&E2;nNXZ2n#dFl7TM|dpRH$R{G{mz&ss&aP)>49Ht)$@w>FooLen z!M9Ei^Jm^U&RS+Py{FqFjHAo;#EKf*az8<_$A-2oKQ_zd?)%1b+UJ6_@V76e-gEk2 z89Z5V{kg^*@6#>+^CI7`(ck)9`6l0Vzh_oQCdo6qERH`u{k_?j9{E{kKTdiqe=uBb zzx40)t=*{&n;Ghu4&1(Gwp}iEt6{6t!T=4CvUZ_ATp(rzTT*rMUgi&64EgLI?ugFb ztp1Um-(LLvuJ5fC5AGnt>9m`R-N^^f!?>1YrpI<@6h${Ry6B5wK1;N zcFBeGw`W(_`wFnLd=T2#_hw>J>Y*7bUs)E}PG0Z(qnA7W;9pk8yQQ-8uZrJ!e!Ake z=c;a5!KYd49@Z-xBlm5DVQ2MU=``p7)_51zX{~itBr9QW~ zcl+}mfwMwkKQ^2wZS4G%DQ73#tC@E6AXET_a9s(k+`U zb2iKDe|5NR+K2Sw=sW%AZcSG0<7~L*t$%BsF*pCVk1}hzTKD+exEy9*d3)Kd`-L%Y zw_2SQ(@t<*^fd2yee{phb|*S-m95$^|LFC%>(b}d@Xq}7=9F2gV8Fia7wQMAx5k%# zFs%98x%=bK>9r|K)^v;2H$QYf^nc5?om(fnt_si);c7i3=fGJ9iV+Q)!yEQ){I}h3 z&gJi_tGA`5duF&iHJG-(MEYky>heIqJ;*{A=2gZ2R`x z+w?x#oIEl=amhuq<(I0PkMi7IziVlkeqPFidEQoY5?dYY)1G{N=lLzBrtU4O;N+~%6QPxp=43~SlPl1tR@i+qrnCfD#uxy}3A{Dabd_gbIJ-#wP?xA)MQ z9Jwz`CYw)L)2<&oKUj>rB1K(c@7$cu$I0`5X$b9VtkAi=^HRUm`^u$zqpcIG-|e)# zlilliVE#k%C)#^kD*vP!nI%N$8<6;dsFTU z#O7#n**;q|G3)t?9KKWY4o;hJ-D8Ki8Uby7fdgpVeXmVN>H> z@m$T5Os?F^`FNrGNaMGeu^xvOzy0fS+bun4=H}&V%;T?@p1!fG-uB`x{ZEn4E*dsk zG@nbCYe|$`xA)kV4w0{G&n#69-73JDHS>g8vdi=JnU6vy-MY1^aQ*CUwm~&7UG#4( zKX1Qynn7OR>3Jc`D;=tHFV3u;nQ-9Y$Df6j)hYK@v%K6Y9vl6;(r)qdd-EPwmfVlr z^Xu6C!`=FOHf7o3; z)GHsnPe$JS^>f8(a^ku#)#T@Iba=S-;Ob$u zOZ9KMhqf57Z8@P>86WSRv9Qru<*aCR!-?N>y;ioG%9{NDLJ21bYSC7+#pF0GhCv-;D)c0JF6;?RzBB#leRGAxnYnlVo6uIw4 zX;1cw^*-P8?{QqO;G%CQ4lS)vWtEBKuVtH-v)cRH+@s&`f0`X(ed4&m-l~@mmlt1p z9`Gq*;l{aN160;jE~>v3u{p^xY|;FsZzCpcE4=^8K>yFFUlAMih3YH&uH36E^LxzC z`bc-$U*QDXQ%iFMI}PF(UTyp^=k;3knJeBG@rgP;G-^I}N2;^Q$XDf`>htfZO}qBa z`!px@;cn4iZ)R*uop3Wp$`LQyav&6{fmUQI{*F`a6`n%kvdyVDg3onj8iCMKSdQ0eozuUJYXmVxkW=l-j_JJYU-$Y7X z4_v-Sv zjXlb5r%pR7z{#SM@?utGV9Tdo+mgk`r!8!<-fKFQtEojOp6@QL{O`V5?RxIEjPDtF z*?+IfvlpEEq&3TWY3xP`iSFdWV%DbEXB*QGr%E{;KCCY^DaU4NsDWAPoytdwvpcJb zYEFLo@?%=MNmhT_rc-?zBi=ACvU|Aa?ad8k`}z(|YL8P-lKL0b3?KF=&p&+HzlK3w|EKiyT?`CAI2ztZ z+`dzFeig4KIQj$@v+M_#q2Cm?nO}?Nd7#c%^L173&F&v(9=m_|3_7Ux|H9`C6I$l0 z%C*-U^P72b3skloeILQIu_?~QE6b?IyXz^B16NJZz65WLGBt)&r+(FIR^pFdPZzF> zljynCe*XQbPfG&S{EYeSCBvsl);!JM_JO5J$2LMnvUln7_$%hKY_69kAKEFtSE;i$ zx6toMx=Nl3N7P3}?(IzNY7VuxW@z-g-jum~)WN$gU1@&K=@&E4u?TgD%oY5AD-3!Av?$7&j#(cSC{Yeobbu2{Pz2qJJMVE zyx)D^o3rl3Gaaww*6k7(Ewew0&5Qc-Szi8!p{9LWhuhjeFB)$#C~UlPT4;Kk9q7r$%l|@lKwpO>?IH zsPTST_VjsJeM*9>)6bq)lK$%zZyD{J`bpgGd2q$ePV0i4|IeF#i8B0=YA|1)n^#+L zwGAA50T(n5t_K&Pwk>aazdld6vFr0~#y9aBEvxzb&wNk(+$jFg_IrH)=I7~(xy(<# z?CcX3Ui;}^%tQ}C&g|_U&v0J#6ZCRX@jA3$_@O|e!N=ro|cJ*bm8m0@~P4uMJ7W2 z(Yc$99na45PVanSxKZoVj!i68(Qmru9q_1mvTf2!la1Vh$1GhQ?NU3rbj5Vx=bPI0 zO~0M;-9qQ1JU7Qq1?SR5I};_gPjgvbG5x)L_ig`stdZq1+Opodf`cR+T8i- z7HdV=HEg8pqhxM&N+{``OfQkt7RoNEyeZN7_Un0`v!YdVeg*CMarC?5qZfwHTs>y4 z-lm>m|9awfn|A-}=AT>S@>p+Me%H~dYIHrrpJbh~YyX*~Lw_7AT^EJDuHyOT%=LP% z*6|*Zw`jr(ZzwTal*zcCZde&dc(zEMo>XJY9ygq$>&h%dO*CzA! z->JG@=W-x>joUu87r(=%UPS_=uC?zu1BOQMd2> zI*C4iShQ;YU z^(waxojjyhxi7@L`IA+rM>fM2QFYGx)AzsG-4H%rWpK%M*CdriGOmY$()a!o{Tl3j zWy?$BzzbCiUhFa9)Nyrq`OwX<{PX=rk0~=IEn~GcO5N?Q`&hHsFLUp|HG3yEhzmcw z_@adz%by={ZjaQPP6w^&eJ=8LA#=>O|2ld5KkD5nIoX_8$58NlWq4PiLv%8px4oL;?ndsQjT`^0IxGo8QA-!go5HT~^levy>BZ{Nt&R~*Q0 z6iH6kYZI4Xbg<7Ziv953aa+iW53Bj+9lbvHNB)mLr|pEU>}Ght$Z((i!T*@sceGNs zfHR&btN;z`dE5JSKmUW}jDOaK-rgi$_XJodM%)>P3vrEK3#KiKFnN|!Imu+| z?c%h`8!}4#oNw2x7_V{$o}@G z$+uO-&L8`IZPKUY=gRL=))ZE#SZ!VR_RlpTPo=~y?A0u{pS#u_5nQXf^T&bD;rI2= zmBrS5G5GWD_s<8J%k5ew6wm&l;Z*tK<yJ8^@%d@%ys%&*PofAE%JU*^?qZ(Qfhls~ZBzEb+$@0Y6! z_H9?1J9Wv7y7HunKSZl}Jd?tfT~M4-zom7#sQg+M$3oeS+MhNgB}8B7X%Wmcz0RrS z_wVYyb;T}oP73(zoqBy|vQqU|o)bGy%=Q<0H1Yc>4#u^uvc6Z0E7#vH+n2LmtTnsU z@4j+w#Kjc#L$h?6|3@*pb16kElloqC`cc}qo6ApLx36=1D|}=3t}pARru1zyO-qvw z)lGXEZR+;$@~e4{dGhW_^Y6^M+&%f%&1YLCwv@d5x4GhL@B8Ctr`J?nnRI7oMmteRZSnna$fotF3y1MuBF+n;!QU-%|bY_2l|sn|6kMxfS<5YW`vO5GwMW zmT$31{`U99Rl<)xb8Y>*>)-EPmixY(+JEeNOtm`Sc{%S}Zx$V|XZmnAdv>&Z{8mLs zMD@U`z~z#+rC+-<)|fYJXR_FnRQyfBYR~tBlYcz*pL^ux@s|?Lo-=}VI6ht5cPXRk ztgz?A0-?&}EuXhMiqdg3j zS`nt_CQbVKrA@LZ`q{-s=+FytC%?95D-CzlAS3xv*nBtK{34 z%UjcRK7W{3v(}K;NBBU^{99HZf)~8^R=Rd;&C7&yC%Jv2_DqvAl{r6OH;pwQ^8U2& zp6?SbE-6?oTVhigx4c#4|C^ir#uHD+Y@IE_tbe;+?0)s>{0Elo=TuTN_B^|yJ?*ha ze{H06{k3o#IfX~A>7U=ST>NqB(B_Z)!tZ|1(Rudo>>>7#@p(_@L^8P)FPq9O<0@FZs9pVej>}t^YIMIv@PY)L;xA|GJJe{uSc` zk4Dbh(ywJ3!Wk;08=kMdF~_#kzW#~Up2zc|KVI*j#3$7m)bxgjWuuS50`0%0Zof^Aj?$!!uGL#td=h)OTz6_}kKlfz{K%-=&F75?P z;zscEFRV+p?Y*!0-adBU-BTBYkA|&yHR)T=uWTQl9s%LLUpjWa58RyCrx})cG4$Vb zyRc|J?^exa7ZwSA)p1{uSAMQ|na%Yz>~qDgw3WPl`*ur!J)8EskDJ#W-uprRt4Z(; zL&@5o|2FUV`y|$)vgFsbqHBlwFC@Efcg>mly=2ptzf*LrOS!&PY)Q5j`@MtDY+XG2 z8uh9Ack_;BE@gQ8FnjGqCYI|fir*f#{Bj`4``n7R7SGKl?G!x0YQJ-8p?&+Owq>uM zik+y6*}~$GyMJ5eF7ZfdlV?@R3*4hKgLi(~C$qaUc1gio-4hen##hE3YuUTvZ}iW= zI}fd_CL7E;{$belL5`N_zU~!ecG_ z3vJ$?c>aM`{a(Mc{?8+QmttLhNHgR!ewcsVY`d4FE~x$aFcUsP#(U#l#D6EA=U-}H zf_e`XKRzn|*jatO@O%2a=6%zZ=BX9fyv*90sIg47t>eRM(XUT3cl9huJ!QUl%BD>} zw(A56b(`gIqzmaUno?W4RX}L+EIZj;XZP@(9Vwi}o=j069i~m-Zd{b>IfGeY`=^kH zW~JLTcF)&u-IKB9$P??MGgtnanC{;_v1_IGT>I&kQ#tyM?tLM-U{`9iqmYvSHg)!y zGSA;mJ(TtQ*4DdbVK$P#j^!`cp06*rxp-=~=&voJGuxAOnEDQHb7!Bo{KVq^Y_Y46 z_m+N}ow)5r)uzL@8r?tsn*Hv;*LL}P6H|jeTvqB7=V&X?Zb`|Q`0A}i-E8~X@Y_j8 zZ=bmK;{AlYjKkkP8+@7e=fUCg_it7`PIazT|Hg9V>yv)*NoKuvc?OT}eagA?BAG** zYu09;rL{BJZ|1q|y<73e^~AYTxxFtV0w$Gqo<94mM`PKRfOhw!Tjvy6cb`~1>F{!n zuxoDeVzna9AJo$etWjc~!6+xpZ()qe%$?6-_LZ)qQWsc81jga3YR`oHu? z%hB3Oy*YBlhEH#({VA!BJZ;p|?KN?`+--U8=$odkygy?*1a2&oRfBo}ezgL<5x70-i zcGFMx2mIN#E@agkSADUY7J<9wE>!)smF11bHqrkjJ7m{?Qf7YHBC6*?cKR@vX^I6nVh#PM^xxA89e*Ktj0=ilEqes`T!&gj-91z&+GfYRTMP(S#U8CZS+j2zT#Kap4anc7yjSLtQ69fG^^z4`m>%Y z-HEOiz8WWMbRUX$*I(j#`*vDAv)<{c)5;ev$ULvOMP>5;MR8H8o?8tC^{l_2>hic) znPDi&CFr&!Q%&THgLyPZ*{xLvC+F*JoAvnZyCu`-i~O7R{;e#B^L-oBTUgc<E6d48>ZR*R&hLAv`k0Qng7A3zv&-uO)h_QZ1L^g8{~KV zy`s&yAv|AahD(qbXLeA>h1?gdO+E}=tU0#qAKMu(T28xWeEpVI>%ojU$C+GGR_Ae^ zntgonceN#Rj$fO-?1xa!_nFc+D+Bd+Zc_^S;@G}NPWW?_gz(M9MePRq?<%V+=3Fe@ zBD=ZwwIHXn!N8d;8qgUpJR*`nhh;Hq9@;r;7Y| z^j+7s-NVuU_~rM$`=-6EJN2uk>q5KAzT=_n=O3i1zdM#Y{cmN({)Wp8|5O|5w{P3| z^#-&T`0!>MZ1!i;#=RT=nKIOI9nb|&HB5f4ci7slQ2XDL&Bq^j7U-TxInpbdsKc7? z8QJyvqSBvFH@@7ScINw|%|EtGzgZ!fT$mI&p~F^ES}V=^{fv~J?cCDY(VaaGtW&<< zZ+a8gRqgarI;^|)mp_s*DqU2X3#qlx+7ljggWsmWh;=+k-adHVBQ z@%zmib?V}`{nx4carFJchqe9hZ+&w7uz1f}^FGn5RyXD~dGMCj%k0{>mot5%nRW3- z)s7n_0+u&^@g+aCSt4N(dZlX~!z|^T8QI$tw0%qUZy(z{_1u!>Yb~7>FL%`Kii>lR z%FgfBu=%uP?#@E}+zW5h?8_vgt8b*;ySMr6N~?Wx$2#V{kGq>c|8q90-QKTXLq3*n zPttk1=JnxgFU)6MyQ5cs((+Dzx6bt_hpr!+;)0(GYyaS_yj6bkjj!fE>8m>P<|qHy z-o|GeSM$bk&zmE2cl^5WWpkLmQ4Pz1@-?}6d()xAE+2B7U^7FWH||B$8#c^m`EV5+ zU1w_S@BKX){c#`r`lG_$`(lJl4IkRZWCyynovip2_a}6(`X7&$ZWe{;w(l(ppX_fb zou79(ozpkcdjHqgQMIiM(6s=Ia=JBIMXXD6BCq#2bjLI5&dfOcsK)4%jxgtjFE5y_ zb{PMjG-vJHS8w+1JHBSNZtW4Jg&nW1=>Ff-AvtlYQC&=Yx6YhPJ$L($@O!FNPt+FL zpp&`Z+R1c%zRLNdTNmEnc|mqN+uYFQE1#XXE%@Qd4xaA4kxD(b>Ju+W=3YEqo68zy zeg4Svey{gYdVe=Dr+>I5{r=Y0boqy-%i|bdroK6Uy+>77w*HUIk-5&(SMQB{`*}vE z($04EP9G!N?;-ndIE3cgYW_dlS-;;e;7#7krQ12S$5kson#&zr8hdB@^Lbj_e?PBh zIlQj8a%hrgp=B_TgH~C{!vYCjF`W027|50+)Gb_Yv zV~kw`wu%+b&8`2u=iJ)`M}zd7ulJr>DwI=sc((xetF=|HzAv&|66@?3H_m?izV459&DX8v4?nD#b5m#!`+?cl&9?u`fk!5+5fcL%0-ewNfSq9vLpB-Rtr=A(ekV)1^G6`TXTP{}p?ultfjY&r7d($g*epi$@j>`6oMgwkoZX zJ3Dj1y4y2WB=6t*Sirs8dZxwR-(`u4@`>|rR7~2kP2S+etV?E_3s3)4e|oC9A5`=hy13iMX+PN}bOM z^&537gz{7E)Rq*^n7=va@3CLIzuKjpmi~RZaIJh5OXRPOfBTak-wOUAf8FokH-AQk z4=fG!+z;A8{e?K_e7Vi!jko_VgjRdW)ycK;4f(7e7Blp%2lW{CS3J@B^Tu}jqxJH( zDo%Ud<8{=IuGgGd9{v8&i#;Z$%AKjR_n+zRw9{Af3~b-E#b@z-7Dn+iIic z^&BqU^EJ7zLqv{yGL!t#jY{+V)*qj*Yk6C)u%q~AqjAM$-~G+6`R2>5JZ*BP?$vDZ zpV{l>ws}P<9M*HWF?qwI&b-YLAs5rTssuA`oGO*O*S%-<9@k6T-t62~T)59~>$UZ+ z|87p3_szym+CBB^YlDrc>NmCDdv45svsnCQ-4btK(OMFZ&GlkdL#ZNic6>nuz zb#DXD_2ioLaE;=>GpR zO~33_y{qELS8+*Z!WN-}r>uiol7*%vMfL0Z2fKE#$iIwSzEUMSHq3uUg^{0IYova| zT!Fd_S(39J} z2d;0>75c5D*!fz~hbL>_=6<$iH)s6amYQ`iyg!ud>y8PPmF1bsD?Sx+-n{kbw`$z{ zpOGIwE8YM6NcQg8Q_uV3Q@G-ae?-;)aQQs;1Q^|B56Rp)Gf+!8K-aO0o*r&V!xeke2K$K1ZNs~A>X`Zz=D zzBdfFrC*sO)r zwe9yeaZOTD{}lCn*~8Aui6W8yXZRXae0OdO_A1*It`+ZsQA=yKg1Z z`Q^0Lcr1%&J0_^w;ZF>d@GrtnNHx^&g=nahg}#3$XIc|G#= z;@)e;LTkDA)z!@9ES>2ge)FW!$vZ7Sx2lQ#T64qdIL~hb_FQG(!Uvx|pU*boTDG;= z`@`jY`HdH{im#PLAMAP5v(=WnF6z(aze(F;o>do#Z1$~tH|;$`8GFmh*UR?iaTb?7 zZ^`LRy8X$hVWZJgE}x({{dZ?4TOQlz>Nc;w?2F7?+s5fJpVNPIJuXjfD@ybJz|C-P z*S4KsKZZ&Nffu?Mvs(X+F9J{EimPrjzt+!G!3`Qj+muxNP37N*FPwW`&xz4O@er6t(=+6GJa(#cNq zRi`IMm)882R$6!Wmw=<)#;ukQ&GmRp1SZ}+_B!>NXQ1N!e}T8({+@r^t?J)_C9=wj z%Q1<8$4#O1F6de`I4@Be#Cr#~9oCC`ve$k8^v<60LZjz8Ahut-p8X zv(hn127AT_Z?k7di`Om41xMfcqA3r;L2>HD3?4bHY@COwGp()n)?XcwX0nd@D!EqX>= z@~L9~&IJLBpPQ`ye8r%?UjD}78{c|)Hb5G&Xk8e5E=}#BiPgXMB zW0GWlEaI71-us<9wxv(&%enjVZLE#(Uzshv=_cVWpV^kq*K+B#^}qRN%JJ*-qQ1rK z`%$y=gz(+x&WXuMvEECzTn}!!lry*2ZH~y}Cx32kyLrwrhU@l(yY9-lHs7|ENSx0q z{JUu`|1p;xCvHbYop?Xt(jg1|c;Ua%*F3ytL{0b{SF>s9)7^=$ZzepvkoWs$x5XxQ zYX<1TCg$V(wlkj9PJH}W!fxN6qg&6e{o|+)9$-^Ce(qm;ASgl)xq@bR^$!&I-Jibp z*0jAH#-IQGSn7YT?YmutjQ^SMoz{XUl{rf}y`OnJDVe+^bBntB9$t-*D9;y1cfMYK z^XdH#waG{9yP1+%HlI7nT^keS^CPo5;n9}(k4lLfeE<0=|B<B~;-g%u#QHfVK>JjJ7#O+aU@7A6>du;KY zMQ?332Tn_TzKQ+#i9PObHBvW8B+<#GH80Gm_m@0c^zQm!!SzNLH}8=7ICtgz-xnB9TlU+9MErZ#>pp{L z^3SM;0#*N}NqmmVR_qq;47}Xxus3z1=r4;qw>Al%FWl{#DxKUkpGUrEyS(|6!l!>V z&gT4VZ2tQ9R2lb$r5|Rcxw`$^(DGdNrRF{T%Sn;?-`;IKRQl&x>h{R9N38NV|MO)$ z7qZ;%lJ9nnZGYLZY_q0<=wPXCv%Y%k2^qOBZ?0<9yYKyZN_juu@7>^ej6>nE)#7~T z<%-Qj7#PZvEbhPW56krc=i6#Q)gR!-Y{G`U8|zFP@a_Nnpts`ta=%Ak z9{;|e7H`A4`YD6PFW2Qg=1xsrXBW+1n*8|2t)?Hd1m;RBduq)*B>eE->1r{)KhtJy z6j_qne?o6p`gWI|^Absi{DsOVUAgizi-qOKrP=u`2WQsGF4*(;#P591p61`~x6ik{ zk|{3Mk_uk4X`STNWv_3)VwGI)TGZE=CDNIGv8-&A-5@a`dn)+!Dq#j6E9s;Jkx(Yo3Bc%{quTjiN2eEzFGe@;H`u;-M^`CieDEni>mNqcTH zQOl}7f98CR>OhF6|W4D{_X>>%|=TMa=Cqiqg zWY^?2)Y%z3R(74pdYzx!@3w6H`mH8Hmr{MSlX(l1PM&IWe>>B*RYcn>|MJc6i+vcj ztZweLcYSdBT2AiXnrxY%vUjt>t#~_Am$o#{eq2@pGnzp?y%U{)3gQuu$9)luP;J|CfKimw{ z!BZOhE52y$c`Q7?eSg)L0-?jgF}GH;Jt$tMA#=fH+R{x*r+6-~cx-E(s+#pg*7Jv_ zVt!>J2;4jWJ6SL1vB;LzgYHD~UxljgX` z_hjl$fxkzt&2zR<<68T@ar(3+e|^6Hu5z0a7gd7OM)S?49oM=H;~5 z_hkwlxczs5Jj zGHXvd%N=&-a{jx{;)BM%-_PzJ6J?+GE4gz^`~5tD^Ls5b^#!|YMb5EQJA*4ls>We%$uCUH`7Z0#6}A-`+p9K{jXW2wA|07 zf3&RDeSdz(n{5}2=f$m`et7G*bKNeEdUv~~?wgylZz6-$3Hxiof%}6uRGia%9NHf} z_i|PLVZ}Ah{ht#)hCWMQ|5nO#g0-njadWNH=C2yRdLLN1ZQ0&@=B%COVd=Tk7FegZ z^Ix3yBwzAd+?GoxdhLE6m?kHiXHzAmzx$uwoq{L#(*Eiv&0+hX&-iEe*0XDiI>9Rx z8O6WZ?*sQ&=9z+~JfuK3QBDKR_ka8#3|cUCr|tg#Gomkk`#3PnQ0RA9V(${;sVlfq z_56j)sXQ#bcY?HjN5xKVu=;QI@cBs{?Kq~m6*8~Zaw_hAyHJH|?~f;Yxt{F5_WHoJ z^THE8#m)Yp{K+({+2O|GO;fL*l6fJPo3!_vkKgJ0UL0pUwsw^Ca0F&2x5da^_+HMG z8|;1K(~|V`U*{&@omS9i<8zF&PJds@*E^P9y_&YzUhX@sbg@7C&GF55zFpbQ$lZ4H z&IHbBhEXnCYM$lj?PTB*7W0(5_U$pdef#x!d$_OLw%)Gr;*qOsDQt9g;@)0ds{YEp z%Q<@2xwF$&+?=uO+qS|8hHa(~LU!s1eBJ(2I@fW{rUkzngg!A9`gfJ-+rp#Y)-D1C7TvvD6ixu~Ze81K{e7^F{PDcUtuKovB)AkirD_2-Q>BxDyX6=H1 zcV6zgAEo{Ec5Hu*cEG%=Yj&Kd449+8?~z>1+tTt!m;TPby>YEL=RY3s0N&qQ(3$?k zt2chm_63)`=aq8u*X-vw;Lr497AP7E_sxG8F293y_IF$U^z-g=`Hx*<{T{odU##$F zdf)39KF3Yyl~q`npASdrGq3LWOUi;D9>ufxM{GO)dg7Cv-_-7OzPQdN+;&e)d&jnD zt##=ROW1e*oD+S-jGJqwhslwtEo-(Yt-3Bzru;APU69DeTCLOlM|5MiXC~bfN#uS| z_UXLm94j$Ci*)S?mGx|5*%2Q;ew~_HINRrI*r~+lI zpY^fAU*??M>G-8xtbpPE;^fC?&u2St5dW|AQNwC^epkZN`Ro7u+;Bciq<)RhPQNXm zzC}kA`P`oO>CTRdvlp&yd*8p`+2!Fx2C1)(*Y53__w(~3`#Bp|%U>})zx^wjT-du{p7o_j1G_c^iV=*QiL(s#H0T6DD9fTLbM z5<2(4hD-dD{R>EL+<4<&#D19r{7es5!VH@)C{xoxiUi9IJ2vL<&%8pXYi%;c=P zCwKq-#@=hnSL_&n&7A&yt@_G&+Z7(Azn$LQ6!`n-*PQLU{~vI??%n48T;x`^J-5RZ zMIqIvGuuMe-#a=@e#4J`u1%ZUbAP+OcKPC`o_p?IMV0XJYvo-o>7O5ec#-R=v{~zx z`@-mdrz@-8TWbpQ?Qaw7d~&fO?bddi#pm~}-S9&q_xa84Pa1yha?hu~pX2;%HUGSW z*JJC=^K8F~C(ai6zyccaS%1xJ`@DOt+rUezY#Z(xKvv<{ByZfiaUcHyd&UpR(4js5 zxw}Q)?@5=fulZ$E;n~o!V8(~bErKpGp79l0W@6G`Wc7a*{OQ=#e}S`Ke%Z-2Z#Vf( zn(=7YM%EySO)c}=#C}(WN(HBGX1#k||JBt`VKdk*dn(;e{xad%k;nFB+K=rjJJ#M^ z^iSoHB-0+@L@mGPYqwnLTJAA(%G7&K``k9Ijb6W3GWEpwoo5%9nAslR9<7-6SNQ16 zwE6nhZY~FsenvkR`pWQI-o<6h)NNbcmwjRQ{QXIA4lDoP9>10KVt(iCy6XgarG-CL z$@~hNWVrk2v!(wsnH#eC=O2rX`w$ni>3>Yn{N;RA-sgEF9p(E!Ka9Uw9@Vl@-mr%= zbfT%j(%JY)H*$EMz`(S`koCatxd9#`{M=Gx-(+kC%lJRZ`&PxJfQ zj`iDnpFH>BDoltcu>BMfE{!5ne(@v%j*A@xB`(2e5m9oLD zJI#5=|B%&tXMN_Fw=kZgSj2Ddn%vVac0%7$bpEnw-v7FVV^99ZS+}ZQY?s`5t<3xV zfkc*b9~ULx1}|y-bD?bUF>zBlh7Wrg>e6zHU;lwkhP^y=?%pDB0;pgE?FTq*Q1kI8 zWK8f*jeXtA;O!5$+trHBoAI7`vh6gRUKbVrl%pk6?nYe{-ck9ghha<5f-O4VxF*JV zGe0rE7nakhGx4_PFAFilgKuwNzMuYRoomW1qeT@P&0EhYs=o4I2&td>Dn@ zi^fFr_#J@hivTagw^zo%NX^-ZFS=ygUFN%mv z(%(N*VCvTsXO6JybtbbE@A=h{D0quEDaQSCB#ZWolOL8o)cLY=XXT-rwTT;hH*TA~ zQRDNLdpTBp-@a{*F7wj2)0WuA>Tuxu>~&Xv+*$g3&Y9WgZ;33O{&r#d(Hy=-k&e|D zpMH+~Jy&&me0M{U+NAeJRdW~bXsCBfiTh+X>9ygP6Rq}@_P-5$;!Yd1)k$AoE_rGH zVVOnlTUzFuCK;aPstlC7_;TUi4gIc8V$VD{?rg7U-uP0*jC+*m;JK`H>B1Xd^i<) zdz1Oahvo8n1mFL=(p&N4V`IuCl&AZ&q#NJQs0em%&2~ZhwwL9v_%FTbM82 zWjwW6f01JCeveD`N>=S58ylp)9ta6Ce!Vfr+j-aVLysqLS8u7Dba(#Q7o4|zuAJ() z%Bg24|Dihk2lN>xBY9ocbqyh>Bkz+TKjM3wrn`>_{AnbGpMQO z+3`P%I}JZ-2#PD^Ki&A&QoW;G_hZ#fKJJNzLW`r$JA3Qo-%NJhHCN%4d9=P{bazsb zY`@L)x7E(u7P)VbzkB3$^_PQ=Is3o*oyooQ*6*{zdQY>xaqFL03vNFv5Z}EtC}0cI z{C^6HRdPRSQyXlW&tIQ=x%lR`bq%z;X{@z&(X0l?Z0hZpmfoi zjIfDG^VhkqKef#7bu8VYvepOObn%1{u&f?;xo#&_c>c0@p)r>#hGJnaWlG-oZLZ?MN z6spSbckur4@{{gVm6u9y6NNi#b1!-c_1~&CdZk~z_k{7MxR<|w)a_dPykI@^p6&BD zPmS)}^IfT5%WtV|S;_oY+d4U8XaDxQAawJFotCTcr#kNQZ{D}wPI=#J?<}*~w`cP6 z(BC!Y-gmN%<{QLr$q+m(sgyL!MycwC-RES#XA4^GX3SZ5s75yB{yNzj5&IvDzCXC| zrnB>FMV0|aU10RDomN)Wf&HD9YYxah?ONg@tH1cp%Tv{_vlK6^la3Q&tZGT`Py0Oc z=B&#HTXuho%z2#oTD<%8PaYnxNeX+fo$KUBbSo<{o z&D-Vn%ANBTt;j36tDnqUS)%0E&u1=IE1|#t-`|RV6RRhS?S4_n20DNGdiLz-{&lxz zK$>G*Z`!_shOL|u{gc7lS$i4o@jdtnZkT-$ZvVKh`ufLe{@BKS+vDpde>gg&?fyK? zWs7V&MT0;5+y3>);YoaoSuR04d`cr`UBBc$Z`)_F=u2MLFW*`Sc8bFB>2kG=0XG;A{;X|^dHekIm%EQ*R_|P4UEL`dse97w zewUTXs`jZlPj*b(8T88IMwh$D&C|74Ru}j^v|YH2yY^?ssn^S*J6?L^`FkpOGtOH3 zINhbID(cVV6w}=OTHEV;Za+CGZ248@Xqnf0rOf4`A8$VHpYI_jZG54!=3dymCAPiH;e7r`a^v$ij2q;QO78YNn(**0Y%Rc1E9>K_x2tX$|Iv`&>8E=r>g@%g zwI$WOhvxJ2U*o#{O>oh^eiqlg+k70=czza&-oE-N?|R{*(o1>1Qfn_;$xgp+wc79Y zy8Bus9qaUuU#!(TzV%B-@25#Wx8Cl5d@J|n({nt5|B7;R7KYY+i@VZYzxnH&sLjQh zsWU`RE1f@ZZp)IbhTrGPB)yM5^WxW)s93xGt$f-S_8pzE*j!@Mq*ITKnZM?H>DQmG zN-do#*K%o{WL3>W(eIC5uiwo){Z0Jb@Sk$Wj~mvA{OZo09sQ9d5|kzm8H-r|onN*v zKtqJ9TI#m+>-dI;bN1;+gC>!R&wQBoJO9}FJKtmGSlUMiF-JX6PEiT}{qd&>; zYX0&#>Lo`#vR1m#-jVg&FVEFmF57y^bxv;XAeIesJ=ZR`zX=apy{Y)eyv_Fvzs>tD za`B$-ME0(A`_}~D%g?QjKEGD%wZgx%tfKZ-Uv_4Fw79CW&5qeeDX)D^+s&|5+w!Iz z>FcPFmRIxLc2~XiQ}OfL$L%H`zWbWbzGeHpKhfIX-zeWO{_|z#xCPRZ``}FPUb*A(~spVzUm%f_m6L%zx%t` zo%(MJ7Hl@Es$LLevuFAJ5D&*=-bUB>JUa{=pRMHGA!D>_UVSvbSR{Moe#Q96X?cpT zebZkb-gw-`OzFw@rBf2OrzP*Uy*e-U_7CL^a{32?9x#6iE4#GXb=%FFhfl??pX2iU zHT`~^-?sWW={h<$1JzqM_UL`dO|zZ5L|kM+tJ1E01}R@NzV6%-{%rAlS8aK(h5er{ zgcx3)6C`jZVJ}bV$(vhSRkx(xEOf-Y}L0yxi5QePkVglr{%MotuK>SJ)X*L z-)+A4L3zQ|gXc|Oefn~!`Um5zv~5fZj(w$aj}QMivCVbL%CCRSx$Spw9I>7_@AKAA z-Eq;2ruv3&PyU$yP*!5zRrkV|QB~TfEze!Kxy@Pam-~r#=}xOx&-!@j^P^q0-`Zxx zbbaxeXSM#ok@-?`H|^hDb^m_iQATX;+Kq4d`To=hobS<{{p0?L==J3vmv&_3etLSV zoI7{%_N*GctsSp&-`}>pas0H`wSOP(Ip=!3W_8ni_fqh#zPr`Y#rH3LpHc00PdZG` zDtkS1^&Q5!t5()OzVc{kEaRRPD_$!uwXW2){k@_tMDFIr&Wf_^pqEoUZcjdU;qfcy z^bcFr-yM4{`}_2Qa4v~iAM6=^{M&kVEqhq54>%i(cX6l6fYu-eL}+d^zs3)`9JQYD z!6(r11%>x_CRZG{-TtuOU!J-8kViyQ&G(l1%guB2W__8IQJLYIGHIW(=e~%4lgqZX zG|gC%B^ZBcS;v*`r_4%WOBW>VJz|v4=Kt^Aln0Y~OHeXSx`>kZUuKx;|pgS`TPr8s({95Y5 zd4>PySgfzdpT6L?)whmMv6EZJghzMvUYV~F*Y4@>lV!6Cz9qgr^v@f<@*8?xHyINW zuU(6oKJBd3waNP5ro8%aNBMTeVPDYv_-04H)y*P*)*Q&){<){+&BAn{{B1`!`RY>CpPBi7ha1X8g9P>1tmBr4m=KJFcX2W0!IDyXfMBUn-kU zO+OT;^C|MZ?X2Y78D}k{>(?3_{hqQ*_O=*qVz)5BN3 zSl=RY#Uj>5_(I22?HTvkCI_diO-SFUV;?PMki%Y8w^NVzyQWWFP*S@1rh`?^$Lx+p zS!}UeZnF8b+0M5&mVf+u{eI(WKD!pDj&{aB0uA;1x9$A;qbnD@hb{5?jDKoz;F4YL z@V8^X!Wn;UNS7t{{+VW-t{}~+|w5@&Pv#FNbtI5 z^Va*57IJz@=T@3GJ)K#rR};wpcw@Tf-;O8Ke!w4`PcV*vum{5$EYW(Izc~{xzQ6dU{Lh2MKb~*@6E1W2d&FY7)d$}$-xt|?k@3psD!E15 zm`m2D6bD}^o_47(wf)zq;(D-?QLT=GxcqPhM@gwLxUHM&G~d&tBaZ*gJpybf=T6 zdu=`$?PmD4Y_i#n$op}d1JwS@Udq;Ym|Ldyrt{PJJxrU=D}R~2tUh_tUhC`|sqTOO ztvfzF_Ge(t*RAi5AB@b5;xC0$zdvZ0Yt}qXpX2(_aHnMF^qC4O8#5$@zMK&&lieWl z>&eWT)5gD!*zO2ZPnr^SH2Bu9=t`Z-M{ITKqZbKj`2@F3RPWAZzPz9gm6VE>|HNV%X&2MKEbp7gsZ^8E$9s9;$8}{}F+n#`w z)I}$ZPxWv0V3<5*pWnjj3vKGjI#&Jq!e1wS@ClgwR&ZKjuX&%OWG zJpaVJikjkzFJ+D|8+XXQ6_!wpdcXNgncmbBzc20gy(u?2e^yw<;)sYGTTA202*n9+ zABxRly>?P))A_Ssrp-$Uf70r1>lmF{wEAQI>#y!&-nUD7E42gl_)l-}kZIkt)p`4t zDu(&iC!}*ui*>V{IL&X<)|+kDp&xhKsahxY%8yWn{J7h9ew~2U?TP9)-u^!U8I-vN zs@p9a*1kIv*-)yrB|{L9h5nzSOgU(PsudB+5~&ssCPdak5Y>3n+7yx~sOy40i# zBIjjip0ckl)7et*E@FLoN^QaQXocge?p>Rhb#3LhiEoW$4L{!NGoHr(S8iUR_LrL> z5zC&eRp0z=a;63U&ExlWfBSWK{=w+Hf4VZWYz>3juRh$mJnreUIUXCNTFz&zj>>v& znRY|{*@_C$PM6t+iS0TEjnXBreVXEXq)Sh1-P&H~FByH=)z@$CDS5fE!1U?Oi%(yD z?L9WXPk(!-jMI*@Z_Eys$gB18)>j#n{_EK*+-|*V-pwBq-WwIwo_*%Mo9*{k`%SIR zpSMfyk2|%;>WF;e#r*$_)3!&iFTUq@SMQqL&v~lJnf#k_o_-QqF8Y(>rr69&i{e_U z1q1eHMy?E*X1`_C^sKe*3-cAVSw78Xn!5b$y9wNlIn`f|W$jgZsoUzj*L?n#K(5+N zwWZOU11jZ=@05H=-1Fww_s5m)?@G(W7#RAQe`GS)Z`!u=>j&sSTq4)Jf9Aiy{kgJ^ zx4mC$8UBfbE>(PWHEOf@$D8VWk7K{Dd(6xqt5`Bivx(`JTK`szda---lGBdcD_yr-lu zSyB*vhgHlwYr^Zhy61m=a#_88{nt}D-(&UH9lPXmE&Y7UmJ{F9xn*aj&);q)Y+T0V zzkSouf12H9?4QrisZGnV|7m=3M@z(yJsW---yIkondUHB`@zyMt&->>pm&}p1Q}@=lt-Q8)Xa14h zsdJC+tk#lYs5Wzt+grEh_RiQvstG6mlv~-m95TNDIc~Yx)_7$l$1C5S-1wta9l^bG z;@^h&<4LG3Wm;tJkK{&lkU)@Hz8Zk~)&FL0)P7ZvzwJZNl>CJy_F^LK@lPx@+R`PHE z^T$MKpZNET-&U^=roUG$)VZ7gdxLX(rTy_Wx3}kTFFSQ2n_p?I*t|6xE_^GIX;uj^ z?mV>Y!jhfe-6q*FO){7svPpeGakXuxZEMQ(+@qRrjF%QqC_C=IW#2cYs2@tH?@iRakKQNbt6e3(VQxoj>?by3ek|eE);J78cg~7uSR} z-uAEMX0U!sEp-XG9T{`{!EUc5Va0*#pKn@Pn6}3An zE}J(q!u07)IpIT#f7bS$;Pzj>F#cY$fAySKpY}$mwA#J4yy3P@?bS}J)%jm$Uy5Wb ze*Q@Q=KQmZk^p~>r|(Cvj6Y(O`985lU2WFaqgLWxlyJ4xtrt4uFdx2 zDy=$v@x^2zO`Dg07Jizkx!R-Pa_Wim+JAEN9=mMak{`IK?^i6F-u{Dr_r4WJENt8I ztt4Wn>2n*=_@BCm>idMA`{zrU`F!);o^kr-qn{h+)or_L)kkNxpk+ z()xk9ME}W>bU&r-8lS};K7YOO&+W4pKJ^4{ym~Winf$MxkKWit*Kf05G^1wcweZ}Y zP1)RuhEXmXcyfg=UwYIrr~h~E_iZ=7eNLR?v`vsZWzM9>C+{!_F@F7Qd1M3Ary57i zpxB*%rmdLS`%o-LYS+87rovx+{znNqUYmJ1>b%1Aq*lqd+l&5Oc>ZCU_&>3}xAxXS z^Y?;c-gr%gH0R61I+k0GpXvD0a_-M2c~_V7GhR*3Gi<+6dA2TNLkIWk-Z^y>6j=6o zT=CxacFQ-{$I-`f6W=tqcDpx=0*!oquacZ>db_LG0vQ;s)FL?I7J94+;zmNPhxH{8&ShO7z=?gEd_?&Ci2oxuXU6!e`ncnP6d&5JLF47ptWhHgJ@8i*ZL zx~O<6)+>6}me2bt=ZG(z&stdO6U}zKS7YJ1B^#9HZ@WEh*-F{jpG6Mot6Qhq#V7^Z zO>Cd{<;95(KkvL-I&J#rmo}txmfU)l7rA(!`0YB-rIcmt3a{>Wul@8zvNj~#_t~p` zlRI9i99Ddne&W`#X@>LGZEbxnu~GiH{%QH$+Y)ExTur%`Q}`}QZgp|tmKTEgH&@yQ zf8DFeQ^M4KmFz5#0P6`DOSjBX^%16zwKJz#^;vR>=Nmr@ZdeEv|Uqalh8c`t5Nq-H+$v`fn-+yUr`rF>@`{SSqsX zk^1fDx_=*fo_N)(yY}WGt_tVVWm@8y>H1!Z6T9EsQ{VIcNwlVLQE{=Y9Fl4pr{h%D>KIy(?qs+vu)*GjM=6JhNDc(F<=#k2+iQD7y z4`oK%oSOdnL3HO4JKvV$$;~fK{LM0@iqsd)5}*F$XYwS!&)=VJ{r=_V%d^~{5juFdE3V+JN{nTzT~glCzq1@b$bMt%D(e@W&3II z#>H2cP5XHEPpa+bJIA?|=6!tgdc%ibn{SJ{e{8Be-nR9~+Bb0~{i%<89(~^W?Z(!m zdH1Io&yHTS&8@)R?TTDr?6M=Do#NiOWq*U9dbU_Vsr9rTEHav0=<_XD(a2=*z_ai$$LPxMRb&{N9wW z)67cO-HSN((&vw5#@5e==Dg+n+1dRr_3yu|^RFIno3k?4;pvJQy1CD-CR(^ZG?}$j z!o76Two?WU+;tJtjyEl5vFDA^*JLZY#n-;ea^I65?jJ+L>lxV7`xgs5dMsfVR{QdTICC>nW+TKg{-; z<)_ZJxQOTE(`_$uI%{RFF?wB4UO!`caff%afn7?AI~>cA)2Uj_@us8?{Hey^_5)vuF9)KT@Bsac;%h6=!Sr8U^hW zJszFPdi+Gy?df;+|J%8>>9c^Dajn!znLz8PiAtXiJ+k82KfnBm;+?ureldj)E-txO zEnej9zhH0EkDnLndlDa4GkPw+e7&>b;koD0UlxcwS6aU>uKvxX(p$#nub$7X4{#8B zX<~G~#xAGdRI)#XS$3N3+WkgOVStmb>zg&xRP)F=UUS3E*s{j(LEw!n)AdYZb}I; zFy6m>>vZ4mhOpe9*HY$NoeHnJ=ft#Xj;4lxMH&m|{+jXe7YWrlscTh&^B+?c8TVe|YQ zqVly*G#LEIgY)zJCn?a()X`g96k0K^@ZMa|H-F4!*tf&1XiQZSKog4Tz z{t)J5zvZ3LH0K$|e!ja!(JtC18&*8^pV-L}>REIu*V?pEo7d#gJnQ$Tx@%SLysXKw za^Pxaj=ZP8{pFHx6XYD8xE>3d`*q5Nzh^_F^6zWqewA~)cz;E^lEd*y|RkyJFzW-=VIc#j4j{)%y_zd^1IV(tyAYr+n~-_`0jY+3^n)F{(p+kce7>wz`>5Ggqt`guUH-`IxDWTz=cLOYtoo7qclG>DJ`Pgr zzQ)Mf3g0QW75nV@Wa9H}-?w}}8eh%t@PzTiZIRRbQpfg&CM#x19Xn#PJMP4%BIzY( z%c|3N%eftzxK%M)|F6_m>4?J1_hf~QYpYYTonow%U)leC$hrK3Q1F#1xl3|(@|WwM z2;7{rHv2$?{jo%zSvOPowyD*Lerj5{eMzvPvi8#B3%&?!QJ&+q;aldx!j9~}W;d-^ zp8j~=6qI4;vu=ZP|5>p^^L#YlDm(Vq-QM<4J?z=x;*>9zv(LGA7k`R-a#8*9>FsYH z+U0)nef}p=@zL4oFHaT;$yQeghFs%h$g}trx#!QX-5>5K&v#KgB6Fag;RAE_>}dWq zkjcK7IX7>C+FYYELF{(voe?VCdw<=C(r0*P)G02!*TH3f>fT!0wG9bxv%F1n5A}CM zz6_jNX;;uU?L+sgCvQtr_TJpK`E{DkmsFRXpQmj6dTq;$ZAQ!ftgySnW+S#noPELZ z4q4GnJ%uUhNjEK=*ZEYqCx!ckUH&XyS@z@7twr@$>GifeUuDXTzxZ- zwAk$7`PePtOZ%T6J*>a)k?@b>*YCD^f3yF*=k9zpo1TaNcmA)-EnfZ233Nipq03#F z|D(Z!#1B0WL57Ak8T7%&LxN}e;ydDZ{@-cw`G_5ZC99}+*ff_-&u<$#%5^90xj5<1 zrMuiF*Z5?U4(~Ep>ZVp%>Rsp{l(To`^&8s0J`*Y#6_lQA+Ox$%rZOFx%q6F z>2u1}<}p54`{u>VDOwc_MOWKh4~#%eZ0hA)fD%Pc}aM_V(QUWa*SSC#9-+0`dY2nM~^yk`bm6IVe z%iXqbiRCiew5Cw#O!O>H{#h9^i;q2dKZ9fHqv`HGuhdKf=NZh|{@VQUM|YOpS*xGK z>|b}e?1W%~?)2!mQ+2&Zu6Xc$`MRJm_jtjz!(j;<7JF5lE{INbab4f1unQ^R*kz`zmy*CPjanUDNioY?sf&SGQchUP$uQX?ya2X6L-a ze21^iyY<>oSgCDe!QF-DA6Do8ES0Hf%X_T(aaZvApvCU?>n~1T>aL~WZlF+|aML~L zNOAF1C0}uy_>_?Zo66Y_==CkcuZ~yUk#l?;N zizXxqL$>1AK&BWT-t52o@BID%P-_!(uEKtq1K*h|lpC1At48(}Pk%J``<=Gn<@&}U z;adW{^S5`b_;&l!$MT(a&pkpU4(SFyf7mEKoNYAK zJpM>pl&;cBP2J}@w~h1muQ)f+G_d-@jcw7D+kPDt+Pc&I%()4H4PTjVe5&34$XtF0TmO06ry{}$VlE<~J<9Nq#8azh`}Y z_QCv`znPUP+mGzI>#+WKl+E_1sY=Vw7B-wwulHws^XriRo-Mks{(s!ovy}gxwD!M~ zJNEvx-PW49rR-^$n_Qmck_lIIgEuy)9NzmpexCXHEoT2M*88YU|HhNQZtkl2UvFI2 zF8U&N{9bdBh-agJcgwbL>xtg#^BnZKKU?`_Ze`#U%wx6P$;)er_wjxU?)c64 zrvr>g2!P41Y`-_V3M#{-$Pi=j#RDALqZ%JL25` zo`1#M9tGt?6ZTwt@?S9e`5i{X%+!;|zhyH9+Xz~UPM+Spb>jjB&lI({Z~s@PR!(U; zI%m$k^xY9W8@^8XxaNbRt7N^L%yqugTQ=p?ip^4UPnGg#%D!!SFwfI9I=xG)qrkCA ze{D?FKiw6E>Ktibl((yI_e|NUlCu0ju!rtNo#y*dA@%wGg*7i{9az5M%l2!< zqQM6y9r(6#M&FysJ8a^fa(c<^n{CDT^JdK^vrqX?8gn$`Jog5@U9xu5u}w?-E-bK` zQ|FoQZ^_m+@#wt;X3rJRCEWhpm-G0m`QLY&k8SS%uq$|dR8FRrt$oG6W{$_tofa9s zZ@*W=w$@_e_M+v-^VDu_wK-p=U2yu#T9cUt^EvyCR3nd+o!lz<>Yv}g+jid!9aUJ| z4r$ze`u?TWP1AGd3%1q0)%D)GM);(`zP~lGPi%h&IQMQ?p-)858^D7pXqf8{gN=POixoW6}|=^kjGRJrD2@jsT2E3_GYFf-&w z+`jYc0JKrDnS1xo_k`(5-p(Tww9O{id=n zjtA>VJ$bv>In�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 LxBKJca9gIdSue9*^uGTswplyRT5EcI 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

-^v9 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%0Au4a6Pm1 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

R)~T_vZA~_dhTDlB0HUMIG0PSqqD`-CwpimEY%$ zOkLi6NxSZ>SD$k8_9OZ46xN;65cKlmj4X=n+P_#wCt7fwLB#UrOr0Hm%nhQPoOj$K z4NqpcCr|G3vH!H})TL{)y_%P(%D?Y9Q|MJ8Bl}^;uhN)`EnexWEtA@hpFbsiH&t`$ zwJKx5z?+}nvaN{x{bRL1|C2UBQZp_cU{L&E;lDjMvfHiPykP5&Ss~iRcaJYu z{wxw25&D{Af28u9NugVBrN}>fqL=Ww!}$G!)qmG~)9W3Qe)f;6-J}n(|1O<=B(={<`O~I7$G>l^tL9<TwwpWoZQ>u0Uil@sgJw;bL5!{WPSuEoOzG98OP*UmFmVyQmTT)6psup9fU6Bepc zcU|;rZDZZLuXXHPVruvP&+ZSqSL{q!ae4P2-Q_9%JE!&DkT797R=swDo2#|ns(s(m z?St?C_&opCt=}{3?tIxi|99En*7N@|PxMZy&h0y={Qk)5mp^8iuJf2_liOG_& z`|D@4KJmt0bCfhq4Rc(W{P$AB`{X$%LoNL^_;<|T+wwGOz2Z#w*J{`A?~_~2XMH?m z+Q&G~%;(BI0xIVx`}{r7wd7CKRVy});}LmZWh$xYgvl7Gh_Xg**fuW zAM0~=t^N@6L6ZGVzk9!lhg5w?REkmQPlM|W>;Ej8FIW1aNKSlxTV}P~kJXocP5dv?H#U-0jz1bYZD!{^mXDkL{SE;>+hqxb-ibe}0nAimK;LU1C4)T(M?w z56yd^Di`mq9l<*P16vdGmK<;Uj+URhl4fAhPB?3LWkE5!|bm6sOWE6ypBeKGNloV07hD?P6~6N4}BCvCdl|0T}) z&l;!9P3OL*iE~?fKYRXj?r)2b{~S#Z(>JYH)14-``ry{5$~iGpSlu_}OWn4u<#{bR zb+N3P`;;{QdAeMdsa5L)&uh+l^VjfA6jRa386SI;BKthr4=Foce*9AJ;>YH+t)+>N z&KVj8D$m??bJK(KcRkC!SN%G&*X@Yoqn6VPj~hMMy~b&C=A5ou$&!}ec6>Rr)_m{Z z-TwrP%cm3_fA!ACtR?@>mYdICe%@qh|IP5u{SP~T&)<3em*u&8`dh3wfBGEzX5abO zfnu`1WN!NUT5iAFZoK`ygUx36yrv=j^^jYRd#KT-2n!=ThUTsSUg5eGU1) zd}3qUf2Wz7b2a6Q_T9>u_3_TCa`QC4f*&O-0<;!RIb3+n+U=L^hdo&jIQH3|+_}Ug zEc)2*eW5Gdt(GmRR`=Drq33Mdf4iQvfk-h7T0>+&0EWxIcm%1PZfM}E1qXOEz1V{2vA?e)L#;T! z#{A5f^VCM|>|D1v?-utf=d5h)CGXx*J@aPo@$P7+Q2EyugpzAOF#}X!C_*x(_?svRtQWXcfdgR<_!-@!aRP62f1Uq`ZtJc(1NE)oXt+^IXSK znb&tK@4oN!s%$r!a_TaNXXH~u_rLw||JVMSVHf){|NkF*CVP9~m+mqTw%W9Fy^lY5 z(lvikX8wy0SxM}Huh_KwtHe$2-t_Z6*z-yAa7f|19d&YVUzTd6CVYSD)BnQ$I{)*R zeL{`~AD7Ahe&JDZ?XmL5_j5M3%#zk)WlojPV(ip@_K4$Lce|(8OT*F!FAdLS%0Ain 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 z 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χM0 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 z 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

?5teYhp`PWIgJnLe*39mu!u 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�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

)A^1B}Qz8Ypl8oD2@5sJF7 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 z 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 z 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 z�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 - - - - - - -List of files to download — get_install_libs_url • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -List of files to download — get_install_libs_url • torch - - - - - - + + - - - -
- +
- - + + diff --git a/dev/reference/index.html b/dev/reference/index.html index 8b0c7052c..a664efd79 100644 --- a/dev/reference/index.html +++ b/dev/reference/index.html @@ -1,78 +1,18 @@ - - - - - - - -Function reference • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Function reference • torch - - - - - - + + - - -
-
- -
- -
+
- - - - - - - - - - -
-

Tensor creation utilities

+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - - - - + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - + + + + + + + + + + + + + + - - - - - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+

Tensor creation utilities

+

torch_empty()

Empty

+

torch_arange()

Arange

+

torch_eye()

Eye

+

torch_full()

Full

+

torch_linspace()

Linspace

+

torch_logspace()

Logspace

+

torch_ones()

Ones

+

torch_rand()

Rand

+

torch_randint()

Randint

+

torch_randn()

Randn

+

torch_randperm()

Randperm

+

torch_zeros()

Zeros

+

torch_empty_like()

Empty_like

+

torch_full_like()

Full_like

+

torch_ones_like()

Ones_like

+

torch_rand_like()

Rand_like

+

torch_randint_like()

Randint_like

+

torch_randn_like()

Randn_like

+

torch_zeros_like()

Zeros_like

+

as_array()

Converts to array

-

Tensor attributes

+
+

Tensor attributes

+

torch_set_default_dtype() torch_get_default_dtype()

Gets and sets the default floating point dtype.

+

is_torch_device()

Checks if object is a device

+

is_torch_dtype()

Check if object is a torch data type

+

torch_float32() torch_float() torch_float64() torch_double() torch_float16() torch_half() torch_uint8() torch_int8() torch_int16() torch_short() torch_int32() torch_int() torch_int64() torch_long() torch_bool() torch_quint8() torch_qint8() torch_qint32()

Torch data types

+

torch_finfo()

Floating point type info

+

torch_iinfo()

Integer type info

+

torch_per_channel_affine() torch_per_tensor_affine() torch_per_channel_symmetric() torch_per_tensor_symmetric()

Creates the corresponding Scheme object

+

torch_reduction_sum() torch_reduction_mean() torch_reduction_none()

Creates the reduction objet

+

is_torch_layout()

Check if an object is a torch layout.

+

is_torch_memory_format()

Check if an object is a memory format

+

is_torch_qscheme()

Checks if an object is a QScheme

+

is_undefined_tensor()

Checks if a tensor is undefined

-

Serialization

+
+

Serialization

+

load_state_dict()

Load a state dict file

+

torch_load()

Loads a saved object

+

torch_save()

Saves an object to a disk file.

-

Mathematical operations on tensors

+
+

Mathematical operations on tensors

+
+

torch_set_default_dtype() torch_get_default_dtype()

+

Gets and sets the default floating point dtype.

torch_set_num_threads() torch_set_num_interop_threads() torch_get_num_interop_threads() torch_get_num_threads()

Number of threads

+

torch_abs()

Abs

+

torch_absolute()

Absolute

+

torch_acos()

Acos

+

torch_acosh()

Acosh

+

torch_adaptive_avg_pool1d()

Adaptive_avg_pool1d

+

torch_add()

Add

+

torch_addbmm()

Addbmm

+

torch_addcdiv()

Addcdiv

+

torch_addcmul()

Addcmul

+

torch_addmm()

Addmm

+

torch_addmv()

Addmv

+

torch_addr()

Addr

+

torch_allclose()

Allclose

+

torch_amax()

Amax

+

torch_amin()

Amin

+

torch_angle()

Angle

+
+

torch_arange()

+

Arange

torch_arccos()

Arccos

+

torch_arccosh()

Arccosh

+

torch_arcsin()

Arcsin

+

torch_arcsinh()

Arcsinh

+

torch_arctan()

Arctan

+

torch_arctanh()

Arctanh

+

torch_argmax

Argmax

+

torch_argmin

Argmin

+

torch_argsort()

Argsort

+

torch_as_strided()

As_strided

+

torch_asin()

Asin

+

torch_asinh()

Asinh

+

torch_atan()

Atan

+

torch_atan2()

Atan2

+

torch_atanh()

Atanh

+

torch_atleast_1d()

Atleast_1d

+

torch_atleast_2d()

Atleast_2d

+

torch_atleast_3d()

Atleast_3d

+

torch_avg_pool1d()

Avg_pool1d

+

torch_baddbmm()

Baddbmm

+

torch_bartlett_window()

Bartlett_window

+

torch_bernoulli()

Bernoulli

+

torch_bincount()

Bincount

+

torch_bitwise_and()

Bitwise_and

+

torch_bitwise_not()

Bitwise_not

+

torch_bitwise_or()

Bitwise_or

+

torch_bitwise_xor()

Bitwise_xor

+

torch_blackman_window()

Blackman_window

+

torch_block_diag()

Block_diag

+

torch_bmm()

Bmm

+

torch_broadcast_tensors()

Broadcast_tensors

+

torch_bucketize()

Bucketize

+

torch_can_cast()

Can_cast

+

torch_cartesian_prod()

Cartesian_prod

+

torch_cat()

Cat

+

torch_cdist()

Cdist

+

torch_ceil()

Ceil

+

torch_celu()

Celu

+

torch_celu_()

Celu_

+

torch_chain_matmul()

Chain_matmul

+

torch_channel_shuffle()

Channel_shuffle

+

torch_cholesky()

Cholesky

+

torch_cholesky_inverse()

Cholesky_inverse

+

torch_cholesky_solve()

Cholesky_solve

+

torch_chunk()

Chunk

+

torch_clamp()

Clamp

+

torch_clip()

Clip

+

torch_clone()

Clone

+

torch_combinations()

Combinations

+

torch_complex()

Complex

+

torch_conj()

Conj

+

torch_conv1d()

Conv1d

+

torch_conv2d()

Conv2d

+

torch_conv3d()

Conv3d

+

torch_conv_tbc()

Conv_tbc

+

torch_conv_transpose1d()

Conv_transpose1d

+

torch_conv_transpose2d()

Conv_transpose2d

+

torch_conv_transpose3d()

Conv_transpose3d

+

torch_cos()

Cos

+

torch_cosh()

Cosh

+

torch_cosine_similarity()

Cosine_similarity

+

torch_count_nonzero()

Count_nonzero

+

torch_cross()

Cross

+

torch_cummax()

Cummax

+

torch_cummin()

Cummin

+

torch_cumprod()

Cumprod

+

torch_cumsum()

Cumsum

+

torch_deg2rad()

Deg2rad

+

torch_dequantize()

Dequantize

+

torch_det()

Det

+

torch_device()

Create a Device object

+

torch_diag()

Diag

+

torch_diag_embed()

Diag_embed

+

torch_diagflat()

Diagflat

+

torch_diagonal()

Diagonal

+

torch_diff()

Computes the n-th forward difference along the given dimension.

+

torch_digamma()

Digamma

+

torch_dist()

Dist

+

torch_div()

Div

+

torch_divide()

Divide

+

torch_dot()

Dot

+

torch_dstack()

Dstack

+
+

torch_float32() torch_float() torch_float64() torch_double() torch_float16() torch_half() torch_uint8() torch_int8() torch_int16() torch_short() torch_int32() torch_int() torch_int64() torch_long() torch_bool() torch_quint8() torch_qint8() torch_qint32()

+

Torch data types

torch_eig()

Eig

+

torch_einsum()

Einsum

+
+

torch_empty()

+

Empty

+

torch_empty_like()

+

Empty_like

torch_empty_strided()

Empty_strided

+

torch_eq()

Eq

+

torch_equal()

Equal

+

torch_erf()

Erf

+

torch_erfc()

Erfc

+

torch_erfinv()

Erfinv

+

torch_exp()

Exp

+

torch_exp2()

Exp2

+

torch_expm1()

Expm1

+
+

torch_eye()

+

Eye

torch_fft_fft()

Fft

+

torch_fft_ifft()

Ifft

+

torch_fft_irfft()

Irfft

+

torch_fft_rfft()

Rfft

+
+

torch_finfo()

+

Floating point type info

torch_fix()

Fix

+

torch_flatten()

Flatten

+

torch_flip()

Flip

+

torch_fliplr()

Fliplr

+

torch_flipud()

Flipud

+

torch_floor()

Floor

+

torch_floor_divide()

Floor_divide

+

torch_fmod()

Fmod

+

torch_frac()

Frac

+
+

torch_full()

+

Full

+

torch_full_like()

+

Full_like

torch_gather()

Gather

+

torch_gcd()

Gcd

+

torch_ge()

Ge

+

torch_generator()

Create a Generator object

+

torch_geqrf()

Geqrf

+

torch_ger()

Ger

+

torch_greater()

Greater

+

torch_greater_equal()

Greater_equal

+

torch_gt()

Gt

+

torch_hamming_window()

Hamming_window

+

torch_hann_window()

Hann_window

+

torch_heaviside()

Heaviside

+

torch_histc()

Histc

+

torch_hstack()

Hstack

+

torch_hypot()

Hypot

+

torch_i0()

I0

+
+

torch_iinfo()

+

Integer type info

torch_imag()

Imag

+

torch_index()

Index torch tensors

+

torch_index_put()

Modify values selected by indices.

+

torch_index_put_()

In-place version of torch_index_put.

+

torch_index_select()

Index_select

+

torch_inverse()

Inverse

+

torch_is_complex()

Is_complex

+

torch_is_floating_point()

Is_floating_point

+

torch_is_installed()

Verifies if torch is installed

+

torch_is_nonzero()

Is_nonzero

+

torch_isclose()

Isclose

+

torch_isfinite()

Isfinite

+

torch_isinf()

Isinf

+

torch_isnan()

Isnan

+

torch_isneginf()

Isneginf

+

torch_isposinf()

Isposinf

+

torch_isreal()

Isreal

+

torch_istft()

Istft

+

torch_kaiser_window()

Kaiser_window

+

torch_kthvalue()

Kthvalue

+

torch_strided() torch_sparse_coo()

Creates the corresponding layout

+

torch_lcm()

Lcm

+

torch_le()

Le

+

torch_lerp()

Lerp

+

torch_less()

Less

+

torch_less_equal()

Less_equal

+

torch_lgamma()

Lgamma

+
+

torch_linspace()

+

Linspace

+

torch_load()

+

Loads a saved object

torch_log()

Log

+

torch_log10()

Log10

+

torch_log1p()

Log1p

+

torch_log2()

Log2

+

torch_logaddexp()

Logaddexp

+

torch_logaddexp2()

Logaddexp2

+

torch_logcumsumexp()

Logcumsumexp

+

torch_logdet()

Logdet

+

torch_logical_and()

Logical_and

+

torch_logical_not

Logical_not

+

torch_logical_or()

Logical_or

+

torch_logical_xor()

Logical_xor

+

torch_logit()

Logit

+
+

torch_logspace()

+

Logspace

torch_logsumexp()

Logsumexp

+

torch_lstsq()

Lstsq

+

torch_lt()

Lt

+

torch_lu()

LU

+

torch_lu_solve()

Lu_solve

+

torch_manual_seed()

Sets the seed for generating random numbers.

+

torch_masked_select()

Masked_select

+

torch_matmul()

Matmul

+

torch_matrix_exp()

Matrix_exp

+

torch_matrix_power()

Matrix_power

+

torch_matrix_rank()

Matrix_rank

+

torch_max

Max

+

torch_maximum()

Maximum

+

torch_mean()

Mean

+

torch_median()

Median

+

torch_contiguous_format() torch_preserve_format() torch_channels_last_format()

Memory format

+

torch_meshgrid()

Meshgrid

+

torch_min

Min

+

torch_minimum()

Minimum

+

torch_mm()

Mm

+

torch_mode()

Mode

+

torch_movedim()

Movedim

+

torch_mul()

Mul

+

torch_multinomial()

Multinomial

+

torch_multiply()

Multiply

+

torch_mv()

Mv

+

torch_mvlgamma()

Mvlgamma

+

torch_nanquantile()

Nanquantile

+

torch_nansum()

Nansum

+

torch_narrow()

Narrow

+

torch_ne()

Ne

+

torch_neg()

Neg

+

torch_negative()

Negative

+

torch_nextafter()

Nextafter

+

torch_nonzero()

Nonzero

+

torch_norm()

Norm

+

torch_normal()

Normal

+

torch_not_equal()

Not_equal

+
+

torch_ones()

+

Ones

+

torch_ones_like()

+

Ones_like

torch_orgqr()

Orgqr

+

torch_ormqr()

Ormqr

+

torch_outer()

Outer

+

torch_pdist()

Pdist

+

torch_pinverse()

Pinverse

+

torch_pixel_shuffle()

Pixel_shuffle

+

torch_poisson()

Poisson

+

torch_polar()

Polar

+

torch_polygamma()

Polygamma

+

torch_pow()

Pow

+

torch_prod()

Prod

+

torch_promote_types()

Promote_types

+

torch_qr()

Qr

+
+

torch_per_channel_affine() torch_per_tensor_affine() torch_per_channel_symmetric() torch_per_tensor_symmetric()

+

Creates the corresponding Scheme object

torch_quantile()

Quantile

+

torch_quantize_per_channel()

Quantize_per_channel

+

torch_quantize_per_tensor()

Quantize_per_tensor

+

torch_rad2deg()

Rad2deg

+
+

torch_rand()

+

Rand

+

torch_rand_like()

+

Rand_like

+

torch_randint()

+

Randint

+

torch_randint_like()

+

Randint_like

+

torch_randn()

+

Randn

+

torch_randn_like()

+

Randn_like

+

torch_randperm()

+

Randperm

torch_range()

Range

+

torch_real()

Real

+

torch_reciprocal()

Reciprocal

+
+

torch_reduction_sum() torch_reduction_mean() torch_reduction_none()

+

Creates the reduction objet

torch_relu()

Relu

+

torch_relu_()

Relu_

+

torch_remainder()

Remainder

+

torch_renorm()

Renorm

+

torch_repeat_interleave()

Repeat_interleave

+

torch_reshape()

Reshape

+

torch_result_type()

Result_type

+

torch_roll()

Roll

+

torch_rot90()

Rot90

+

torch_round()

Round

+

torch_rrelu_()

Rrelu_

+

torch_rsqrt()

Rsqrt

+
+

torch_save()

+

Saves an object to a disk file.

torch_scalar_tensor()

Scalar tensor

+

torch_searchsorted()

Searchsorted

+

torch_selu()

Selu

+

torch_selu_()

Selu_

+

torch_sgn()

Sgn

+

torch_sigmoid()

Sigmoid

+

torch_sign()

Sign

+

torch_signbit()

Signbit

+

torch_sin()

Sin

+

torch_sinh()

Sinh

+

torch_slogdet()

Slogdet

+

torch_solve()

Solve

+

torch_sort()

Sort

+

torch_sparse_coo_tensor()

Sparse_coo_tensor

+

torch_split()

Split

+

torch_sqrt()

Sqrt

+

torch_square()

Square

+

torch_squeeze()

Squeeze

+

torch_stack()

Stack

+

torch_std()

Std

+

torch_std_mean()

Std_mean

+

torch_stft()

Stft

+

torch_sub()

Sub

+

torch_subtract()

Subtract

+

torch_sum()

Sum

+

torch_svd()

Svd

+

torch_symeig()

Symeig

+

torch_t()

T

+

torch_take()

Take

+

torch_tan()

Tan

+

torch_tanh()

Tanh

+

torch_tensor()

Converts R objects to a torch tensor

+

torch_tensordot()

Tensordot

+

torch_threshold_()

Threshold_

+

torch_topk()

Topk

+

torch_trace()

Trace

+

torch_transpose()

Transpose

+

torch_trapz()

Trapz

+

torch_triangular_solve()

Triangular_solve

+

torch_tril()

Tril

+

torch_tril_indices()

Tril_indices

+

torch_triu()

Triu

+

torch_triu_indices()

Triu_indices

+

torch_true_divide()

TRUE_divide

+

torch_trunc()

Trunc

+

torch_unbind()

Unbind

+

torch_unique_consecutive()

Unique_consecutive

+

torch_unsafe_chunk()

Unsafe_chunk

+

torch_unsafe_split()

Unsafe_split

+

torch_unsqueeze()

Unsqueeze

+

torch_vander()

Vander

+

torch_var()

Var

+

torch_var_mean()

Var_mean

+

torch_vdot()

Vdot

+

torch_view_as_complex()

View_as_complex

+

torch_view_as_real()

View_as_real

+

torch_vstack()

Vstack

+

torch_where()

Where

-

broadcast_all()

+
+

torch_zeros()

Given a list of values (possibly containing numbers), returns a list where each -value is broadcasted based on the following rules:

-

Neural network modules

-

-
-

nn_adaptive_avg_pool1d()

+

Zeros

+

torch_zeros_like()

Applies a 1D adaptive average pooling over an input signal composed of several input planes.

-

nn_adaptive_avg_pool2d()

+

Zeros_like

+

AutogradContext

Applies a 2D adaptive average pooling over an input signal composed of several input planes.

-

nn_adaptive_avg_pool3d()

+

Class representing the context.

+

Constraint

Applies a 3D adaptive average pooling over an input signal composed of several input planes.

-

nn_adaptive_log_softmax_with_loss()

+

Abstract base class for constraints.

+

Distribution

AdaptiveLogSoftmaxWithLoss module

-

nn_adaptive_max_pool1d()

+

Generic R6 class representing distributions

+

as_array()

Applies a 1D adaptive max pooling over an input signal composed of several input planes.

-

nn_adaptive_max_pool2d()

+

Converts to array

+

autograd_backward()

Applies a 2D adaptive max pooling over an input signal composed of several input planes.

-

nn_adaptive_max_pool3d()

+

Computes the sum of gradients of given tensors w.r.t. graph leaves.

+

autograd_function()

Applies a 3D adaptive max pooling over an input signal composed of several input planes.

-

nn_avg_pool1d()

+

Records operation history and defines formulas for differentiating ops.

+

autograd_grad()

Applies a 1D average pooling over an input signal composed of several -input planes.

-

nn_avg_pool2d()

+

Computes and returns the sum of gradients of outputs w.r.t. the inputs.

+

autograd_set_grad_mode()

Applies a 2D average pooling over an input signal composed of several input -planes.

-

nn_avg_pool3d()

+

Set grad mode

+

backends_mkl_is_available()

Applies a 3D average pooling over an input signal composed of several input -planes.

-

nn_batch_norm1d()

+

MKL is available

+

backends_mkldnn_is_available()

BatchNorm1D module

-

nn_batch_norm2d()

+

MKLDNN is available

+

backends_openmp_is_available()

BatchNorm2D

-

nn_batch_norm3d()

+

OpenMP is available

+

broadcast_all()

BatchNorm3D

-

nn_bce_loss()

+

Given a list of values (possibly containing numbers), returns a list where each +value is broadcasted based on the following rules:

+

call_torch_function()

Binary cross entropy loss

-

nn_bce_with_logits_loss()

+

Call a (Potentially Unexported) Torch Function

+

contrib_sort_vertices()

BCE with logits loss

-

nn_bilinear()

+

Contrib sort vertices

+

cuda_current_device()

Bilinear module

-

nn_buffer()

+

Returns the index of a currently selected device.

+

cuda_device_count()

Creates a nn_buffer

-

nn_celu()

+

Returns the number of GPUs available.

+

cuda_get_device_capability()

CELU module

-

nn_contrib_sparsemax()

+

Returns the major and minor CUDA capability of device

+

cuda_is_available()

Sparsemax activation

-

nn_conv1d()

+

Returns a bool indicating if CUDA is currently available.

+

dataloader()

Conv1D module

-

nn_conv2d()

+

Data loader. Combines a dataset and a sampler, and provides +single- or multi-process iterators over the dataset.

+

dataloader_make_iter()

Conv2D module

-

nn_conv3d()

+

Creates an iterator from a DataLoader

+

dataloader_next()

Conv3D module

-

nn_conv_transpose1d()

+

Get the next element of a dataloader iterator

+

dataset()

ConvTranspose1D

-

nn_conv_transpose2d()

+

Helper function to create an R6 class that inherits from the abstract Dataset class

+

dataset_subset()

ConvTranpose2D module

-

nn_conv_transpose3d()

+

Dataset Subset

+

distr_bernoulli()

ConvTranpose3D module

-

nn_cosine_embedding_loss()

+

Creates a Bernoulli distribution parameterized by probs +or logits (but not both). +Samples are binary (0 or 1). They take the value 1 with probability p +and 0 with probability 1 - p.

+

distr_categorical()

Cosine embedding loss

-

nn_cross_entropy_loss()

+

Creates a categorical distribution parameterized by either probs or +logits (but not both).

+

distr_chi2()

CrossEntropyLoss module

-

nn_ctc_loss()

+

Creates a Chi2 distribution parameterized by shape parameter df. +This is exactly equivalent to distr_gamma(alpha=0.5*df, beta=0.5)

+

distr_gamma()

The Connectionist Temporal Classification loss.

-

nn_dropout()

+

Creates a Gamma distribution parameterized by shape concentration and rate.

+

distr_mixture_same_family()

+

Mixture of components in the same family

+

distr_multivariate_normal()

+

Gaussian distribution

+

distr_normal()

+

Creates a normal (also called Gaussian) distribution parameterized by +loc and scale.

+

distr_poisson()

+

Creates a Poisson distribution parameterized by rate, the rate parameter.

+

enumerate()

+

Enumerate an iterator

+

enumerate(<dataloader>)

+

Enumerate an iterator

+

get_install_libs_url()

+

List of files to download

+

install_torch()

+

Install Torch

+

install_torch_from_file()

+

Install Torch from files

+

is_dataloader()

+

Checks if the object is a dataloader

+

is_nn_buffer()

+

Checks if the object is a nn_buffer

+

is_nn_module()

+

Checks if the object is an nn_module

+

is_nn_parameter()

+

Checks if an object is a nn_parameter

+

is_optimizer()

+

Checks if the object is a torch optimizer

+

is_torch_device()

+

Checks if object is a device

+

is_torch_dtype()

+

Check if object is a torch data type

+

is_torch_layout()

+

Check if an object is a torch layout.

+

is_torch_memory_format()

+

Check if an object is a memory format

+

is_torch_qscheme()

+

Checks if an object is a QScheme

+

is_undefined_tensor()

+

Checks if a tensor is undefined

+

jit_compile()

+

Compile TorchScript code into a graph

+

jit_load()

+

Loads a script_function or script_module previously saved with jit_save

+

jit_save()

+

Saves a script_function to a path

+

jit_save_for_mobile()

+

Saves a script_function or script_module in bytecode form, +to be loaded on a mobile device

+

jit_scalar()

+

Adds the 'jit_scalar' class to the input

+

jit_trace()

+

Trace a function and return an executable script_function.

+

jit_trace_module()

+

Trace a module

+

jit_tuple()

+

Adds the 'jit_tuple' class to the input

+

linalg_cholesky()

+

Computes the Cholesky decomposition of a complex Hermitian or real symmetric positive-definite matrix.

+

linalg_cholesky_ex()

+

Computes the Cholesky decomposition of a complex Hermitian or real +symmetric positive-definite matrix.

+

linalg_cond()

+

Computes the condition number of a matrix with respect to a matrix norm.

+

linalg_det()

+

Computes the determinant of a square matrix.

+

linalg_eig()

+

Computes the eigenvalue decomposition of a square matrix if it exists.

+

linalg_eigh()

+

Computes the eigenvalue decomposition of a complex Hermitian or real symmetric matrix.

+

linalg_eigvals()

+

Computes the eigenvalues of a square matrix.

+

linalg_eigvalsh()

+

Computes the eigenvalues of a complex Hermitian or real symmetric matrix.

+

linalg_householder_product()

+

Computes the first n columns of a product of Householder matrices.

+

linalg_inv()

+

Computes the inverse of a square matrix if it exists.

+

linalg_inv_ex()

+

Computes the inverse of a square matrix if it is invertible.

+

linalg_lstsq()

+

Computes a solution to the least squares problem of a system of linear equations.

+

linalg_matrix_norm()

+

Computes a matrix norm.

+

linalg_matrix_power()

+

Computes the n-th power of a square matrix for an integer n.

+

linalg_matrix_rank()

+

Computes the numerical rank of a matrix.

+

linalg_multi_dot()

+

Efficiently multiplies two or more matrices

+

linalg_norm()

+

Computes a vector or matrix norm.

+

linalg_pinv()

+

Computes the pseudoinverse (Moore-Penrose inverse) of a matrix.

+

linalg_qr()

+

Computes the QR decomposition of a matrix.

+

linalg_slogdet()

+

Computes the sign and natural logarithm of the absolute value of the determinant of a square matrix.

+

linalg_solve()

+

Computes the solution of a square system of linear equations with a unique solution.

+

linalg_svd()

+

Computes the singular value decomposition (SVD) of a matrix.

+

linalg_svdvals()

+

Computes the singular values of a matrix.

+

linalg_tensorinv()

+

Computes the multiplicative inverse of torch_tensordot()

+

linalg_tensorsolve()

+

Computes the solution X to the system torch_tensordot(A, X) = B.

+

linalg_vector_norm()

+

Computes a vector norm.

+

load_state_dict()

+

Load a state dict file

+

lr_lambda()

+

Sets the learning rate of each parameter group to the initial lr +times a given function. When last_epoch=-1, sets initial lr as lr.

+

lr_multiplicative()

+

Multiply the learning rate of each parameter group by the factor given +in the specified function. When last_epoch=-1, sets initial lr as lr.

+

lr_one_cycle()

+

Once cycle learning rate

+

lr_scheduler()

+

Creates learning rate schedulers

+

lr_step()

+

Step learning rate decay

+

nn_adaptive_avg_pool1d()

+

Applies a 1D adaptive average pooling over an input signal composed of several input planes.

+

nn_adaptive_avg_pool2d()

+

Applies a 2D adaptive average pooling over an input signal composed of several input planes.

+

nn_adaptive_avg_pool3d()

+

Applies a 3D adaptive average pooling over an input signal composed of several input planes.

+

nn_adaptive_log_softmax_with_loss()

+

AdaptiveLogSoftmaxWithLoss module

+

nn_adaptive_max_pool1d()

+

Applies a 1D adaptive max pooling over an input signal composed of several input planes.

+

nn_adaptive_max_pool2d()

+

Applies a 2D adaptive max pooling over an input signal composed of several input planes.

+

nn_adaptive_max_pool3d()

+

Applies a 3D adaptive max pooling over an input signal composed of several input planes.

+

nn_avg_pool1d()

+

Applies a 1D average pooling over an input signal composed of several +input planes.

+

nn_avg_pool2d()

+

Applies a 2D average pooling over an input signal composed of several input +planes.

+

nn_avg_pool3d()

+

Applies a 3D average pooling over an input signal composed of several input +planes.

+

nn_batch_norm1d()

+

BatchNorm1D module

+

nn_batch_norm2d()

+

BatchNorm2D

+

nn_batch_norm3d()

+

BatchNorm3D

+

nn_bce_loss()

+

Binary cross entropy loss

+

nn_bce_with_logits_loss()

+

BCE with logits loss

+

nn_bilinear()

+

Bilinear module

+

nn_buffer()

+

Creates a nn_buffer

+

nn_celu()

+

CELU module

+

nn_contrib_sparsemax()

+

Sparsemax activation

+

nn_conv1d()

+

Conv1D module

+

nn_conv2d()

+

Conv2D module

+

nn_conv3d()

+

Conv3D module

+

nn_conv_transpose1d()

+

ConvTranspose1D

+

nn_conv_transpose2d()

+

ConvTranpose2D module

+

nn_conv_transpose3d()

+

ConvTranpose3D module

+

nn_cosine_embedding_loss()

+

Cosine embedding loss

+

nn_cross_entropy_loss()

+

CrossEntropyLoss module

+

nn_ctc_loss()

+

The Connectionist Temporal Classification loss.

+

nn_dropout()

+

Dropout module

+

nn_dropout2d()

+

Dropout2D module

+

nn_dropout3d()

+

Dropout3D module

+

nn_elu()

+

ELU module

+

nn_embedding()

+

Embedding module

+

nn_fractional_max_pool2d()

+

Applies a 2D fractional max pooling over an input signal composed of several input planes.

+

nn_fractional_max_pool3d()

+

Applies a 3D fractional max pooling over an input signal composed of several input planes.

+

nn_gelu()

+

GELU module

+

nn_glu()

+

GLU module

+

nn_group_norm()

+

Group normalization

+

nn_gru()

+

Applies a multi-layer gated recurrent unit (GRU) RNN to an input sequence.

+

nn_hardshrink()

+

Hardshwink module

+

nn_hardsigmoid()

+

Hardsigmoid module

+

nn_hardswish()

+

Hardswish module

+

nn_hardtanh()

+

Hardtanh module

+

nn_hinge_embedding_loss()

+

Hinge embedding loss

+

nn_identity()

+

Identity module

+

nn_init_calculate_gain()

+

Calculate gain

+

nn_init_constant_()

+

Constant initialization

+

nn_init_dirac_()

+

Dirac initialization

+

nn_init_eye_()

+

Eye initialization

+

nn_init_kaiming_normal_()

+

Kaiming normal initialization

+

nn_init_kaiming_uniform_()

+

Kaiming uniform initialization

+

nn_init_normal_()

+

Normal initialization

+

nn_init_ones_()

+

Ones initialization

+

nn_init_orthogonal_()

+

Orthogonal initialization

+

nn_init_sparse_()

+

Sparse initialization

+

nn_init_trunc_normal_()

+

Truncated normal initialization

+

nn_init_uniform_()

+

Uniform initialization

+

nn_init_xavier_normal_()

+

Xavier normal initialization

+

nn_init_xavier_uniform_()

+

Xavier uniform initialization

+

nn_init_zeros_()

+

Zeros initialization

+

nn_kl_div_loss()

+

Kullback-Leibler divergence loss

+

nn_l1_loss()

+

L1 loss

+

nn_layer_norm()

+

Layer normalization

+

nn_leaky_relu()

+

LeakyReLU module

+

nn_linear()

+

Linear module

+

nn_log_sigmoid()

+

LogSigmoid module

+

nn_log_softmax()

+

LogSoftmax module

+

nn_lp_pool1d()

+

Applies a 1D power-average pooling over an input signal composed of several input +planes.

+

nn_lp_pool2d()

+

Applies a 2D power-average pooling over an input signal composed of several input +planes.

+

nn_lstm()

+

Applies a multi-layer long short-term memory (LSTM) RNN to an input +sequence.

+

nn_margin_ranking_loss()

+

Margin ranking loss

+

nn_max_pool1d()

+

MaxPool1D module

+

nn_max_pool2d()

+

MaxPool2D module

+

nn_max_pool3d()

+

Applies a 3D max pooling over an input signal composed of several input +planes.

+

nn_max_unpool1d()

+

Computes a partial inverse of MaxPool1d.

+

nn_max_unpool2d()

+

Computes a partial inverse of MaxPool2d.

+

nn_max_unpool3d()

+

Computes a partial inverse of MaxPool3d.

+

nn_module()

+

Base class for all neural network modules.

+

nn_module_list()

+

Holds submodules in a list.

+

nn_mse_loss()

+

MSE loss

+

nn_multi_margin_loss()

+

Multi margin loss

+

nn_multihead_attention()

+

MultiHead attention

+

nn_multilabel_margin_loss()

+

Multilabel margin loss

+

nn_multilabel_soft_margin_loss()

+

Multi label soft margin loss

+

nn_nll_loss()

+

Nll loss

+

nn_pairwise_distance()

+

Pairwise distance

+

nn_parameter()

+

Creates an nn_parameter

+

nn_poisson_nll_loss()

+

Poisson NLL loss

+

nn_prelu()

+

PReLU module

+

nn_relu()

+

ReLU module

+

nn_relu6()

+

ReLu6 module

+

nn_rnn()

+

RNN module

+

nn_rrelu()

+

RReLU module

+

nn_selu()

+

SELU module

+

nn_sequential()

+

A sequential container

+

nn_sigmoid()

+

Sigmoid module

+

nn_smooth_l1_loss()

+

Smooth L1 loss

+

nn_soft_margin_loss()

+

Soft margin loss

+

nn_softmax()

+

Softmax module

+

nn_softmax2d()

+

Softmax2d module

+

nn_softmin()

+

Softmin

+

nn_softplus()

+

Softplus module

+

nn_softshrink()

+

Softshrink module

+

nn_softsign()

+

Softsign module

+

nn_tanh()

+

Tanh module

+

nn_tanhshrink()

+

Tanhshrink module

+

nn_threshold()

+

Threshoold module

+

nn_triplet_margin_loss()

+

Triplet margin loss

+

nn_triplet_margin_with_distance_loss()

+

Triplet margin with distance loss

+

nn_utils_clip_grad_norm_()

+

Clips gradient norm of an iterable of parameters.

+

nn_utils_clip_grad_value_()

+

Clips gradient of an iterable of parameters at specified value.

+

nn_utils_rnn_pack_padded_sequence()

+

Packs a Tensor containing padded sequences of variable length.

+

nn_utils_rnn_pack_sequence()

+

Packs a list of variable length Tensors

+

nn_utils_rnn_pad_packed_sequence()

+

Pads a packed batch of variable length sequences.

+

nn_utils_rnn_pad_sequence()

+

Pad a list of variable length Tensors with padding_value

+

nnf_adaptive_avg_pool1d()

+

Adaptive_avg_pool1d

+

nnf_adaptive_avg_pool2d()

+

Adaptive_avg_pool2d

+

nnf_adaptive_avg_pool3d()

+

Adaptive_avg_pool3d

+

nnf_adaptive_max_pool1d()

+

Adaptive_max_pool1d

+

nnf_adaptive_max_pool2d()

+

Adaptive_max_pool2d

+

nnf_adaptive_max_pool3d()

+

Adaptive_max_pool3d

+

nnf_affine_grid()

+

Affine_grid

+

nnf_alpha_dropout()

+

Alpha_dropout

+

nnf_avg_pool1d()

+

Avg_pool1d

+

nnf_avg_pool2d()

+

Avg_pool2d

+

nnf_avg_pool3d()

+

Avg_pool3d

+

nnf_batch_norm()

+

Batch_norm

+

nnf_bilinear()

+

Bilinear

+

nnf_binary_cross_entropy()

+

Binary_cross_entropy

+

nnf_binary_cross_entropy_with_logits()

+

Binary_cross_entropy_with_logits

+

nnf_celu() nnf_celu_()

+

Celu

+

nnf_contrib_sparsemax()

+

Sparsemax

+

nnf_conv1d()

+

Conv1d

+

nnf_conv2d()

+

Conv2d

+

nnf_conv3d()

+

Conv3d

+

nnf_conv_tbc()

+

Conv_tbc

+

nnf_conv_transpose1d()

+

Conv_transpose1d

+

nnf_conv_transpose2d()

+

Conv_transpose2d

+

nnf_conv_transpose3d()

+

Conv_transpose3d

+

nnf_cosine_embedding_loss()

+

Cosine_embedding_loss

+

nnf_cosine_similarity()

+

Cosine_similarity

+

nnf_cross_entropy()

+

Cross_entropy

+

nnf_ctc_loss()

+

Ctc_loss

+

nnf_dropout()

+

Dropout

+

nnf_dropout2d()

+

Dropout2d

+

nnf_dropout3d()

+

Dropout3d

+

nnf_elu() nnf_elu_()

+

Elu

+

nnf_embedding()

+

Embedding

+

nnf_embedding_bag()

+

Embedding_bag

+

nnf_fold()

+

Fold

+

nnf_fractional_max_pool2d()

+

Fractional_max_pool2d

+

nnf_fractional_max_pool3d()

+

Fractional_max_pool3d

+

nnf_gelu()

+

Gelu

+

nnf_glu()

+

Glu

+

nnf_grid_sample()

+

Grid_sample

+

nnf_group_norm()

+

Group_norm

+

nnf_gumbel_softmax()

+

Gumbel_softmax

+

nnf_hardshrink()

+

Hardshrink

+

nnf_hardsigmoid()

+

Hardsigmoid

+

nnf_hardswish()

+

Hardswish

+

nnf_hardtanh() nnf_hardtanh_()

+

Hardtanh

+

nnf_hinge_embedding_loss()

+

Hinge_embedding_loss

+

nnf_instance_norm()

+

Instance_norm

+

nnf_interpolate()

+

Interpolate

+

nnf_kl_div()

+

Kl_div

+

nnf_l1_loss()

+

L1_loss

+

nnf_layer_norm()

+

Layer_norm

+

nnf_leaky_relu()

+

Leaky_relu

+

nnf_linear()

+

Linear

+

nnf_local_response_norm()

+

Local_response_norm

+

nnf_log_softmax()

+

Log_softmax

+

nnf_logsigmoid()

+

Logsigmoid

+

nnf_lp_pool1d()

+

Lp_pool1d

+

nnf_lp_pool2d()

+

Lp_pool2d

+

nnf_margin_ranking_loss()

+

Margin_ranking_loss

+

nnf_max_pool1d()

+

Max_pool1d

+

nnf_max_pool2d()

+

Max_pool2d

+

nnf_max_pool3d()

+

Max_pool3d

+

nnf_max_unpool1d()

+

Max_unpool1d

+

nnf_max_unpool2d()

+

Max_unpool2d

+

nnf_max_unpool3d()

+

Max_unpool3d

+

nnf_mse_loss()

+

Mse_loss

+

nnf_multi_head_attention_forward()

+

Multi head attention forward

+

nnf_multi_margin_loss()

+

Multi_margin_loss

+

nnf_multilabel_margin_loss()

+

Multilabel_margin_loss

+

nnf_multilabel_soft_margin_loss()

+

Multilabel_soft_margin_loss

+

nnf_nll_loss()

+

Nll_loss

+

nnf_normalize()

+

Normalize

+

nnf_one_hot()

+

One_hot

+

nnf_pad()

+

Pad

+

nnf_pairwise_distance()

+

Pairwise_distance

+

nnf_pdist()

+

Pdist

+

nnf_pixel_shuffle()

+

Pixel_shuffle

+

nnf_poisson_nll_loss()

+

Poisson_nll_loss

+

nnf_prelu()

+

Prelu

+

nnf_relu() nnf_relu_()

+

Relu

+

nnf_relu6()

+

Relu6

+

nnf_rrelu() nnf_rrelu_()

+

Rrelu

+

nnf_selu() nnf_selu_()

+

Selu

+

nnf_sigmoid()

+

Sigmoid

+

nnf_smooth_l1_loss()

+

Smooth_l1_loss

+

nnf_soft_margin_loss()

+

Soft_margin_loss

+

nnf_softmax()

+

Softmax

+

nnf_softmin()

+

Softmin

+

nnf_softplus()

+

Softplus

+

nnf_softshrink()

+

Softshrink

+

nnf_softsign()

+

Softsign

+

nnf_tanhshrink()

+

Tanhshrink

+

nnf_threshold() nnf_threshold_()

+

Threshold

+

nnf_triplet_margin_loss()

+

Triplet_margin_loss

+

nnf_triplet_margin_with_distance_loss()

+

Triplet margin with distance loss

+

nnf_unfold()

+

Unfold

+

optim_adadelta()

+

Adadelta optimizer

+

optim_adagrad()

+

Adagrad optimizer

+

optim_adam()

+

Implements Adam algorithm.

+

optim_asgd()

+

Averaged Stochastic Gradient Descent optimizer

+

optim_lbfgs()

+

LBFGS optimizer

+

optim_required()

+

Dummy value indicating a required value.

+

optim_rmsprop()

+

RMSprop optimizer

+

optim_rprop()

+

Implements the resilient backpropagation algorithm.

+

optim_sgd()

+

SGD optimizer

+

optimizer()

+

Creates a custom optimizer

+

slc()

+

Creates a slice

+

tensor_dataset()

+

Dataset wrapping tensors.

+

with_detect_anomaly()

+

Context-manager that enable anomaly detection for the autograd engine.

+

with_enable_grad()

+

Enable grad

+

with_no_grad()

+

Temporarily modify gradient recording.

+

Neural network modules

+

+
+

nn_adaptive_avg_pool1d()

+

Applies a 1D adaptive average pooling over an input signal composed of several input planes.

+

nn_adaptive_avg_pool2d()

+

Applies a 2D adaptive average pooling over an input signal composed of several input planes.

+

nn_adaptive_avg_pool3d()

+

Applies a 3D adaptive average pooling over an input signal composed of several input planes.

+

nn_adaptive_log_softmax_with_loss()

+

AdaptiveLogSoftmaxWithLoss module

+

nn_adaptive_max_pool1d()

+

Applies a 1D adaptive max pooling over an input signal composed of several input planes.

+

nn_adaptive_max_pool2d()

+

Applies a 2D adaptive max pooling over an input signal composed of several input planes.

+

nn_adaptive_max_pool3d()

+

Applies a 3D adaptive max pooling over an input signal composed of several input planes.

+

nn_avg_pool1d()

+

Applies a 1D average pooling over an input signal composed of several +input planes.

+

nn_avg_pool2d()

+

Applies a 2D average pooling over an input signal composed of several input +planes.

+

nn_avg_pool3d()

+

Applies a 3D average pooling over an input signal composed of several input +planes.

+

nn_batch_norm1d()

+

BatchNorm1D module

+

nn_batch_norm2d()

+

BatchNorm2D

+

nn_batch_norm3d()

+

BatchNorm3D

+

nn_bce_loss()

+

Binary cross entropy loss

+

nn_bce_with_logits_loss()

+

BCE with logits loss

+

nn_bilinear()

+

Bilinear module

+

nn_buffer()

+

Creates a nn_buffer

+

nn_celu()

+

CELU module

+

nn_contrib_sparsemax()

+

Sparsemax activation

+

nn_conv1d()

+

Conv1D module

+

nn_conv2d()

+

Conv2D module

+

nn_conv3d()

+

Conv3D module

+

nn_conv_transpose1d()

+

ConvTranspose1D

+

nn_conv_transpose2d()

+

ConvTranpose2D module

+

nn_conv_transpose3d()

+

ConvTranpose3D module

+

nn_cosine_embedding_loss()

+

Cosine embedding loss

+

nn_cross_entropy_loss()

+

CrossEntropyLoss module

+

nn_ctc_loss()

+

The Connectionist Temporal Classification loss.

+

nn_dropout()

Dropout module

+

nn_dropout2d()

Dropout2D module

+

nn_dropout3d()

Dropout3D module

+

nn_elu()

ELU module

+

nn_embedding()

Embedding module

+

nn_fractional_max_pool2d()

Applies a 2D fractional max pooling over an input signal composed of several input planes.

+

nn_fractional_max_pool3d()

Applies a 3D fractional max pooling over an input signal composed of several input planes.

+

nn_gelu()

GELU module

+

nn_glu()

GLU module

+

nn_group_norm()

Group normalization

+

nn_gru()

Applies a multi-layer gated recurrent unit (GRU) RNN to an input sequence.

+

nn_hardshrink()

Hardshwink module

+

nn_hardsigmoid()

Hardsigmoid module

+

nn_hardswish()

Hardswish module

+

nn_hardtanh()

Hardtanh module

+

nn_hinge_embedding_loss()

Hinge embedding loss

+

nn_identity()

Identity module

+

nn_init_calculate_gain()

Calculate gain

+

nn_init_constant_()

Constant initialization

+

nn_init_dirac_()

Dirac initialization

+

nn_init_eye_()

Eye initialization

+

nn_init_kaiming_normal_()

Kaiming normal initialization

+

nn_init_kaiming_uniform_()

Kaiming uniform initialization

+

nn_init_normal_()

Normal initialization

+

nn_init_ones_()

Ones initialization

+

nn_init_orthogonal_()

Orthogonal initialization

+

nn_init_sparse_()

Sparse initialization

+

nn_init_trunc_normal_()

Truncated normal initialization

+

nn_init_uniform_()

Uniform initialization

+

nn_init_xavier_normal_()

Xavier normal initialization

+

nn_init_xavier_uniform_()

Xavier uniform initialization

+

nn_init_zeros_()

Zeros initialization

+

nn_kl_div_loss()

Kullback-Leibler divergence loss

+

nn_l1_loss()

L1 loss

+

nn_layer_norm()

Layer normalization

+

nn_leaky_relu()

LeakyReLU module

+

nn_linear()

Linear module

+

nn_log_sigmoid()

LogSigmoid module

+

nn_log_softmax()

LogSoftmax module

+

nn_lp_pool1d()

Applies a 1D power-average pooling over an input signal composed of several input planes.

+

nn_lp_pool2d()

Applies a 2D power-average pooling over an input signal composed of several input planes.

+

nn_lstm()

Applies a multi-layer long short-term memory (LSTM) RNN to an input sequence.

+

nn_margin_ranking_loss()

Margin ranking loss

+

nn_max_pool1d()

MaxPool1D module

+

nn_max_pool2d()

MaxPool2D module

+

nn_max_pool3d()

Applies a 3D max pooling over an input signal composed of several input planes.

+

nn_max_unpool1d()

Computes a partial inverse of MaxPool1d.

+

nn_max_unpool2d()

Computes a partial inverse of MaxPool2d.

+

nn_max_unpool3d()

Computes a partial inverse of MaxPool3d.

+

nn_module()

Base class for all neural network modules.

+

nn_module_list()

Holds submodules in a list.

+

nn_mse_loss()

MSE loss

+

nn_multi_margin_loss()

Multi margin loss

+

nn_multihead_attention()

MultiHead attention

+

nn_multilabel_margin_loss()

Multilabel margin loss

+

nn_multilabel_soft_margin_loss()

Multi label soft margin loss

+

nn_nll_loss()

Nll loss

+

nn_pairwise_distance()

Pairwise distance

+

nn_parameter()

Creates an nn_parameter

+

nn_poisson_nll_loss()

Poisson NLL loss

+

nn_prelu()

PReLU module

+

nn_relu()

ReLU module

+

nn_relu6()

ReLu6 module

+

nn_rnn()

RNN module

+

nn_rrelu()

RReLU module

+

nn_selu()

SELU module

+

nn_sequential()

A sequential container

+

nn_sigmoid()

Sigmoid module

+

nn_smooth_l1_loss()

Smooth L1 loss

+

nn_soft_margin_loss()

Soft margin loss

+

nn_softmax()

Softmax module

+

nn_softmax2d()

Softmax2d module

+

nn_softmin()

Softmin

+

nn_softplus()

Softplus module

+

nn_softshrink()

Softshrink module

+

nn_softsign()

Softsign module

+

nn_tanh()

Tanh module

+

nn_tanhshrink()

Tanhshrink module

+

nn_threshold()

Threshoold module

+

nn_triplet_margin_loss()

Triplet margin loss

+

nn_triplet_margin_with_distance_loss()

Triplet margin with distance loss

+

nn_utils_clip_grad_norm_()

Clips gradient norm of an iterable of parameters.

+

nn_utils_clip_grad_value_()

Clips gradient of an iterable of parameters at specified value.

+

nn_utils_rnn_pack_padded_sequence()

Packs a Tensor containing padded sequences of variable length.

+

nn_utils_rnn_pack_sequence()

Packs a list of variable length Tensors

+

nn_utils_rnn_pad_packed_sequence()

Pads a packed batch of variable length sequences.

+

nn_utils_rnn_pad_sequence()

Pad a list of variable length Tensors with padding_value

+

is_nn_module()

Checks if the object is an nn_module

+

is_nn_parameter()

Checks if an object is a nn_parameter

+

is_nn_buffer()

Checks if the object is a nn_buffer

-

Neural networks functional module

+
+

Neural networks functional module

+

nnf_adaptive_avg_pool1d()

Adaptive_avg_pool1d

+

nnf_adaptive_avg_pool2d()

Adaptive_avg_pool2d

+

nnf_adaptive_avg_pool3d()

Adaptive_avg_pool3d

+

nnf_adaptive_max_pool1d()

Adaptive_max_pool1d

+

nnf_adaptive_max_pool2d()

Adaptive_max_pool2d

+

nnf_adaptive_max_pool3d()

Adaptive_max_pool3d

+

nnf_affine_grid()

Affine_grid

+

nnf_alpha_dropout()

Alpha_dropout

+

nnf_avg_pool1d()

Avg_pool1d

+

nnf_avg_pool2d()

Avg_pool2d

+

nnf_avg_pool3d()

Avg_pool3d

+

nnf_batch_norm()

Batch_norm

+

nnf_bilinear()

Bilinear

+

nnf_binary_cross_entropy()

Binary_cross_entropy

+

nnf_binary_cross_entropy_with_logits()

Binary_cross_entropy_with_logits

+

nnf_celu() nnf_celu_()

Celu

+

nnf_contrib_sparsemax()

Sparsemax

+

nnf_conv1d()

Conv1d

+

nnf_conv2d()

Conv2d

+

nnf_conv3d()

Conv3d

+

nnf_conv_tbc()

Conv_tbc

+

nnf_conv_transpose1d()

Conv_transpose1d

+

nnf_conv_transpose2d()

Conv_transpose2d

+

nnf_conv_transpose3d()

Conv_transpose3d

+

nnf_cosine_embedding_loss()

Cosine_embedding_loss

+

nnf_cosine_similarity()

Cosine_similarity

+

nnf_cross_entropy()

Cross_entropy

+

nnf_ctc_loss()

Ctc_loss

+

nnf_dropout()

Dropout

+

nnf_dropout2d()

Dropout2d

+

nnf_dropout3d()

Dropout3d

+

nnf_elu() nnf_elu_()

Elu

+

nnf_embedding()

Embedding

+

nnf_embedding_bag()

Embedding_bag

+

nnf_fold()

Fold

+

nnf_fractional_max_pool2d()

Fractional_max_pool2d

+

nnf_fractional_max_pool3d()

Fractional_max_pool3d

+

nnf_gelu()

Gelu

+

nnf_glu()

Glu

+

nnf_grid_sample()

Grid_sample

+

nnf_group_norm()

Group_norm

+

nnf_gumbel_softmax()

Gumbel_softmax

+

nnf_hardshrink()

Hardshrink

+

nnf_hardsigmoid()

Hardsigmoid

+

nnf_hardswish()

Hardswish

+

nnf_hardtanh() nnf_hardtanh_()

Hardtanh

+

nnf_hinge_embedding_loss()

Hinge_embedding_loss

+

nnf_instance_norm()

Instance_norm

+

nnf_interpolate()

Interpolate

+

nnf_kl_div()

Kl_div

+

nnf_l1_loss()

L1_loss

+

nnf_layer_norm()

Layer_norm

+

nnf_leaky_relu()

Leaky_relu

+

nnf_linear()

Linear

+

nnf_local_response_norm()

Local_response_norm

+

nnf_log_softmax()

Log_softmax

+

nnf_logsigmoid()

Logsigmoid

+

nnf_lp_pool1d()

Lp_pool1d

+

nnf_lp_pool2d()

Lp_pool2d

+

nnf_margin_ranking_loss()

Margin_ranking_loss

+

nnf_max_pool1d()

Max_pool1d

+

nnf_max_pool2d()

Max_pool2d

+

nnf_max_pool3d()

Max_pool3d

+

nnf_max_unpool1d()

Max_unpool1d

+

nnf_max_unpool2d()

Max_unpool2d

+

nnf_max_unpool3d()

Max_unpool3d

+

nnf_mse_loss()

Mse_loss

+

nnf_multi_head_attention_forward()

Multi head attention forward

+

nnf_multi_margin_loss()

Multi_margin_loss

+

nnf_multilabel_margin_loss()

Multilabel_margin_loss

+

nnf_multilabel_soft_margin_loss()

Multilabel_soft_margin_loss

+

nnf_nll_loss()

Nll_loss

+

nnf_normalize()

Normalize

+

nnf_one_hot()

One_hot

+

nnf_pad()

Pad

+

nnf_pairwise_distance()

Pairwise_distance

+

nnf_pdist()

Pdist

+

nnf_pixel_shuffle()

Pixel_shuffle

+

nnf_poisson_nll_loss()

Poisson_nll_loss

+

nnf_prelu()

Prelu

+

nnf_relu() nnf_relu_()

Relu

+

nnf_relu6()

Relu6

+

nnf_rrelu() nnf_rrelu_()

Rrelu

+

nnf_selu() nnf_selu_()

Selu

+

nnf_sigmoid()

Sigmoid

+

nnf_smooth_l1_loss()

Smooth_l1_loss

+

nnf_soft_margin_loss()

Soft_margin_loss

+

nnf_softmax()

Softmax

+

nnf_softmin()

Softmin

+

nnf_softplus()

Softplus

+

nnf_softshrink()

Softshrink

+

nnf_softsign()

Softsign

+

nnf_tanhshrink()

Tanhshrink

+

nnf_threshold() nnf_threshold_()

Threshold

+

nnf_triplet_margin_loss()

Triplet_margin_loss

+

nnf_triplet_margin_with_distance_loss()

Triplet margin with distance loss

+

nnf_unfold()

Unfold

-

Optimizers

+
+

Optimizers

+

optimizer()

Creates a custom optimizer

+

optim_adadelta()

Adadelta optimizer

+

optim_adagrad()

Adagrad optimizer

+

optim_adam()

Implements Adam algorithm.

+

optim_asgd()

Averaged Stochastic Gradient Descent optimizer

+

optim_lbfgs()

LBFGS optimizer

+

optim_required()

Dummy value indicating a required value.

+

optim_rmsprop()

RMSprop optimizer

+

optim_rprop()

Implements the resilient backpropagation algorithm.

+

optim_sgd()

SGD optimizer

+

is_optimizer()

Checks if the object is a torch optimizer

-

Learning rate schedulers

+
+

Learning rate schedulers

+

lr_lambda()

Sets the learning rate of each parameter group to the initial lr times a given function. When last_epoch=-1, sets initial lr as lr.

+

lr_multiplicative()

Multiply the learning rate of each parameter group by the factor given in the specified function. When last_epoch=-1, sets initial lr as lr.

+

lr_one_cycle()

Once cycle learning rate

+

lr_scheduler()

Creates learning rate schedulers

+

lr_step()

Step learning rate decay

-

Datasets

+
+

Datasets

+

dataset()

Helper function to create an R6 class that inherits from the abstract Dataset class

+

dataset_subset()

Dataset Subset

+

dataloader()

Data loader. Combines a dataset and a sampler, and provides single- or multi-process iterators over the dataset.

+

dataloader_make_iter()

Creates an iterator from a DataLoader

+

dataloader_next()

Get the next element of a dataloader iterator

+

enumerate()

Enumerate an iterator

+

enumerate(<dataloader>)

Enumerate an iterator

+

tensor_dataset()

Dataset wrapping tensors.

+

is_dataloader()

Checks if the object is a dataloader

-

Distributions

+
+

Distributions

+

Distribution

Generic R6 class representing distributions

+

distr_bernoulli()

Creates a Bernoulli distribution parameterized by probs or logits (but not both). Samples are binary (0 or 1). They take the value 1 with probability p and 0 with probability 1 - p.

+

distr_categorical()

Creates a categorical distribution parameterized by either probs or logits (but not both).

+

distr_chi2()

Creates a Chi2 distribution parameterized by shape parameter df. This is exactly equivalent to distr_gamma(alpha=0.5*df, beta=0.5)

+

distr_gamma()

Creates a Gamma distribution parameterized by shape concentration and rate.

+

distr_mixture_same_family()

Mixture of components in the same family

+

distr_multivariate_normal()

Gaussian distribution

+

distr_normal()

Creates a normal (also called Gaussian) distribution parameterized by loc and scale.

+

distr_poisson()

Creates a Poisson distribution parameterized by rate, the rate parameter.

+

Constraint

Abstract base class for constraints.

-

Autograd

+
+

Autograd

+

autograd_backward()

Computes the sum of gradients of given tensors w.r.t. graph leaves.

+

autograd_function()

Records operation history and defines formulas for differentiating ops.

+

autograd_grad()

Computes and returns the sum of gradients of outputs w.r.t. the inputs.

+

autograd_set_grad_mode()

Set grad mode

+

with_no_grad()

Temporarily modify gradient recording.

+

with_enable_grad()

Enable grad

+

AutogradContext

Class representing the context.

-

Linear Algebra

+
+

Linear Algebra

+

linalg_cholesky()

Computes the Cholesky decomposition of a complex Hermitian or real symmetric positive-definite matrix.

+

linalg_cholesky_ex()

Computes the Cholesky decomposition of a complex Hermitian or real symmetric positive-definite matrix.

+

linalg_cond()

Computes the condition number of a matrix with respect to a matrix norm.

+

linalg_det()

Computes the determinant of a square matrix.

+

linalg_eig()

Computes the eigenvalue decomposition of a square matrix if it exists.

+

linalg_eigh()

Computes the eigenvalue decomposition of a complex Hermitian or real symmetric matrix.

+

linalg_eigvals()

Computes the eigenvalues of a square matrix.

+

linalg_eigvalsh()

Computes the eigenvalues of a complex Hermitian or real symmetric matrix.

+

linalg_householder_product()

Computes the first n columns of a product of Householder matrices.

+

linalg_inv()

Computes the inverse of a square matrix if it exists.

+

linalg_inv_ex()

Computes the inverse of a square matrix if it is invertible.

+

linalg_lstsq()

Computes a solution to the least squares problem of a system of linear equations.

+

linalg_matrix_norm()

Computes a matrix norm.

+

linalg_matrix_power()

Computes the n-th power of a square matrix for an integer n.

+

linalg_matrix_rank()

Computes the numerical rank of a matrix.

+

linalg_multi_dot()

Efficiently multiplies two or more matrices

+

linalg_norm()

Computes a vector or matrix norm.

+

linalg_pinv()

Computes the pseudoinverse (Moore-Penrose inverse) of a matrix.

+

linalg_qr()

Computes the QR decomposition of a matrix.

+

linalg_slogdet()

Computes the sign and natural logarithm of the absolute value of the determinant of a square matrix.

+

linalg_solve()

Computes the solution of a square system of linear equations with a unique solution.

+

linalg_svd()

Computes the singular value decomposition (SVD) of a matrix.

+

linalg_svdvals()

Computes the singular values of a matrix.

+

linalg_tensorinv()

Computes the multiplicative inverse of torch_tensordot()

+

Computes the multiplicative inverse of torch_tensordot()

linalg_tensorsolve()

Computes the solution X to the system torch_tensordot(A, X) = B.

+

linalg_vector_norm()

Computes a vector norm.

-

Cuda utilities

+
+

Cuda utilities

+

cuda_current_device()

Returns the index of a currently selected device.

+

cuda_device_count()

Returns the number of GPUs available.

+

cuda_get_device_capability()

Returns the major and minor CUDA capability of device

+

cuda_is_available()

Returns a bool indicating if CUDA is currently available.

-

JIT

+
+

JIT

+

jit_compile()

Compile TorchScript code into a graph

+

jit_load()

Loads a script_function or script_module previously saved with jit_save

+

jit_save()

Saves a script_function to a path

+

jit_save_for_mobile()

Saves a script_function or script_module in bytecode form, to be loaded on a mobile device

+

jit_scalar()

Adds the 'jit_scalar' class to the input

+

jit_trace()

Trace a function and return an executable script_function.

+

jit_trace_module()

Trace a module

+

jit_tuple()

Adds the 'jit_tuple' class to the input

-

Backends

+
+

Backends

+

backends_mkl_is_available()

MKL is available

+

backends_mkldnn_is_available()

MKLDNN is available

+

backends_openmp_is_available()

OpenMP is available

-

Installation

+
+

Installation

+

install_torch()

Install Torch

+

install_torch_from_file()

Install Torch from files

+

get_install_libs_url()

List of files to download

- +
+
-
- +
- - + + diff --git a/dev/reference/install_torch.html b/dev/reference/install_torch.html index ca9f1a06f..5e0699fce 100644 --- a/dev/reference/install_torch.html +++ b/dev/reference/install_torch.html @@ -1,79 +1,18 @@ - - - - - - - -Install Torch — install_torch • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Install Torch — install_torch • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,46 +111,34 @@

Installs Torch and its dependencies.

-
install_torch(
-  version = "1.9.1",
-  type = install_type(version = version),
-  reinstall = FALSE,
-  path = install_path(),
-  timeout = 360,
-  ...
-)
- -

Arguments

- - - - - - - - - - - - - - - - - - - - - - - - - - -
version

The Torch version to install.

type

The installation type for Torch. Valid values are "cpu" or the 'CUDA' version.

reinstall

Re-install Torch even if its already installed?

path

Optional path to install or check for an already existing installation.

timeout

Optional timeout in seconds for large file download.

...

other optional arguments (like `load` for manual installation).

- -

Details

+
+
install_torch(
+  version = "1.9.1",
+  type = install_type(version = version),
+  reinstall = FALSE,
+  path = install_path(),
+  timeout = 360,
+  ...
+)
+
+
+

Arguments

+
version
+

The Torch version to install.

+
type
+

The installation type for Torch. Valid values are "cpu" or the 'CUDA' version.

+
reinstall
+

Re-install Torch even if its already installed?

+
path
+

Optional path to install or check for an already existing installation.

+
timeout
+

Optional timeout in seconds for large file download.

+
...
+

other optional arguments (like `load` for manual installation).

+
+
+

Details

When using path to install in a specific location, make sure the TORCH_HOME environment variable is set to this same path to reuse this installation. The TORCH_INSTALL environment variable can be set to 0 to prevent auto-installing torch and TORCH_LOAD set to 0 @@ -236,32 +146,29 @@ to avoid loading dependencies automatically. These environment variables are mea cases and troubleshooting only. When timeout error occurs during library archive download, or length of downloaded files differ from reported length, an increase of the timeout value should help.

+
+
-
- +
- - + + diff --git a/dev/reference/install_torch_from_file.html b/dev/reference/install_torch_from_file.html index 32e65a41d..ba8b213f1 100644 --- a/dev/reference/install_torch_from_file.html +++ b/dev/reference/install_torch_from_file.html @@ -1,79 +1,18 @@ - - - - - - - -Install Torch from files — install_torch_from_file • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Install Torch from files — install_torch_from_file • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,71 +111,58 @@

Installs Torch and its dependencies from files.

-
install_torch_from_file(
-  version = "1.9.1",
-  type = install_type(version = version),
-  libtorch,
-  liblantern,
-  ...
-)
- -

Arguments

- - - - - - - - - - - - - - - - - - - - - - -
version

The Torch version to install.

type

The installation type for Torch. Valid values are "cpu" or the 'CUDA' version.

libtorch

The installation archive file to use for Torch. Shall be a "file://" URL scheme.

liblantern

The installation archive file to use for Lantern. Shall be a "file://" URL scheme.

...

other parameters to be passed to "install_torch()"

- -

Details

+
+
install_torch_from_file(
+  version = "1.9.1",
+  type = install_type(version = version),
+  libtorch,
+  liblantern,
+  ...
+)
+
+
+

Arguments

+
version
+

The Torch version to install.

+
type
+

The installation type for Torch. Valid values are "cpu" or the 'CUDA' version.

+
libtorch
+

The installation archive file to use for Torch. Shall be a "file://" URL scheme.

+
liblantern
+

The installation archive file to use for Lantern. Shall be a "file://" URL scheme.

+
...
+

other parameters to be passed to "install_torch()"

+
+
+

Details

When "install_torch()" initiated download is not possible, but installation archive files are present on local filesystem, "install_torch_from_file()" can be used as a workaround to installation issue. "libtorch" is the archive containing all torch modules, and "liblantern" is the C interface to libtorch that is used for the R package. Both are highly dependent, and should be checked through "get_install_libs_url()"

+
+
-
- +
- - + + diff --git a/dev/reference/is_dataloader.html b/dev/reference/is_dataloader.html index f2016ee16..ae860c226 100644 --- a/dev/reference/is_dataloader.html +++ b/dev/reference/is_dataloader.html @@ -1,79 +1,18 @@ - - - - - - - -Checks if the object is a dataloader — is_dataloader • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Checks if the object is a dataloader — is_dataloader • torch - - - - - - + + - - -
-
- -
- -
+
@@ -189,43 +111,37 @@

Checks if the object is a dataloader

-
is_dataloader(x)
- -

Arguments

- - - - - - -
x

object to check

+
+
is_dataloader(x)
+
+
+

Arguments

+
x
+

object to check

+
+
-
- +
- - + + diff --git a/dev/reference/is_nn_buffer.html b/dev/reference/is_nn_buffer.html index 769b796b4..ec97ac20e 100644 --- a/dev/reference/is_nn_buffer.html +++ b/dev/reference/is_nn_buffer.html @@ -1,79 +1,18 @@ - - - - - - - -Checks if the object is a nn_buffer — is_nn_buffer • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Checks if the object is a nn_buffer — is_nn_buffer • torch - - - - - - + + - - -
-
- -
- -
+
@@ -189,43 +111,37 @@

Checks if the object is a nn_buffer

-
is_nn_buffer(x)
- -

Arguments

- - - - - - -
x

object to check

+
+
is_nn_buffer(x)
+
+
+

Arguments

+
x
+

object to check

+
+
-
- +
- - + + diff --git a/dev/reference/is_nn_module.html b/dev/reference/is_nn_module.html index f3b0d76ea..a71ab523f 100644 --- a/dev/reference/is_nn_module.html +++ b/dev/reference/is_nn_module.html @@ -1,79 +1,18 @@ - - - - - - - -Checks if the object is an nn_module — is_nn_module • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Checks if the object is an nn_module — is_nn_module • torch - - - - - - + + - - -
-
- -
- -
+
@@ -189,43 +111,37 @@

Checks if the object is an nn_module

-
is_nn_module(x)
- -

Arguments

- - - - - - -
x

object to check

+
+
is_nn_module(x)
+
+
+

Arguments

+
x
+

object to check

+
+
-
- +
- - + + diff --git a/dev/reference/is_nn_parameter.html b/dev/reference/is_nn_parameter.html index d2a57a0dd..6267d6d71 100644 --- a/dev/reference/is_nn_parameter.html +++ b/dev/reference/is_nn_parameter.html @@ -1,79 +1,18 @@ - - - - - - - -Checks if an object is a nn_parameter — is_nn_parameter • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Checks if an object is a nn_parameter — is_nn_parameter • torch - - - - - - + + - - -
-
- -
- -
+
@@ -189,43 +111,37 @@

Checks if an object is a nn_parameter

-
is_nn_parameter(x)
- -

Arguments

- - - - - - -
x

the object to check

+
+
is_nn_parameter(x)
+
+
+

Arguments

+
x
+

the object to check

+
+
-
- +
- - + + diff --git a/dev/reference/is_optimizer.html b/dev/reference/is_optimizer.html index 896f0f54e..44e1b6865 100644 --- a/dev/reference/is_optimizer.html +++ b/dev/reference/is_optimizer.html @@ -1,79 +1,18 @@ - - - - - - - -Checks if the object is a torch optimizer — is_optimizer • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Checks if the object is a torch optimizer — is_optimizer • torch - - - - - - + + - - -
-
- -
- -
+
@@ -189,43 +111,37 @@

Checks if the object is a torch optimizer

-
is_optimizer(x)
- -

Arguments

- - - - - - -
x

object to check

+
+
is_optimizer(x)
+
+
+

Arguments

+
x
+

object to check

+
+
-
- +
- - + + diff --git a/dev/reference/is_torch_device.html b/dev/reference/is_torch_device.html index 7dcfa13e5..2b24deb54 100644 --- a/dev/reference/is_torch_device.html +++ b/dev/reference/is_torch_device.html @@ -1,79 +1,18 @@ - - - - - - - -Checks if object is a device — is_torch_device • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Checks if object is a device — is_torch_device • torch - - - - - - + + - - -
-
- -
- -
+
@@ -189,43 +111,37 @@

Checks if object is a device

-
is_torch_device(x)
- -

Arguments

- - - - - - -
x

object to check

+
+
is_torch_device(x)
+
+
+

Arguments

+
x
+

object to check

+
+
-
- +
- - + + diff --git a/dev/reference/is_torch_dtype.html b/dev/reference/is_torch_dtype.html index 151d1282b..8abbb09f8 100644 --- a/dev/reference/is_torch_dtype.html +++ b/dev/reference/is_torch_dtype.html @@ -1,79 +1,18 @@ - - - - - - - -Check if object is a torch data type — is_torch_dtype • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Check if object is a torch data type — is_torch_dtype • torch - - - - - - + + - - -
-
- -
- -
+
@@ -189,43 +111,37 @@

Check if object is a torch data type

-
is_torch_dtype(x)
- -

Arguments

- - - - - - -
x

object to check.

+
+
is_torch_dtype(x)
+
+
+

Arguments

+
x
+

object to check.

+
+
-
- +
- - + + diff --git a/dev/reference/is_torch_layout.html b/dev/reference/is_torch_layout.html index c3e96571d..b3bfac21c 100644 --- a/dev/reference/is_torch_layout.html +++ b/dev/reference/is_torch_layout.html @@ -1,79 +1,18 @@ - - - - - - - -Check if an object is a torch layout. — is_torch_layout • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Check if an object is a torch layout. — is_torch_layout • torch - - - - - - + + - - -
-
- -
- -
+
@@ -189,43 +111,37 @@

Check if an object is a torch layout.

-
is_torch_layout(x)
- -

Arguments

- - - - - - -
x

object to check

+
+
is_torch_layout(x)
+
+
+

Arguments

+
x
+

object to check

+
+
-
- +
- - + + diff --git a/dev/reference/is_torch_memory_format.html b/dev/reference/is_torch_memory_format.html index 7a1aa849a..c4b295369 100644 --- a/dev/reference/is_torch_memory_format.html +++ b/dev/reference/is_torch_memory_format.html @@ -1,79 +1,18 @@ - - - - - - - -Check if an object is a memory format — is_torch_memory_format • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Check if an object is a memory format — is_torch_memory_format • torch - - - - - - + + - - -
-
- -
- -
+
@@ -189,43 +111,37 @@

Check if an object is a memory format

-
is_torch_memory_format(x)
- -

Arguments

- - - - - - -
x

object to check

+
+
is_torch_memory_format(x)
+
+
+

Arguments

+
x
+

object to check

+
+
-
- +
- - + + diff --git a/dev/reference/is_torch_qscheme.html b/dev/reference/is_torch_qscheme.html index c3be73740..5f5a083cd 100644 --- a/dev/reference/is_torch_qscheme.html +++ b/dev/reference/is_torch_qscheme.html @@ -1,79 +1,18 @@ - - - - - - - -Checks if an object is a QScheme — is_torch_qscheme • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Checks if an object is a QScheme — is_torch_qscheme • torch - - - - - - + + - - -
-
- -
- -
+
@@ -189,43 +111,37 @@

Checks if an object is a QScheme

-
is_torch_qscheme(x)
- -

Arguments

- - - - - - -
x

object to check

+
+
is_torch_qscheme(x)
+
+
+

Arguments

+
x
+

object to check

+
+
-
- +
- - + + diff --git a/dev/reference/is_undefined_tensor.html b/dev/reference/is_undefined_tensor.html index f39a24c93..19a709f02 100644 --- a/dev/reference/is_undefined_tensor.html +++ b/dev/reference/is_undefined_tensor.html @@ -1,79 +1,18 @@ - - - - - - - -Checks if a tensor is undefined — is_undefined_tensor • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Checks if a tensor is undefined — is_undefined_tensor • torch - - - - - - + + - - -
-
- -
- -
+
@@ -189,43 +111,37 @@

Checks if a tensor is undefined

-
is_undefined_tensor(x)
- -

Arguments

- - - - - - -
x

tensor to check

+
+
is_undefined_tensor(x)
+
+
+

Arguments

+
x
+

tensor to check

+
+
-
- +
- - + + diff --git a/dev/reference/jit_compile.html b/dev/reference/jit_compile.html index d97125d44..831b2c610 100644 --- a/dev/reference/jit_compile.html +++ b/dev/reference/jit_compile.html @@ -1,80 +1,19 @@ - - - - - - - -Compile TorchScript code into a graph — jit_compile • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Compile TorchScript code into a graph — jit_compile • torch - - - - - - + + - - -
-
- -
- -
+
-

See the TorchScript language reference for +

See the TorchScript language reference for documentation on how to write TorchScript code.

-
jit_compile(source)
- -

Arguments

- - - - - - -
source

valid TorchScript source code.

- - -

Examples

-
if (torch_is_installed()) {
-comp <- jit_compile("
-def fn (x):
-  return torch.abs(x)
-  
-def foo (x):
-  return torch.sum(x)
-
-")
-
-comp$fn(torch_tensor(-1))
-comp$foo(torch_randn(10))
-
-}
-#> torch_tensor
-#> -4.03201
-#> [ CPUFloatType{} ]
-
+
+
jit_compile(source)
+
+ +
+

Arguments

+
source
+

valid TorchScript source code.

+
+ +
+

Examples

+
if (torch_is_installed()) {
+comp <- jit_compile("
+def fn (x):
+  return torch.abs(x)
+  
+def foo (x):
+  return torch.sum(x)
+
+")
+
+comp$fn(torch_tensor(-1))
+comp$foo(torch_randn(10))
+
+}
+#> torch_tensor
+#> 2.75868
+#> [ CPUFloatType{} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/jit_load.html b/dev/reference/jit_load.html index c0c766645..db4735224 100644 --- a/dev/reference/jit_load.html +++ b/dev/reference/jit_load.html @@ -1,79 +1,18 @@ - - - - - - - -Loads a script_function or script_module previously saved with jit_save — jit_load • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Loads a script_function or script_module previously saved with jit_save — jit_load • torch - - - - - - + + - - -
-
- -
- -
+
@@ -189,48 +111,40 @@

Loads a script_function or script_module previously saved with jit_save

-
jit_load(path, ...)
- -

Arguments

- - - - - - - - - - -
path

a path to a script_function or script_module serialized with -jit_save().

...

currently unused.

+
+
jit_load(path, ...)
+
+
+

Arguments

+
path
+

a path to a script_function or script_module serialized with +jit_save().

+
...
+

currently unused.

+
+
-
- +
- - + + diff --git a/dev/reference/jit_save.html b/dev/reference/jit_save.html index cf02e34f2..e55af2451 100644 --- a/dev/reference/jit_save.html +++ b/dev/reference/jit_save.html @@ -1,79 +1,18 @@ - - - - - - - -Saves a script_function to a path — jit_save • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Saves a script_function to a path — jit_save • torch - - - - - - + + - - -
-
- -
- -
+
@@ -189,65 +111,57 @@

Saves a script_function to a path

-
jit_save(obj, path, ...)
- -

Arguments

- - - - - - - - - - - - - - -
obj

An script_function to save

path

The path to save the serialized function.

...

currently unused

- - -

Examples

-
if (torch_is_installed()) {
-fn <- function(x) {
-  torch_relu(x)
-}
-
-input <- torch_tensor(c(-1, 0, 1))
-tr_fn <- jit_trace(fn, input)
-
-tmp <- tempfile("tst", fileext = "pt")
-jit_save(tr_fn, tmp)
-
-}
-
+
+
jit_save(obj, path, ...)
+
+ +
+

Arguments

+
obj
+

An script_function to save

+
path
+

The path to save the serialized function.

+
...
+

currently unused

+
+ +
+

Examples

+
if (torch_is_installed()) {
+fn <- function(x) {
+  torch_relu(x)
+}
+
+input <- torch_tensor(c(-1, 0, 1))
+tr_fn <- jit_trace(fn, input)
+
+tmp <- tempfile("tst", fileext = "pt")
+jit_save(tr_fn, tmp)
+
+}
+
+
+
-
- +
- - + + diff --git a/dev/reference/jit_save_for_mobile.html b/dev/reference/jit_save_for_mobile.html index 461a9bfff..619836c73 100644 --- a/dev/reference/jit_save_for_mobile.html +++ b/dev/reference/jit_save_for_mobile.html @@ -1,82 +1,21 @@ - - - - - - - -Saves a script_function or script_module in bytecode form, -to be loaded on a mobile device — jit_save_for_mobile • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Saves a script_function or script_module in bytecode form, +to be loaded on a mobile device — jit_save_for_mobile • torch - - - - - - - - + + -
-
- -
- -
+
@@ -194,65 +116,57 @@ to be loaded on a mobile device
-
- -
- -
+
@@ -189,47 +111,39 @@

List the Torch and Lantern files to download as local files in order to proceed with install_torch_from_file().

-
get_install_libs_url(version = "1.9.1", type = install_type(version = version))
- -

Arguments

- - - - - - - - - - -
version

The Torch version to install.

type

The installation type for Torch. Valid values are "cpu" or the 'CUDA' version.

+
+
get_install_libs_url(version = "1.9.1", type = install_type(version = version))
+
+
+

Arguments

+
version
+

The Torch version to install.

+
type
+

The installation type for Torch. Valid values are "cpu" or the 'CUDA' version.

+
+

to be loaded on a mobile device

-
jit_save_for_mobile(obj, path, ...)
- -

Arguments

- - - - - - - - - - - - - - -
obj

An script_function or script_module to save

path

The path to save the serialized function.

...

currently unused

- +
+
jit_save_for_mobile(obj, path, ...)
+
-

Examples

-
if (torch_is_installed()) {
-fn <- function(x) {
-  torch_relu(x)
-}
-
-input <- torch_tensor(c(-1, 0, 1))
-tr_fn <- jit_trace(fn, input)
-
-tmp <- tempfile("tst", fileext = "pt")
-jit_save_for_mobile(tr_fn, tmp)
-
-}
-
+
+

Arguments

+
obj
+

An script_function or script_module to save

+
path
+

The path to save the serialized function.

+
...
+

currently unused

+
+ +
+

Examples

+
if (torch_is_installed()) {
+fn <- function(x) {
+  torch_relu(x)
+}
+
+input <- torch_tensor(c(-1, 0, 1))
+tr_fn <- jit_trace(fn, input)
+
+tmp <- tempfile("tst", fileext = "pt")
+jit_save_for_mobile(tr_fn, tmp)
+
+}
+
+
+ -
- +
- - + + diff --git a/dev/reference/jit_scalar.html b/dev/reference/jit_scalar.html index cd011ee5c..ed8e2071d 100644 --- a/dev/reference/jit_scalar.html +++ b/dev/reference/jit_scalar.html @@ -1,80 +1,19 @@ - - - - - - - -Adds the 'jit_scalar' class to the input — jit_scalar • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Adds the 'jit_scalar' class to the input — jit_scalar • torch - - - - - - + + - - -
-
- -
- -
+
@@ -191,43 +113,37 @@ them to the jit." /> them to the jit.

-
jit_scalar(x)
- -

Arguments

- - - - - - -
x

a length 1 R vector.

+
+
jit_scalar(x)
+
+
+

Arguments

+
x
+

a length 1 R vector.

+
+
-
- +
- - + + diff --git a/dev/reference/jit_trace.html b/dev/reference/jit_trace.html index 3629984b3..d378fec99 100644 --- a/dev/reference/jit_trace.html +++ b/dev/reference/jit_trace.html @@ -1,81 +1,20 @@ - - - - - - - -Trace a function and return an executable script_function. — jit_trace • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Trace a function and return an executable script_function. — jit_trace • torch - - - - - - - - - - - - - - - - - + + -
-
- -
- -
+
@@ -193,50 +115,47 @@ recording the operations performed on all the tensors." /> recording the operations performed on all the tensors.

-
jit_trace(func, ..., strict = TRUE)
+
+
jit_trace(func, ..., strict = TRUE)
+
-

Arguments

- - - - - - - - - - - - - - -
func

An R function that will be run with example_inputs. func arguments +

+

Arguments

+
func
+

An R function that will be run with example_inputs. func arguments and return values must be tensors or (possibly nested) lists that contain tensors. -Can also be a nn_module(), in such case jit_trace_module() is used to trace -that module.

...

example inputs that will be passed to the function while +Can also be a nn_module(), in such case jit_trace_module() is used to trace +that module.

+
...
+

example inputs that will be passed to the function while tracing. The resulting trace can be run with inputs of different types and shapes assuming the traced operations support those types and shapes. example_inputs may also be a single Tensor in which case it is automatically wrapped in a list. Note that ... can not be named, and the order is -respected.

strict

run the tracer in a strict mode or not (default: TRUE). Only +respected.

+
strict
+

run the tracer in a strict mode or not (default: TRUE). Only turn this off when you want the tracer to record your mutable container types (currently list/dict) and you are sure that the container you are using in your problem is a constant structure and does not get used as control flow -(if, for) conditions.

- -

Value

- +(if, for) conditions.

+
+
+

Value

An script_function if func is a function and script_module if -func is a nn_module().

-

Details

- +func is a nn_module().

+
+
+

Details

The resulting recording of a standalone function produces a script_function. In the future we will also support tracing nn_modules.

-

Note

- +
+
+

Note

Scripting is not yet supported in R.

-

Warning

- +
+
+

Warning

@@ -247,8 +166,7 @@ Tracing only records operations done when the given function is run on the given tensors. Therefore, the returned script_function will always run the same traced graph on any input. This has some important implications when your module is expected to run different sets of operations, depending on the input and/or the -module state. For example,

    -
  • Tracing will not record any control-flow like if-statements or loops. When +module state. For example,

    • Tracing will not record any control-flow like if-statements or loops. When this control-flow is constant across your module, this is fine and it often inlines the control-flow decisions. But sometimes the control-flow is actually part of the model itself. For instance, a recurrent network is a loop over @@ -256,54 +174,51 @@ the (possibly dynamic) length of an input sequence.

    • In the returned script_function, operations that have different behaviors in training and eval modes will always behave as if it is in the mode it was in during tracing, no matter which mode the script_function is in.

    • -
    - -

    In cases like these, tracing would not be appropriate and scripting is a better +

In cases like these, tracing would not be appropriate and scripting is a better choice. If you trace such models, you may silently get incorrect results on subsequent invocations of the model. The tracer will try to emit warnings when doing something that may cause an incorrect trace to be produced.

+
-

Examples

-
if (torch_is_installed()) {
-fn <- function(x) {
- torch_relu(x)
-}
-input <- torch_tensor(c(-1, 0, 1))
-tr_fn <- jit_trace(fn, input)
-tr_fn(input)
-
-}
-#> torch_tensor
-#>  0
-#>  0
-#>  1
-#> [ CPUFloatType{3} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+fn <- function(x) {
+ torch_relu(x)
+}
+input <- torch_tensor(c(-1, 0, 1))
+tr_fn <- jit_trace(fn, input)
+tr_fn(input)
+
+}
+#> torch_tensor
+#>  0
+#>  0
+#>  1
+#> [ CPUFloatType{3} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/jit_trace_module.html b/dev/reference/jit_trace_module.html index f91e90e40..5fcb5bf42 100644 --- a/dev/reference/jit_trace_module.html +++ b/dev/reference/jit_trace_module.html @@ -1,83 +1,22 @@ - - - - - - - -Trace a module — jit_trace_module • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Trace a module — jit_trace_module • torch - - - - - - - - - - - - - - - - - + + -
-
- -
- -
+

Trace a module and return an executable ScriptModule that will be optimized -using just-in-time compilation. When a module is passed to jit_trace(), only +using just-in-time compilation. When a module is passed to jit_trace(), only the forward method is run and traced. With jit_trace_module(), you can specify a named list of method names to example inputs to trace (see the inputs) argument below.

-
jit_trace_module(mod, ..., strict = TRUE)
+
+
jit_trace_module(mod, ..., strict = TRUE)
+
-

Arguments

- - - - - - - - - - - - - - -
mod

A torch nn_module() containing methods whose names are specified -in inputs. The given methods will be compiled as a part of a single ScriptModule.

...

A named list containing sample inputs indexed by method names +

+

Arguments

+
mod
+

A torch nn_module() containing methods whose names are specified +in inputs. The given methods will be compiled as a part of a single ScriptModule.

+
...
+

A named list containing sample inputs indexed by method names in mod. The inputs will be passed to methods whose names correspond to inputs -keys while tracing. list('forward'=example_forward_input, 'method2'=example_method2_input).

strict

run the tracer in a strict mode or not (default: TRUE). Only +keys while tracing. list('forward'=example_forward_input, 'method2'=example_method2_input).

+
strict
+

run the tracer in a strict mode or not (default: TRUE). Only turn this off when you want the tracer to record your mutable container types (currently list/dict) and you are sure that the container you are using in your problem is a constant structure and does not get used as control flow -(if, for) conditions.

- -

Details

- -

See jit_trace for more information on tracing.

+(if, for) conditions.

+
+
+

Details

+

See jit_trace for more information on tracing.

+
-

Examples

-
if (torch_is_installed()) {
-linear <- nn_linear(10, 1)
-tr_linear <- jit_trace_module(linear, forward = list(torch_randn(10, 10)))
-
-x <- torch_randn(10, 10)
-torch_allclose(linear(x), tr_linear(x))
-
-}
-#> [1] TRUE
-
+
+

Examples

+
if (torch_is_installed()) {
+linear <- nn_linear(10, 1)
+tr_linear <- jit_trace_module(linear, forward = list(torch_randn(10, 10)))
+
+x <- torch_randn(10, 10)
+torch_allclose(linear(x), tr_linear(x))
+
+}
+#> [1] TRUE
+
+
+
-
- +
- - + + diff --git a/dev/reference/jit_tuple.html b/dev/reference/jit_tuple.html index 9bc1e440e..770236a09 100644 --- a/dev/reference/jit_tuple.html +++ b/dev/reference/jit_tuple.html @@ -1,80 +1,19 @@ - - - - - - - -Adds the 'jit_tuple' class to the input — jit_tuple • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Adds the 'jit_tuple' class to the input — jit_tuple • torch - - - - - - + + - - -
-
- -
- -
+
@@ -191,43 +113,37 @@ tuple and instead of a list or dictionary when tracing." /> tuple and instead of a list or dictionary when tracing.

-
jit_tuple(x)
- -

Arguments

- - - - - - -
x

the list object that will be converted to a tuple.

+
+
jit_tuple(x)
+
+
+

Arguments

+
x
+

the list object that will be converted to a tuple.

+
+
-
- +
- - + + diff --git a/dev/reference/linalg_cholesky.html b/dev/reference/linalg_cholesky.html index 904bc6478..aa0bc1246 100644 --- a/dev/reference/linalg_cholesky.html +++ b/dev/reference/linalg_cholesky.html @@ -1,81 +1,20 @@ - - - - - - - -Computes the Cholesky decomposition of a complex Hermitian or real symmetric positive-definite matrix. — linalg_cholesky • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Computes the Cholesky decomposition of a complex Hermitian or real symmetric positive-definite matrix. — linalg_cholesky • torch - - - - - - - - - - - - - - - + + - - -
-
- -
- -
+
@@ -193,22 +115,19 @@ the Cholesky decomposition of a complex Hermitian or real symme is defined as

-
linalg_cholesky(A)
- -

Arguments

- - - - - - -
A

(Tensor): tensor of shape (*, n, n) where * is zero or more batch dimensions -consisting of symmetric or Hermitian positive-definite matrices.

- -

Details

+
+
linalg_cholesky(A)
+
-

-A=LLHLKn×n +

+

Arguments

+
A
+

(Tensor): tensor of shape (*, n, n) where * is zero or more batch dimensions +consisting of symmetric or Hermitian positive-definite matrices.

+
+
+

Details

+

A=LLHLKn×n A = LL^{H}\mathrlap{\qquad L \in \mathbb{K}^{n \times n}}

where is a lower triangular matrix and @@ -217,89 +136,86 @@ transpose when is real-valued.

Supports input of float, double, cfloat and cdouble dtypes. Also supports batches of matrices, and if A is a batch of matrices then the output has the same batch dimensions.

-

See also

- -
-
+
+

See also

+
+
  • linalg_cholesky_ex() for a version of this operation that skips the (slow) error checking by default and instead returns the debug information. This makes it a faster way to check if a matrix is positive-definite. -linalg_eigh() for a different decomposition of a Hermitian matrix. +linalg_eigh() for a different decomposition of a Hermitian matrix. The eigenvalue decomposition gives more information about the matrix but it slower to compute than the Cholesky decomposition.

  • -
- -

Other linalg: -linalg_cholesky_ex(), -linalg_det(), -linalg_eigh(), -linalg_eigvalsh(), -linalg_eigvals(), -linalg_eig(), -linalg_householder_product(), -linalg_inv_ex(), -linalg_inv(), -linalg_lstsq(), -linalg_matrix_norm(), -linalg_matrix_power(), -linalg_matrix_rank(), -linalg_multi_dot(), -linalg_norm(), -linalg_pinv(), -linalg_qr(), -linalg_slogdet(), -linalg_solve(), -linalg_svdvals(), -linalg_svd(), -linalg_tensorinv(), -linalg_tensorsolve(), -linalg_vector_norm()

+

Other linalg: +linalg_cholesky_ex(), +linalg_det(), +linalg_eigh(), +linalg_eigvalsh(), +linalg_eigvals(), +linalg_eig(), +linalg_householder_product(), +linalg_inv_ex(), +linalg_inv(), +linalg_lstsq(), +linalg_matrix_norm(), +linalg_matrix_power(), +linalg_matrix_rank(), +linalg_multi_dot(), +linalg_norm(), +linalg_pinv(), +linalg_qr(), +linalg_slogdet(), +linalg_solve(), +linalg_svdvals(), +linalg_svd(), +linalg_tensorinv(), +linalg_tensorsolve(), +linalg_vector_norm()

+
-

Examples

-
if (torch_is_installed()) {
-a <- torch_eye(10)
-linalg_cholesky(a)
-
-}
-#> torch_tensor
-#>  1  0  0  0  0  0  0  0  0  0
-#>  0  1  0  0  0  0  0  0  0  0
-#>  0  0  1  0  0  0  0  0  0  0
-#>  0  0  0  1  0  0  0  0  0  0
-#>  0  0  0  0  1  0  0  0  0  0
-#>  0  0  0  0  0  1  0  0  0  0
-#>  0  0  0  0  0  0  1  0  0  0
-#>  0  0  0  0  0  0  0  1  0  0
-#>  0  0  0  0  0  0  0  0  1  0
-#>  0  0  0  0  0  0  0  0  0  1
-#> [ CPUFloatType{10,10} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+a <- torch_eye(10)
+linalg_cholesky(a)
+
+}
+#> torch_tensor
+#>  1  0  0  0  0  0  0  0  0  0
+#>  0  1  0  0  0  0  0  0  0  0
+#>  0  0  1  0  0  0  0  0  0  0
+#>  0  0  0  1  0  0  0  0  0  0
+#>  0  0  0  0  1  0  0  0  0  0
+#>  0  0  0  0  0  1  0  0  0  0
+#>  0  0  0  0  0  0  1  0  0  0
+#>  0  0  0  0  0  0  0  1  0  0
+#>  0  0  0  0  0  0  0  0  1  0
+#>  0  0  0  0  0  0  0  0  0  1
+#> [ CPUFloatType{10,10} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/linalg_cholesky_ex.html b/dev/reference/linalg_cholesky_ex.html index 3199832ad..4d39336d0 100644 --- a/dev/reference/linalg_cholesky_ex.html +++ b/dev/reference/linalg_cholesky_ex.html @@ -1,50 +1,7 @@ - - - - - - - -Computes the Cholesky decomposition of a complex Hermitian or real -symmetric positive-definite matrix. — linalg_cholesky_ex • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Computes the Cholesky decomposition of a complex Hermitian or real +symmetric positive-definite matrix. — linalg_cholesky_ex • torch - - - - - - - - - - - - - - + + - - - -
-
- -
- -
+

This function skips the (slow) error checking and error message construction -of linalg_cholesky(), instead directly returning the LAPACK +of linalg_cholesky(), instead directly returning the LAPACK error codes as part of a named tuple (L, info). This makes this function a faster way to check if a matrix is positive-definite, and it provides an opportunity to handle decomposition errors more gracefully or performantly -than linalg_cholesky() does. +than linalg_cholesky() does. Supports input of float, double, cfloat and cdouble dtypes. Also supports batches of matrices, and if A is a batch of matrices then the output has the same batch dimensions. @@ -222,99 +144,95 @@ and the decomposition could not be completed. If check_errors=TRUE and info contains positive integers, then a RuntimeError is thrown.

-
linalg_cholesky_ex(A, check_errors = FALSE)
- -

Arguments

- - - - - - - - - - -
A

(Tensor): the Hermitian n \times n matrix or the batch of such matrices of size -(*, n, n) where * is one or more batch dimensions.

check_errors

(bool, optional): controls whether to check the content of infos. Default: FALSE.

- -

Note

+
+
linalg_cholesky_ex(A, check_errors = FALSE)
+
+
+

Arguments

+
A
+

(Tensor): the Hermitian n \times n matrix or the batch of such matrices of size +(*, n, n) where * is one or more batch dimensions.

+
check_errors
+

(bool, optional): controls whether to check the content of infos. Default: FALSE.

+
+
+

Note

If A is on a CUDA device, this function may synchronize that device with the CPU.

This function is "experimental" and it may change in a future PyTorch release.

-

See also

- -

linalg_cholesky() is a NumPy compatible variant that always checks for errors.

+
+ +
-

Examples

-
if (torch_is_installed()) {
-A <- torch_randn(2, 2)
-out = linalg_cholesky_ex(A)
-out
-
-}
-#> $L
-#> torch_tensor
-#> -0.5589  0.0000
-#>  1.0619  0.0758
-#> [ CPUFloatType{2,2} ]
-#> 
-#> $info
-#> torch_tensor
-#> 1
-#> [ CPUIntType{} ]
-#> 
-
+
+

Examples

+
if (torch_is_installed()) {
+A <- torch_randn(2, 2)
+out = linalg_cholesky_ex(A)
+out
+
+}
+#> $L
+#> torch_tensor
+#> -0.2524  0.0000
+#> -0.6080  1.0792
+#> [ CPUFloatType{2,2} ]
+#> 
+#> $info
+#> torch_tensor
+#> 1
+#> [ CPUIntType{} ]
+#> 
+
+
+
-
- +
- - + + diff --git a/dev/reference/linalg_cond.html b/dev/reference/linalg_cond.html index e3d0453cc..ae910920a 100644 --- a/dev/reference/linalg_cond.html +++ b/dev/reference/linalg_cond.html @@ -1,81 +1,20 @@ - - - - - - - -Computes the condition number of a matrix with respect to a matrix norm. — linalg_cond • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Computes the condition number of a matrix with respect to a matrix norm. — linalg_cond • torch - - - - - - - - - - - - - - - - - + + -
-
- -
- -
+
@@ -193,31 +115,27 @@ the condition number of a matrix is defined as

-
linalg_cond(A, p = NULL)
+
+
linalg_cond(A, p = NULL)
+
-

Arguments

- - - - - - - - - - -
A

(Tensor): tensor of shape (*, m, n) where * is zero or more batch dimensions +

+

Arguments

+
A
+

(Tensor): tensor of shape (*, m, n) where * is zero or more batch dimensions for p in (2, -2), and of shape (*, n, n) where every matrix -is invertible for p in ('fro', 'nuc', inf, -inf, 1, -1).

p

(int, inf, -inf, 'fro', 'nuc', optional): -the type of the matrix norm to use in the computations (see above). Default: NULL

- -

Value

- +is invertible for p in ('fro', 'nuc', inf, -inf, 1, -1).

+
p
+

(int, inf, -inf, 'fro', 'nuc', optional): +the type of the matrix norm to use in the computations (see above). Default: NULL

+
+
+

Value

A real-valued tensor, even when A is complex.

-

Details

- -

-κ(A)=ApA1p\kappa(A) = \|A\|_p\|A^{-1}\|_p

+
+
+

Details

+

κ(A)=ApA1p\kappa(A) = \|A\|_p\|A^{-1}\|_p

The condition number of A measures the numerical stability of the linear system AX = B with respect to a matrix norm.

Supports input of float, double, cfloat and cdouble dtypes. @@ -226,69 +144,54 @@ the output has the same batch dimensions.

p defines the matrix norm that is computed. See the table in 'Details' to find the supported norms.

For p is one of ('fro', 'nuc', inf, -inf, 1, -1), this function uses -linalg_norm() and linalg_inv().

+linalg_norm() and linalg_inv().

As such, in this case, the matrix (or every matrix in the batch) A has to be square and invertible.

For p in (2, -2), this function can be computed in terms of the singular values

-

-κ2(A)=σ1σnκ2(A)=σnσ1\kappa_2(A) = \frac{\sigma_1}{\sigma_n}\qquad \kappa_{-2}(A) = \frac{\sigma_n}{\sigma_1}

-

In these cases, it is computed using linalg_svd(). For these norms, the matrix +

κ2(A)=σ1σnκ2(A)=σnσ1\kappa_2(A) = \frac{\sigma_1}{\sigma_n}\qquad \kappa_{-2}(A) = \frac{\sigma_n}{\sigma_1}

+

In these cases, it is computed using linalg_svd(). For these norms, the matrix (or every matrix in the batch) A may have any shape.

- - - - - - - - - - - -
pmatrix norm
NULL2-norm (largest singular value)
'fro'Frobenius norm
'nuc'nuclear norm
Infmax(sum(abs(x), dim=2))
-Infmin(sum(abs(x), dim=2))
1max(sum(abs(x), dim=1))
-1min(sum(abs(x), dim=1))
2largest singular value
-2smallest singular value
- - -

Note

- +
pmatrix norm
NULL2-norm (largest singular value)
'fro'Frobenius norm
'nuc'nuclear norm
Infmax(sum(abs(x), dim=2))
-Infmin(sum(abs(x), dim=2))
1max(sum(abs(x), dim=1))
-1min(sum(abs(x), dim=1))
2largest singular value
-2smallest singular value
+
+

Note

When inputs are on a CUDA device, this function synchronizes that device with the CPU if if p is one of ('fro', 'nuc', inf, -inf, 1, -1).

+
-

Examples

-
if (torch_is_installed()) {
-a <- torch_tensor(rbind(c(1., 0, -1), c(0, 1, 0), c(1, 0, 1)))
-linalg_cond(a)
-linalg_cond(a, "fro")
- 
-}
-#> torch_tensor
-#> 3.16228
-#> [ CPUFloatType{} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+a <- torch_tensor(rbind(c(1., 0, -1), c(0, 1, 0), c(1, 0, 1)))
+linalg_cond(a)
+linalg_cond(a, "fro")
+ 
+}
+#> torch_tensor
+#> 3.16228
+#> [ CPUFloatType{} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/linalg_det.html b/dev/reference/linalg_det.html index abec1dc03..3a281e421 100644 --- a/dev/reference/linalg_det.html +++ b/dev/reference/linalg_det.html @@ -1,81 +1,20 @@ - - - - - - - -Computes the determinant of a square matrix. — linalg_det • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Computes the determinant of a square matrix. — linalg_det • torch - - - - - - - - - - - - - - - - - + + -
-
- -
- -
+
@@ -193,86 +115,82 @@ Also supports batches of matrices, and if A is a batch of matrices the output has the same batch dimensions.

-
linalg_det(A)
- -

Arguments

- - - - - - -
A

(Tensor): tensor of shape (*, n, n) where * is zero or more batch dimensions.

- -

See also

+
+
linalg_det(A)
+
- +
+

Arguments

+
A
+

(Tensor): tensor of shape (*, n, n) where * is zero or more batch dimensions.

+
+ -

Examples

-
if (torch_is_installed()) {
-a <- torch_randn(3,3)
-linalg_det(a)
-
-a <- torch_randn(3,3,3)
-linalg_det(a)
-
-}
-#> torch_tensor
-#> 0.01 *
-#>  7.6662
-#> -597.1869
-#> -145.2378
-#> [ CPUFloatType{3} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+a <- torch_randn(3,3)
+linalg_det(a)
+
+a <- torch_randn(3,3,3)
+linalg_det(a)
+
+}
+#> torch_tensor
+#>  0.1305
+#> -0.1993
+#> -1.2173
+#> [ CPUFloatType{3} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/linalg_eig.html b/dev/reference/linalg_eig.html index 570393801..6bbb95d89 100644 --- a/dev/reference/linalg_eig.html +++ b/dev/reference/linalg_eig.html @@ -1,81 +1,20 @@ - - - - - - - -Computes the eigenvalue decomposition of a square matrix if it exists. — linalg_eig • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Computes the eigenvalue decomposition of a square matrix if it exists. — linalg_eig • torch - - - - - - - - - - - - - - - - - + + -
-
- -
- -
+
@@ -193,27 +115,25 @@ the eigenvalue decomposition of a square matrix (if it exists) is defined as

-
linalg_eig(A)
- -

Arguments

- - - - - - -
A

(Tensor): tensor of shape (*, n, n) where * is zero or more batch dimensions -consisting of diagonalizable matrices.

- -

Value

+
+
linalg_eig(A)
+
+
+

Arguments

+
A
+

(Tensor): tensor of shape (*, n, n) where * is zero or more batch dimensions +consisting of diagonalizable matrices.

+
+
+

Value

A list (eigenvalues, eigenvectors) which corresponds to and above. eigenvalues and eigenvectors will always be complex-valued, even when A is real. The eigenvectors will be given by the columns of eigenvectors.

-

Details

- -

-A=Vdiag(Λ)V1VCn×n,ΛCn +

+
+

Details

+

A=Vdiag(Λ)V1VCn×n,ΛCn A = V \operatorname{diag}(\Lambda) V^{-1}\mathrlap{\qquad V \in \mathbb{C}^{n \times n}, \Lambda \in \mathbb{C}^n}

This decomposition exists if and only if is diagonalizable_. @@ -221,15 +141,16 @@ This is the case when all its eigenvalues are different. Supports input of float, double, cfloat and cdouble dtypes. Also supports batches of matrices, and if A is a batch of matrices then the output has the same batch dimensions.

-

Note

- +
+
+

Note

The eigenvalues and eigenvectors of a real matrix may be complex.

-

Warning

- +
+
+

Warning

-

Other linalg: +linalg_cholesky_ex(), +linalg_cholesky(), +linalg_det(), +linalg_eigh(), +linalg_eigvalsh(), +linalg_eigvals(), +linalg_householder_product(), +linalg_inv_ex(), +linalg_inv(), +linalg_lstsq(), +linalg_matrix_norm(), +linalg_matrix_power(), +linalg_matrix_rank(), +linalg_multi_dot(), +linalg_norm(), +linalg_pinv(), +linalg_qr(), +linalg_slogdet(), +linalg_solve(), +linalg_svdvals(), +linalg_svd(), +linalg_tensorinv(), +linalg_tensorsolve(), +linalg_vector_norm()

+
-

Examples

-
if (torch_is_installed()) {
-a <- torch_randn(2, 2)
-wv = linalg_eig(a)
-
-}
-
+
+

Examples

+
if (torch_is_installed()) {
+a <- torch_randn(2, 2)
+wv = linalg_eig(a)
+
+}
+
+
+
-
- +
- - + + diff --git a/dev/reference/linalg_eigh.html b/dev/reference/linalg_eigh.html index dc5d5d49d..efb70e19d 100644 --- a/dev/reference/linalg_eigh.html +++ b/dev/reference/linalg_eigh.html @@ -1,81 +1,20 @@ - - - - - - - -Computes the eigenvalue decomposition of a complex Hermitian or real symmetric matrix. — linalg_eigh • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Computes the eigenvalue decomposition of a complex Hermitian or real symmetric matrix. — linalg_eigh • torch - - - - - - - - - - - - - - - - - + + -
-
- -
- -
+
@@ -193,33 +115,29 @@ the eigenvalue decomposition of a complex Hermitian or real sym is defined as

-
linalg_eigh(A, UPLO = "L")
- -

Arguments

- - - - - - - - - - -
A

(Tensor): tensor of shape (*, n, n) where * is zero or more batch dimensions -consisting of symmetric or Hermitian matrices.

UPLO

('L', 'U', optional): controls whether to use the upper or lower triangular part -of A in the computations. Default: 'L'.

- -

Value

+
+
linalg_eigh(A, UPLO = "L")
+
+
+

Arguments

+
A
+

(Tensor): tensor of shape (*, n, n) where * is zero or more batch dimensions +consisting of symmetric or Hermitian matrices.

+
UPLO
+

('L', 'U', optional): controls whether to use the upper or lower triangular part +of A in the computations. Default: 'L'.

+
+
+

Value

A list (eigenvalues, eigenvectors) which corresponds to and above. -eigenvalues will always be real-valued, even when A is complex.

-

It will also be ordered in ascending order. +eigenvalues will always be real-valued, even when A is complex. +It will also be ordered in ascending order. eigenvectors will have the same dtype as A and will contain the eigenvectors as its columns.

-

Details

- -

-A=Qdiag(Λ)QHQKn×n,ΛRn +

+
+

Details

+

A=Qdiag(Λ)QHQKn×n,ΛRn A = Q \operatorname{diag}(\Lambda) Q^{H}\mathrlap{\qquad Q \in \mathbb{K}^{n \times n}, \Lambda \in \mathbb{R}^n}

where is the conjugate transpose when is complex, and the transpose when is real-valued. @@ -227,21 +145,19 @@ A = Q \operatorname{diag}(\Lambda) Q^{H}\mathrlap{\qquad Q \in \mathbb{K}^{n \ti

Supports input of float, double, cfloat and cdouble dtypes. Also supports batches of matrices, and if A is a batch of matrices then the output has the same batch dimensions.

-

A is assumed to be Hermitian (resp. symmetric), but this is not checked internally, instead:

    -
  • If UPLO\ = 'L' (default), only the lower triangular part of the matrix is used in the computation.

  • +

    A is assumed to be Hermitian (resp. symmetric), but this is not checked internally, instead:

    • If UPLO\ = 'L' (default), only the lower triangular part of the matrix is used in the computation.

    • If UPLO\ = 'U', only the upper triangular part of the matrix is used. The eigenvalues are returned in ascending order.

    • -
    - -

    Note

    - +
+
+

Note

The eigenvalues of real symmetric or complex Hermitian matrices are always real.

-

Warning

- +
+
+

Warning

-

Other linalg: +linalg_cholesky_ex(), +linalg_cholesky(), +linalg_det(), +linalg_eigvalsh(), +linalg_eigvals(), +linalg_eig(), +linalg_householder_product(), +linalg_inv_ex(), +linalg_inv(), +linalg_lstsq(), +linalg_matrix_norm(), +linalg_matrix_power(), +linalg_matrix_rank(), +linalg_multi_dot(), +linalg_norm(), +linalg_pinv(), +linalg_qr(), +linalg_slogdet(), +linalg_solve(), +linalg_svdvals(), +linalg_svd(), +linalg_tensorinv(), +linalg_tensorsolve(), +linalg_vector_norm()

+
-

Examples

-
if (torch_is_installed()) {
-a <- torch_randn(2, 2)
-linalg_eigh(a)
-
-}
-#> [[1]]
-#> torch_tensor
-#> -1.6506
-#> -0.2649
-#> [ CPUFloatType{2} ]
-#> 
-#> [[2]]
-#> torch_tensor
-#> -0.6397 -0.7686
-#>  0.7686 -0.6397
-#> [ CPUFloatType{2,2} ]
-#> 
-
+
+

Examples

+
if (torch_is_installed()) {
+a <- torch_randn(2, 2)
+linalg_eigh(a)
+
+}
+#> [[1]]
+#> torch_tensor
+#> -0.3496
+#>  0.3220
+#> [ CPUFloatType{2} ]
+#> 
+#> [[2]]
+#> torch_tensor
+#> -0.1557 -0.9878
+#>  0.9878 -0.1557
+#> [ CPUFloatType{2,2} ]
+#> 
+
+
+
-
- +
- - + + diff --git a/dev/reference/linalg_eigvals.html b/dev/reference/linalg_eigvals.html index eedf2a456..8716bda2a 100644 --- a/dev/reference/linalg_eigvals.html +++ b/dev/reference/linalg_eigvals.html @@ -1,81 +1,20 @@ - - - - - - - -Computes the eigenvalues of a square matrix. — linalg_eigvals • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Computes the eigenvalues of a square matrix. — linalg_eigvals • torch - - - - - - - - - - - - - - - + + - - -
-
- -
- -
+
@@ -193,92 +115,90 @@ the eigenvalues of a square matrix are defined as the roots (counted with multiplicity) of the polynomial p of degree n given by

-
linalg_eigvals(A)
- -

Arguments

- - - - - - -
A

(Tensor): tensor of shape (*, n, n) where * is zero or more batch dimensions.

- -

Details

+
+
linalg_eigvals(A)
+
-

-p(λ)=det(AλIn)λC +

+

Arguments

+
A
+

(Tensor): tensor of shape (*, n, n) where * is zero or more batch dimensions.

+
+
+

Details

+

p(λ)=det(AλIn)λC p(\lambda) = \operatorname{det}(A - \lambda \mathrm{I}_n)\mathrlap{\qquad \lambda \in \mathbb{C}}

where is the n-dimensional identity matrix. Supports input of float, double, cfloat and cdouble dtypes. Also supports batches of matrices, and if A is a batch of matrices then the output has the same batch dimensions.

-

Note

- +
+
+

Note

The eigenvalues of a real matrix may be complex, as the roots of a real polynomial may be complex. The eigenvalues of a matrix are always well-defined, even when the matrix is not diagonalizable.

-

See also

- -

linalg_eig() computes the full eigenvalue decomposition.

+
+ +
-

Examples

-
if (torch_is_installed()) {
-a <- torch_randn(2, 2)
-w <- linalg_eigvals(a)
-
-}
-
+
+

Examples

+
if (torch_is_installed()) {
+a <- torch_randn(2, 2)
+w <- linalg_eigvals(a)
+
+}
+
+
+
-
- +
- - + + diff --git a/dev/reference/linalg_eigvalsh.html b/dev/reference/linalg_eigvalsh.html index 67f33396b..2d0fac01b 100644 --- a/dev/reference/linalg_eigvalsh.html +++ b/dev/reference/linalg_eigvalsh.html @@ -1,81 +1,20 @@ - - - - - - - -Computes the eigenvalues of a complex Hermitian or real symmetric matrix. — linalg_eigvalsh • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Computes the eigenvalues of a complex Hermitian or real symmetric matrix. — linalg_eigvalsh • torch - - - - - - - - - - - - - - - - - + + -
-
- -
- -
+
@@ -193,31 +115,27 @@ the eigenvalues of a complex Hermitian or real symmetric matri are defined as the roots (counted with multiplicity) of the polynomial p of degree n given by

-
linalg_eigvalsh(A, UPLO = "L")
- -

Arguments

- - - - - - - - - - -
A

(Tensor): tensor of shape (*, n, n) where * is zero or more batch dimensions -consisting of symmetric or Hermitian matrices.

UPLO

('L', 'U', optional): controls whether to use the upper or lower triangular part -of A in the computations. Default: 'L'.

- -

Value

+
+
linalg_eigvalsh(A, UPLO = "L")
+
+
+

Arguments

+
A
+

(Tensor): tensor of shape (*, n, n) where * is zero or more batch dimensions +consisting of symmetric or Hermitian matrices.

+
UPLO
+

('L', 'U', optional): controls whether to use the upper or lower triangular part +of A in the computations. Default: 'L'.

+
+
+

Value

A real-valued tensor cointaining the eigenvalues even when A is complex. The eigenvalues are returned in ascending order.

-

Details

- -

-p(λ)=det(AλIn)λR +

+
+

Details

+

p(λ)=det(AλIn)λR p(\lambda) = \operatorname{det}(A - \lambda \mathrm{I}_n)\mathrlap{\qquad \lambda \in \mathbb{R}}

where is the n-dimensional identity matrix.

@@ -226,80 +144,74 @@ Supports input of float, double, cfloat and cdouble dtypes. Also supports batches of matrices, and if A is a batch of matrices then the output has the same batch dimensions. The eigenvalues are returned in ascending order.

-

A is assumed to be Hermitian (resp. symmetric), but this is not checked internally, instead:

+ -

Examples

-
if (torch_is_installed()) {
-a <- torch_randn(2, 2)
-linalg_eigvalsh(a)
-
-}
-#> torch_tensor
-#> -1.1490
-#>  0.2240
-#> [ CPUFloatType{2} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+a <- torch_randn(2, 2)
+linalg_eigvalsh(a)
+
+}
+#> torch_tensor
+#> -2.1100
+#> -1.5659
+#> [ CPUFloatType{2} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/linalg_householder_product.html b/dev/reference/linalg_householder_product.html index d4f332c64..b7ced7571 100644 --- a/dev/reference/linalg_householder_product.html +++ b/dev/reference/linalg_householder_product.html @@ -1,82 +1,21 @@ - - - - - - - -Computes the first n columns of a product of Householder matrices. — linalg_householder_product • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Computes the first n columns of a product of Householder matrices. — linalg_householder_product • torch - - - - - - - - - - - - - - - - - + + -
-
- -
- -
+
@@ -195,110 +117,103 @@ with and a vector with , this function computes the first columns of the matrix

-
linalg_householder_product(A, tau)
- -

Arguments

- - - - - - - - - - -
A

(Tensor): tensor of shape (*, m, n) where * is zero or more batch dimensions.

tau

(Tensor): tensor of shape (*, k) where * is zero or more batch dimensions.

- -

Details

+
+
linalg_householder_product(A, tau)
+
-

-H1H2...HkwithHi=ImτiviviH +

+

Arguments

+
A
+

(Tensor): tensor of shape (*, m, n) where * is zero or more batch dimensions.

+
tau
+

(Tensor): tensor of shape (*, k) where * is zero or more batch dimensions.

+
+
+

Details

+

H1H2...HkwithHi=ImτiviviH H_1H_2 ... H_k \qquad with \qquad H_i = \mathrm{I}_m - \tau_i v_i v_i^{H}

where is the m-dimensional identity matrix and is the conjugate transpose when is complex, and the transpose when is real-valued. -See Representation of Orthogonal or Unitary Matrices for +See Representation of Orthogonal or Unitary Matrices for further details.

Supports inputs of float, double, cfloat and cdouble dtypes. Also supports batches of matrices, and if the inputs are batches of matrices then the output has the same batch dimensions.

-

Note

- +
+
+

Note

This function only uses the values strictly below the main diagonal of A. The other values are ignored.

-

See also

- -
-
    -
  • torch_geqrf() can be used together with this function to form the Q from the -linalg_qr() decomposition.

  • -
  • torch_ormqr() is a related function that computes the matrix multiplication +

+
+

See also

+
+
  • torch_geqrf() can be used together with this function to form the Q from the +linalg_qr() decomposition.

  • +
  • torch_ormqr() is a related function that computes the matrix multiplication of a product of Householder matrices with another matrix. However, that function is not supported by autograd.

  • -
- -

Other linalg: -linalg_cholesky_ex(), -linalg_cholesky(), -linalg_det(), -linalg_eigh(), -linalg_eigvalsh(), -linalg_eigvals(), -linalg_eig(), -linalg_inv_ex(), -linalg_inv(), -linalg_lstsq(), -linalg_matrix_norm(), -linalg_matrix_power(), -linalg_matrix_rank(), -linalg_multi_dot(), -linalg_norm(), -linalg_pinv(), -linalg_qr(), -linalg_slogdet(), -linalg_solve(), -linalg_svdvals(), -linalg_svd(), -linalg_tensorinv(), -linalg_tensorsolve(), -linalg_vector_norm()

+

Other linalg: +linalg_cholesky_ex(), +linalg_cholesky(), +linalg_det(), +linalg_eigh(), +linalg_eigvalsh(), +linalg_eigvals(), +linalg_eig(), +linalg_inv_ex(), +linalg_inv(), +linalg_lstsq(), +linalg_matrix_norm(), +linalg_matrix_power(), +linalg_matrix_rank(), +linalg_multi_dot(), +linalg_norm(), +linalg_pinv(), +linalg_qr(), +linalg_slogdet(), +linalg_solve(), +linalg_svdvals(), +linalg_svd(), +linalg_tensorinv(), +linalg_tensorsolve(), +linalg_vector_norm()

+
-

Examples

-
if (torch_is_installed()) {
-A <- torch_randn(2, 2)
-h_tau <- torch_geqrf(A)
-Q <- linalg_householder_product(h_tau[[1]], h_tau[[2]])
-torch_allclose(Q, linalg_qr(A)[[1]])
-
-}
-#> [1] TRUE
-
+
+

Examples

+
if (torch_is_installed()) {
+A <- torch_randn(2, 2)
+h_tau <- torch_geqrf(A)
+Q <- linalg_householder_product(h_tau[[1]], h_tau[[2]])
+torch_allclose(Q, linalg_qr(A)[[1]])
+
+}
+#> [1] TRUE
+
+
+
-
- +
- - + + diff --git a/dev/reference/linalg_inv.html b/dev/reference/linalg_inv.html index 63fac7437..b6e7cf57a 100644 --- a/dev/reference/linalg_inv.html +++ b/dev/reference/linalg_inv.html @@ -1,79 +1,18 @@ - - - - - - - -Computes the inverse of a square matrix if it exists. — linalg_inv • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Computes the inverse of a square matrix if it exists. — linalg_inv • torch - - - - - + + - - - -
-
- -
- -
+
@@ -189,25 +111,22 @@

Throws a runtime_error if the matrix is not invertible.

-
linalg_inv(A)
- -

Arguments

- - - - - - -
A

(Tensor): tensor of shape (*, n, n) where * is zero or more batch dimensions -consisting of invertible matrices.

- -

Details

+
+
linalg_inv(A)
+
+
+

Arguments

+
A
+

(Tensor): tensor of shape (*, n, n) where * is zero or more batch dimensions +consisting of invertible matrices.

+
+
+

Details

Letting be or , for a matrix , its inverse matrix (if it exists) is defined as

-

-A1A=AA1=In +

A1A=AA1=In A^{-1}A = AA^{-1} = \mathrm{I}_n where is the n-dimensional identity matrix.

@@ -216,80 +135,80 @@ the inverse is unique. Supports input of float, double, cfloat and cdouble dtypes. Also supports batches of matrices, and if A is a batch of matrices then the output has the same batch dimensions.

-

Consider using linalg_solve() if possible for multiplying a matrix on the left by +

Consider using linalg_solve() if possible for multiplying a matrix on the left by the inverse, as linalg_solve(A, B) == A$inv() %*% B -It is always prefered to use linalg_solve() when possible, as it is faster and more +It is always prefered to use linalg_solve() when possible, as it is faster and more numerically stable than computing the inverse explicitly.

-

See also

- -

linalg_pinv() computes the pseudoinverse (Moore-Penrose inverse) of matrices +

+ +
-

Examples

-
if (torch_is_installed()) {
-A <- torch_randn(4, 4)
-linalg_inv(A)
-
-}
-#> torch_tensor
-#>  1.4303  0.2242 -1.1203  0.6147
-#> -2.7630 -0.0928  2.2771  0.6130
-#>  0.7085 -0.3920 -0.9817 -0.4471
-#>  1.3918  0.0016 -0.3745 -0.1163
-#> [ CPUFloatType{4,4} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+A <- torch_randn(4, 4)
+linalg_inv(A)
+
+}
+#> torch_tensor
+#>  0.4200 -0.9976  0.4567 -1.1060
+#>  0.5622 -0.3490  0.8849 -1.3613
+#> -0.8692  0.6176 -0.2201  0.2716
+#> -0.6411 -0.1898  0.3037  0.0321
+#> [ CPUFloatType{4,4} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/linalg_inv_ex.html b/dev/reference/linalg_inv_ex.html index 03082a558..d4a07425e 100644 --- a/dev/reference/linalg_inv_ex.html +++ b/dev/reference/linalg_inv_ex.html @@ -1,48 +1,5 @@ - - - - - - - -Computes the inverse of a square matrix if it is invertible. — linalg_inv_ex • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Computes the inverse of a square matrix if it is invertible. — linalg_inv_ex • torch - - - - - - - - - - - - - - + + - - - -
-
- -
- -
+
@@ -211,88 +133,84 @@ Also supports batches of matrices, and if A is a batch of matrices the output has the same batch dimensions.

-
linalg_inv_ex(A, check_errors = FALSE)
- -

Arguments

- - - - - - - - - - -
A

(Tensor): tensor of shape (*, n, n) where * is zero or more batch dimensions -consisting of square matrices.

check_errors

(bool, optional): controls whether to check the content of info. Default: FALSE.

- -

Note

+
+
linalg_inv_ex(A, check_errors = FALSE)
+
+
+

Arguments

+
A
+

(Tensor): tensor of shape (*, n, n) where * is zero or more batch dimensions +consisting of square matrices.

+
check_errors
+

(bool, optional): controls whether to check the content of info. Default: FALSE.

+
+
+

Note

If A is on a CUDA device then this function may synchronize that device with the CPU.

This function is "experimental" and it may change in a future PyTorch release.

-

See also

- -

linalg_inv() is a NumPy compatible variant that always checks for errors.

+
+ +
-

Examples

-
if (torch_is_installed()) {
-A <- torch_randn(3, 3)
-out <- linalg_inv_ex(A)
-
-}
-
+
+

Examples

+
if (torch_is_installed()) {
+A <- torch_randn(3, 3)
+out <- linalg_inv_ex(A)
+
+}
+
+
+
-
- +
- - + + diff --git a/dev/reference/linalg_lstsq.html b/dev/reference/linalg_lstsq.html index 08e769d18..693e4be19 100644 --- a/dev/reference/linalg_lstsq.html +++ b/dev/reference/linalg_lstsq.html @@ -1,81 +1,20 @@ - - - - - - - -Computes a solution to the least squares problem of a system of linear equations. — linalg_lstsq • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Computes a solution to the least squares problem of a system of linear equations. — linalg_lstsq • torch - - - - - - - - - - - - - - - - - + + -
-
- -
- -
+
@@ -193,44 +115,34 @@ the least squares problem for a linear system with is defined as

-
linalg_lstsq(A, B, rcond = NULL, ..., driver = NULL)
+
+
linalg_lstsq(A, B, rcond = NULL, ..., driver = NULL)
+
-

Arguments

- - - - - - - - - - - - - - - - - - - - - - -
A

(Tensor): lhs tensor of shape (*, m, n) where * is zero or more batch dimensions.

B

(Tensor): rhs tensor of shape (*, m, k) where * is zero or more batch dimensions.

rcond

(float, optional): used to determine the effective rank of A. +

+

Arguments

+
A
+

(Tensor): lhs tensor of shape (*, m, n) where * is zero or more batch dimensions.

+
B
+

(Tensor): rhs tensor of shape (*, m, k) where * is zero or more batch dimensions.

+
rcond
+

(float, optional): used to determine the effective rank of A. If rcond = NULL, rcond is set to the machine -precision of the dtype of A times max(m, n). Default: NULL.

...

currently unused.

driver

(str, optional): name of the LAPACK/MAGMA method to be used. +precision of the dtype of A times max(m, n). Default: NULL.

+
...
+

currently unused.

+
driver
+

(str, optional): name of the LAPACK/MAGMA method to be used. If NULL, 'gelsy' is used for CPU inputs and 'gels' for CUDA inputs. -Default: NULL.

- -

Value

- +Default: NULL.

+
+
+

Value

A list (solution, residuals, rank, singular_values).

-

Details

- -

-minXKn×kAXBF +

+
+

Details

+

minXKn×kAXBF \min_{X \in \mathbb{K}^{n \times k}} \|AX - B\|_F

where denotes the Frobenius norm. @@ -240,16 +152,13 @@ the output has the same batch dimensions. driver chooses the LAPACK/MAGMA function that will be used.

For CPU inputs the valid values are 'gels', 'gelsy', 'gelsd, 'gelss'. For CUDA input, the only valid driver is 'gels', which assumes that A is full-rank.

-

To choose the best driver on CPU consider:

    -
  • If A is well-conditioned (its condition number is not too large), or you do not mind some precision loss.

  • +

    To choose the best driver on CPU consider:

    • If A is well-conditioned (its condition number is not too large), or you do not mind some precision loss.

    • For a general matrix: 'gelsy' (QR with pivoting) (default)

    • If A is full-rank: 'gels' (QR)

    • If A is not well-conditioned.

    • 'gelsd' (tridiagonal reduction and SVD)

    • But if you run into memory issues: 'gelss' (full SVD).

    • -
    - -

    See also the full description of these drivers

    +

See also the full description of these drivers

rcond is used to determine the effective rank of the matrices in A when driver is one of ('gelsy', 'gelsd', 'gelss'). In this case, if are the singular values of A in decreasing order, @@ -257,8 +166,7 @@ In this case, if are the singular values of A in decreasing order, If rcond = NULL (default), rcond is set to the machine precision of the dtype of A.

This function returns the solution to the problem and some extra information in a list of four tensors (solution, residuals, rank, singular_values). For inputs A, B -of shape (*, m, n), (*, m, k) respectively, it cointains

    -
  • solution: the least squares solution. It has shape (*, n, k).

  • +of shape (*, m, n), (*, m, k) respectively, it cointains

    • solution: the least squares solution. It has shape (*, n, k).

    • residuals: the squared residuals of the solutions, that is, . It has shape equal to the batch dimensions of A. It is computed when m > n and every matrix in A is full-rank, @@ -273,81 +181,81 @@ otherwise it is an empty tensor.

    • It has shape (*, min(m, n)). It is computed when driver is one of ('gelsd', 'gelss'), otherwise it is an empty tensor.

      -
    - -

    Note

    - +
+
+

Note

This function computes X = A$pinverse() %*% B in a faster and more numerically stable way than performing the computations separately.

-

Warning

- +
+
+

Warning

The default value of rcond may change in a future PyTorch release. It is therefore recommended to use a fixed value to avoid potential breaking changes.

-

See also

- - +
+ -

Examples

-
if (torch_is_installed()) {
-A <- torch_tensor(rbind(c(10, 2, 3), c(3, 10, 5), c(5, 6, 12)))$unsqueeze(1) # shape (1, 3, 3)
-B <- torch_stack(list(rbind(c(2, 5, 1), c(3, 2, 1), c(5, 1, 9)),
-                      rbind(c(4, 2, 9), c(2, 0, 3), c(2, 5, 3))), dim = 1) # shape (2, 3, 3)
-X <- linalg_lstsq(A, B)$solution # A is broadcasted to shape (2, 3, 3)
-
-}
-
+
+

Examples

+
if (torch_is_installed()) {
+A <- torch_tensor(rbind(c(10, 2, 3), c(3, 10, 5), c(5, 6, 12)))$unsqueeze(1) # shape (1, 3, 3)
+B <- torch_stack(list(rbind(c(2, 5, 1), c(3, 2, 1), c(5, 1, 9)),
+                      rbind(c(4, 2, 9), c(2, 0, 3), c(2, 5, 3))), dim = 1) # shape (2, 3, 3)
+X <- linalg_lstsq(A, B)$solution # A is broadcasted to shape (2, 3, 3)
+
+}
+
+
+
-
- +
- - + + diff --git a/dev/reference/linalg_matrix_norm.html b/dev/reference/linalg_matrix_norm.html index b313d9933..ac2cd315b 100644 --- a/dev/reference/linalg_matrix_norm.html +++ b/dev/reference/linalg_matrix_norm.html @@ -1,83 +1,22 @@ - - - - - - - -Computes a matrix norm. — linalg_matrix_norm • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Computes a matrix norm. — linalg_matrix_norm • torch - - - - - - - - - - - - - - - + + - - -
-
- -
- -
+
@@ -197,134 +119,108 @@ dimensions specified by the 2-tuple dim and the other dimensions wi be treated as batch dimensions. The output will have the same batch dimensions.

-
linalg_matrix_norm(
-  A,
-  ord = "fro",
-  dim = c(-2, -1),
-  keepdim = FALSE,
-  dtype = NULL
-)
+
+
linalg_matrix_norm(
+  A,
+  ord = "fro",
+  dim = c(-2, -1),
+  keepdim = FALSE,
+  dtype = NULL
+)
+
-

Arguments

- - - - - - - - - - - - - - - - - - - - - - -
A

(Tensor): tensor with two or more dimensions. By default its +

+

Arguments

+
A
+

(Tensor): tensor with two or more dimensions. By default its shape is interpreted as (*, m, n) where * is zero or more -batch dimensions, but this behavior can be controlled using dim.

ord

(int, inf, -inf, 'fro', 'nuc', optional): order of norm. Default: 'fro'

dim

(int, Tupleint, optional): dimensions over which to compute +batch dimensions, but this behavior can be controlled using dim.

+
ord
+

(int, inf, -inf, 'fro', 'nuc', optional): order of norm. Default: 'fro'

+
dim
+

(int, Tupleint, optional): dimensions over which to compute the vector or matrix norm. See above for the behavior when dim=NULL. -Default: NULL

keepdim

(bool, optional): If set to TRUE, the reduced dimensions are retained -in the result as dimensions with size one. Default: FALSE

dtype

dtype (torch_dtype, optional): If specified, the input tensor is cast to +Default: NULL

+
keepdim
+

(bool, optional): If set to TRUE, the reduced dimensions are retained +in the result as dimensions with size one. Default: FALSE

+
dtype
+

dtype (torch_dtype, optional): If specified, the input tensor is cast to dtype before performing the operation, and the returned tensor's type -will be dtype. Default: NULL

- -

Details

- +will be dtype. Default: NULL

+
+
+

Details

ord defines the norm that is computed. The following norms are -supported:

- - - - - - - - - - - - -
ordnorm for matricesnorm for vectors
NULL (default)Frobenius norm2-norm (see below)
"fro"Frobenius norm– not supported –
"nuc"nuclear norm– not supported –
Infmax(sum(abs(x), dim=2))max(abs(x))
-Infmin(sum(abs(x), dim=2))min(abs(x))
0– not supported –sum(x != 0)
1max(sum(abs(x), dim=1))as below
-1min(sum(abs(x), dim=1))as below
2largest singular valueas below
-2smallest singular valueas below
other int or float– not supported –sum(abs(x)^{ord})^{(1 / ord)}
- - -

See also

- - +supported:

ordnorm for matricesnorm for vectors
NULL (default)Frobenius norm2-norm (see below)
"fro"Frobenius norm– not supported –
"nuc"nuclear norm– not supported –
Infmax(sum(abs(x), dim=2))max(abs(x))
-Infmin(sum(abs(x), dim=2))min(abs(x))
0– not supported –sum(x != 0)
1max(sum(abs(x), dim=1))as below
-1min(sum(abs(x), dim=1))as below
2largest singular valueas below
-2smallest singular valueas below
other int or float– not supported –sum(abs(x)^{ord})^{(1 / ord)}
+ -

Examples

-
if (torch_is_installed()) {
-a <- torch_arange(0, 8, dtype=torch_float())$reshape(c(3,3))
-linalg_matrix_norm(a)
-linalg_matrix_norm(a, ord = -1)
-b <- a$expand(c(2, -1, -1))
-linalg_matrix_norm(b)
-linalg_matrix_norm(b, dim = c(1, 3))
-
-}
-#> torch_tensor
-#>   3.1623
-#>  10.0000
-#>  17.2627
-#> [ CPUFloatType{3} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+a <- torch_arange(0, 8, dtype=torch_float())$reshape(c(3,3))
+linalg_matrix_norm(a)
+linalg_matrix_norm(a, ord = -1)
+b <- a$expand(c(2, -1, -1))
+linalg_matrix_norm(b)
+linalg_matrix_norm(b, dim = c(1, 3))
+
+}
+#> torch_tensor
+#>   3.1623
+#>  10.0000
+#>  17.2627
+#> [ CPUFloatType{3} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/linalg_matrix_power.html b/dev/reference/linalg_matrix_power.html index 3698b9106..fbcc88df5 100644 --- a/dev/reference/linalg_matrix_power.html +++ b/dev/reference/linalg_matrix_power.html @@ -1,81 +1,20 @@ - - - - - - - -Computes the n-th power of a square matrix for an integer n. — linalg_matrix_power • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Computes the n-th power of a square matrix for an integer n. — linalg_matrix_power • torch - - - - - - - - - - - - - - + + - - - -
-
- -
- -
+
@@ -193,93 +115,89 @@ Also supports batches of matrices, and if A is a batch of matrices the output has the same batch dimensions.

-
linalg_matrix_power(A, n)
- -

Arguments

- - - - - - - - - - -
A

(Tensor): tensor of shape (*, m, m) where * is zero or more batch dimensions.

n

(int): the exponent.

- -

Details

+
+
linalg_matrix_power(A, n)
+
+
+

Arguments

+
A
+

(Tensor): tensor of shape (*, m, m) where * is zero or more batch dimensions.

+
n
+

(int): the exponent.

+
+
+

Details

If n=0, it returns the identity matrix (or batch) of the same shape as A. If n is negative, it returns the inverse of each matrix (if invertible) raised to the power of abs(n).

-

See also

- -

linalg_solve() computes A$inverse() %*% B with a +

+ +
-

Examples

-
if (torch_is_installed()) {
-A <- torch_randn(3, 3)
-linalg_matrix_power(A, 0)
-
-}
-#> torch_tensor
-#>  1  0  0
-#>  0  1  0
-#>  0  0  1
-#> [ CPUFloatType{3,3} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+A <- torch_randn(3, 3)
+linalg_matrix_power(A, 0)
+
+}
+#> torch_tensor
+#>  1  0  0
+#>  0  1  0
+#>  0  0  1
+#> [ CPUFloatType{3,3} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/linalg_matrix_rank.html b/dev/reference/linalg_matrix_rank.html index c14c6e5f6..dcf3c842b 100644 --- a/dev/reference/linalg_matrix_rank.html +++ b/dev/reference/linalg_matrix_rank.html @@ -1,81 +1,20 @@ - - - - - - - -Computes the numerical rank of a matrix. — linalg_matrix_rank • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Computes the numerical rank of a matrix. — linalg_matrix_rank • torch - - - - - - - - - - - - - - + + - - - -
-
- -
- -
+
@@ -193,30 +115,24 @@ that are greater than the specified tol threshold." /> that are greater than the specified tol threshold.

-
linalg_matrix_rank(A, tol = NULL, hermitian = FALSE)
- -

Arguments

- - - - - - - - - - - - - - -
A

(Tensor): tensor of shape (*, m, n) where * is zero or more -batch dimensions.

tol

(float, Tensor, optional): the tolerance value. See above for -the value it takes when NULL. Default: NULL.

hermitian

(bool, optional): indicates whether A is Hermitian if complex -or symmetric if real. Default: FALSE.

- -

Details

+
+
linalg_matrix_rank(A, tol = NULL, hermitian = FALSE)
+
+
+

Arguments

+
A
+

(Tensor): tensor of shape (*, m, n) where * is zero or more +batch dimensions.

+
tol
+

(float, Tensor, optional): the tolerance value. See above for +the value it takes when NULL. Default: NULL.

+
hermitian
+

(bool, optional): indicates whether A is Hermitian if complex +or symmetric if real. Default: FALSE.

+
+
+

Details

Supports input of float, double, cfloat and cdouble dtypes. Also supports batches of matrices, and if A is a batch of matrices then the output has the same batch dimensions.

@@ -225,78 +141,77 @@ symmetric if real, but this is not checked internally. Instead, just the lower triangular part of the matrix is used in the computations.

If tol is not specified and A is a matrix of dimensions (m, n), the tolerance is set to be

-

-tol=σ1max(m,n)ε +

tol=σ1max(m,n)ε tol = \sigma_1 \max(m, n) \varepsilon

where is the largest singular value (or eigenvalue in absolute value when hermitian = TRUE), and - is the epsilon value for the dtype of A (see torch_finfo()).

+ is the epsilon value for the dtype of A (see torch_finfo()).

If A is a batch of matrices, tol is computed this way for every element of the batch.

-

See also

- - +
+ -

Examples

-
if (torch_is_installed()) {
-a <- torch_eye(10)
-linalg_matrix_rank(a)
-
-}
-#> torch_tensor
-#> 10
-#> [ CPULongType{} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+a <- torch_eye(10)
+linalg_matrix_rank(a)
+
+}
+#> torch_tensor
+#> 10
+#> [ CPULongType{} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/linalg_multi_dot.html b/dev/reference/linalg_multi_dot.html index 8269daba5..2b2c206d8 100644 --- a/dev/reference/linalg_multi_dot.html +++ b/dev/reference/linalg_multi_dot.html @@ -1,80 +1,19 @@ - - - - - - - -Efficiently multiplies two or more matrices — linalg_multi_dot • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Efficiently multiplies two or more matrices — linalg_multi_dot • torch - - - - - - + + - - -
-
- -
- -
+
@@ -191,20 +113,18 @@ the fewest arithmetic operations are performed." /> the fewest arithmetic operations are performed.

-
linalg_multi_dot(tensors)
- -

Arguments

- - - - - - -
tensors

(Sequence[Tensor]): two or more tensors to multiply. The first and last -tensors may be 1D or 2D. Every other tensor must be 2D.

- -

Details

+
+
linalg_multi_dot(tensors)
+
+
+

Arguments

+
tensors
+

(Sequence[Tensor]): two or more tensors to multiply. The first and last +tensors may be 1D or 2D. Every other tensor must be 2D.

+
+
+

Details

Supports inputs of float, double, cfloat and cdouble dtypes. This function does not support batched inputs.

Every tensor in tensors must be 2D, except for the first and last which @@ -213,85 +133,85 @@ of shape (1, n), similarly if the last tensor is a 1D vector of sha as a column vector of shape (n, 1).

If the first and last tensors are matrices, the output will be a matrix. However, if either is a 1D vector, then the output will be a 1D vector.

-

Note

- -

This function is implemented by chaining torch_mm() calls after +

+
+

Note

+

This function is implemented by chaining torch_mm() calls after computing the optimal matrix multiplication order.

The cost of multiplying two matrices with shapes (a, b) and (b, c) is a * b * c. Given matrices A, B, C with shapes (10, 100), (100, 5), (5, 50) respectively, we can calculate the cost of different multiplication orders as follows:

-

-cost((AB)C)=10×100×5+10×5×50=7500 cost(A(BC))=10×100×50+100×5×50=75000 +

cost((AB)C)=10×100×5+10×5×50=7500 cost(A(BC))=10×100×50+100×5×50=75000 \begin{align*} \operatorname{cost}((AB)C) &= 10 \times 100 \times 5 + 10 \times 5 \times 50 = 7500 \ \operatorname{cost}(A(BC)) &= 10 \times 100 \times 50 + 100 \times 5 \times 50 = 75000 \end{align*}

In this case, multiplying A and B first followed by C is 10 times faster.

-

See also

- - +
+ -

Examples

-
if (torch_is_installed()) {
-
-linalg_multi_dot(list(torch_tensor(c(1,2)), torch_tensor(c(2,3))))
-
-}
-#> torch_tensor
-#> 8
-#> [ CPUFloatType{} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+linalg_multi_dot(list(torch_tensor(c(1,2)), torch_tensor(c(2,3))))
+
+}
+#> torch_tensor
+#> 8
+#> [ CPUFloatType{} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/linalg_norm.html b/dev/reference/linalg_norm.html index cd7141b41..443299495 100644 --- a/dev/reference/linalg_norm.html +++ b/dev/reference/linalg_norm.html @@ -1,48 +1,5 @@ - - - - - - - -Computes a vector or matrix norm. — linalg_norm • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Computes a vector or matrix norm. — linalg_norm • torch - - - - - - - - - - - - - - - + + - - -
-
- -
- -
+

If A is complex valued, it computes the norm of A$abs() Supports input of float, double, cfloat and cdouble dtypes. -Whether this function computes a vector or matrix norm is determined as follows:

    -
  • If dim is an int, the vector norm will be computed.

  • +Whether this function computes a vector or matrix norm is determined as follows:

    • If dim is an int, the vector norm will be computed.

    • If dim is a 2-tuple, the matrix norm will be computed.

    • If dim=NULL and ord=NULL, A will be flattened to 1D and the 2-norm of the resulting vector will be computed.

    • If dim=NULL and ord!=NULL, A must be 1D or 2D.

    • -
    +
+
+
linalg_norm(A, ord = NULL, dim = NULL, keepdim = FALSE, dtype = NULL)
-
linalg_norm(A, ord = NULL, dim = NULL, keepdim = FALSE, dtype = NULL)
- -

Arguments

- - - - - - - - - - - - - - - - - - - - - - -
A

(Tensor): tensor of shape (*, n) or (*, m, n) where * is zero or more batch dimensions

ord

(int, float, inf, -inf, 'fro', 'nuc', optional): order of norm. Default: NULL

dim

(int, Tupleint, optional): dimensions over which to compute +

+

Arguments

+
A
+

(Tensor): tensor of shape (*, n) or (*, m, n) where * is zero or more batch dimensions

+
ord
+

(int, float, inf, -inf, 'fro', 'nuc', optional): order of norm. Default: NULL

+
dim
+

(int, Tupleint, optional): dimensions over which to compute the vector or matrix norm. See above for the behavior when dim=NULL. -Default: NULL

keepdim

(bool, optional): If set to TRUE, the reduced dimensions are retained -in the result as dimensions with size one. Default: FALSE

dtype

dtype (torch_dtype, optional): If specified, the input tensor is cast to +Default: NULL

+
keepdim
+

(bool, optional): If set to TRUE, the reduced dimensions are retained +in the result as dimensions with size one. Default: FALSE

+
dtype
+

dtype (torch_dtype, optional): If specified, the input tensor is cast to dtype before performing the operation, and the returned tensor's type -will be dtype. Default: NULL

- -

Details

- +will be dtype. Default: NULL

+
+
+

Details

ord defines the norm that is computed. The following norms are -supported:

- - - - - - - - - - - - -
ordnorm for matricesnorm for vectors
NULL (default)Frobenius norm2-norm (see below)
"fro"Frobenius norm– not supported –
"nuc"nuclear norm– not supported –
Infmax(sum(abs(x), dim=2))max(abs(x))
-Infmin(sum(abs(x), dim=2))min(abs(x))
0– not supported –sum(x != 0)
1max(sum(abs(x), dim=1))as below
-1min(sum(abs(x), dim=1))as below
2largest singular valueas below
-2smallest singular valueas below
other int or float– not supported –sum(abs(x)^{ord})^{(1 / ord)}
- - -

See also

- - +supported:

ordnorm for matricesnorm for vectors
NULL (default)Frobenius norm2-norm (see below)
"fro"Frobenius norm– not supported –
"nuc"nuclear norm– not supported –
Infmax(sum(abs(x), dim=2))max(abs(x))
-Infmin(sum(abs(x), dim=2))min(abs(x))
0– not supported –sum(x != 0)
1max(sum(abs(x), dim=1))as below
-1min(sum(abs(x), dim=1))as below
2largest singular valueas below
-2smallest singular valueas below
other int or float– not supported –sum(abs(x)^{ord})^{(1 / ord)}
+ -

Examples

-
if (torch_is_installed()) {
-a <- torch_arange(0, 8, dtype=torch_float()) - 4
-a
-b <- a$reshape(c(3, 3))
-b
-
-linalg_norm(a)
-linalg_norm(b)
-
-}
-#> torch_tensor
-#> 7.74597
-#> [ CPUFloatType{} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+a <- torch_arange(0, 8, dtype=torch_float()) - 4
+a
+b <- a$reshape(c(3, 3))
+b
+
+linalg_norm(a)
+linalg_norm(b)
+
+}
+#> torch_tensor
+#> 7.74597
+#> [ CPUFloatType{} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/linalg_pinv.html b/dev/reference/linalg_pinv.html index f39efe2a9..b3daf760f 100644 --- a/dev/reference/linalg_pinv.html +++ b/dev/reference/linalg_pinv.html @@ -1,83 +1,22 @@ - - - - - - - -Computes the pseudoinverse (Moore-Penrose inverse) of a matrix. — linalg_pinv • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Computes the pseudoinverse (Moore-Penrose inverse) of a matrix. — linalg_pinv • torch - - - - - - - - - - - - - - - - - + + -
-
- -
- -
+
@@ -197,121 +119,113 @@ Also supports batches of matrices, and if A is a batch of matrices the output has the same batch dimensions.

-
linalg_pinv(A, rcond = 1e-15, hermitian = FALSE)
+
+
linalg_pinv(A, rcond = 1e-15, hermitian = FALSE)
+
-

Arguments

- - - - - - - - - - - - - - -
A

(Tensor): tensor of shape (*, m, n) where * is zero or more batch dimensions.

rcond

(float or Tensor, optional): the tolerance value to determine when is a singular value zero +

+

Arguments

+
A
+

(Tensor): tensor of shape (*, m, n) where * is zero or more batch dimensions.

+
rcond
+

(float or Tensor, optional): the tolerance value to determine when is a singular value zero If it is a torch_Tensor, its shape must be broadcastable to that of the singular values of -A as returned by linalg_svd(). -Default: 1e-15.

hermitian

(bool, optional): indicates whether A is Hermitian if complex -or symmetric if real. Default: FALSE.

- -

Details

- +A as returned by linalg_svd(). +Default: 1e-15.

+
hermitian
+

(bool, optional): indicates whether A is Hermitian if complex +or symmetric if real. Default: FALSE.

+
+
+

Details

If hermitian= TRUE, A is assumed to be Hermitian if complex or symmetric if real, but this is not checked internally. Instead, just the lower triangular part of the matrix is used in the computations. The singular values (or the norm of the eigenvalues when hermitian= TRUE) that are below the specified rcond threshold are treated as zero and discarded in the computation.

-

Note

- -

This function uses linalg_svd() if hermitian= FALSE and -linalg_eigh() if hermitian= TRUE. +

+
+

Note

+

This function uses linalg_svd() if hermitian= FALSE and +linalg_eigh() if hermitian= TRUE. For CUDA inputs, this function synchronizes that device with the CPU.

-

Consider using linalg_lstsq() if possible for multiplying a matrix on the left by +

Consider using linalg_lstsq() if possible for multiplying a matrix on the left by the pseudoinverse, as linalg_lstsq(A, B)$solution == A$pinv() %*% B

-

It is always prefered to use linalg_lstsq() when possible, as it is faster and more +

It is always prefered to use linalg_lstsq() when possible, as it is faster and more numerically stable than computing the pseudoinverse explicitly.

-

See also

- -
-
+ +
-

Examples

-
if (torch_is_installed()) {
-A <- torch_randn(3, 5)
-linalg_pinv(A)
-
-}
-#> torch_tensor
-#>  0.0540 -0.5891 -0.7179
-#>  0.1619  0.2299  0.6291
-#> -0.2104  0.0714 -0.0272
-#>  0.0113  0.0798  0.7690
-#>  0.3353  0.2787  0.2296
-#> [ CPUFloatType{5,3} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+A <- torch_randn(3, 5)
+linalg_pinv(A)
+
+}
+#> torch_tensor
+#> -0.1550  0.1730 -0.1443
+#>  0.8198 -1.0037  0.4749
+#>  0.2307  0.3540 -0.2147
+#> -0.3399  0.1085 -0.4138
+#> -0.3653 -0.0718  0.1589
+#> [ CPUFloatType{5,3} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/linalg_qr.html b/dev/reference/linalg_qr.html index 77d8e0a05..96b486a2e 100644 --- a/dev/reference/linalg_qr.html +++ b/dev/reference/linalg_qr.html @@ -1,81 +1,20 @@ - - - - - - - -Computes the QR decomposition of a matrix. — linalg_qr • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Computes the QR decomposition of a matrix. — linalg_qr • torch - - - - - - - - - - - - - - - + + - - -
-
- -
- -
+
@@ -193,37 +115,32 @@ the full QR decomposition of a matrix is defined as

-
linalg_qr(A, mode = "reduced")
- -

Arguments

- - - - - - - - - - -
A

(Tensor): tensor of shape (*, m, n) where * is zero or more batch dimensions.

mode

(str, optional): one of 'reduced', 'complete', 'r'. -Controls the shape of the returned tensors. Default: 'reduced'.

- -

Value

+
+
linalg_qr(A, mode = "reduced")
+
+
+

Arguments

+
A
+

(Tensor): tensor of shape (*, m, n) where * is zero or more batch dimensions.

+
mode
+

(str, optional): one of 'reduced', 'complete', 'r'. +Controls the shape of the returned tensors. Default: 'reduced'.

+
+
+

Value

A list (Q, R).

-

Details

- -

-A=QRQKm×m,RKm×n +

+
+

Details

+

A=QRQKm×m,RKm×n A = QR\mathrlap{\qquad Q \in \mathbb{K}^{m \times m}, R \in \mathbb{K}^{m \times n}}

where is orthogonal in the real case and unitary in the complex case, and is upper triangular. When m > n (tall matrix), as R is upper triangular, its last m - n rows are zero. In this case, we can drop the last m - n columns of Q to form the reduced QR decomposition:

-

-A=QRQKm×n,RKn×n +

A=QRQKm×n,RKn×n A = QR\mathrlap{\qquad Q \in \mathbb{K}^{m \times n}, R \in \mathbb{K}^{n \times n}}

The reduced QR decomposition agrees with the full QR decomposition when n >= m (wide matrix). @@ -231,80 +148,77 @@ Supports input of float, double, cfloat and cdouble dtypes. Also supports batches of matrices, and if A is a batch of matrices then the output has the same batch dimensions. The parameter mode chooses between the full and reduced QR decomposition.

-

If A has shape (*, m, n), denoting k = min(m, n)

+ -

Examples

-
if (torch_is_installed()) {
-a <- torch_tensor(rbind(c(12., -51, 4), c(6, 167, -68), c(-4, 24, -41)))
-qr <- linalg_qr(a)
-
-torch_mm(qr[[1]], qr[[2]])$round()
-torch_mm(qr[[1]]$t(), qr[[1]])$round()
-
-}
-#> torch_tensor
-#>  1  0  0
-#>  0  1  0
-#>  0  0  1
-#> [ CPUFloatType{3,3} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+a <- torch_tensor(rbind(c(12., -51, 4), c(6, 167, -68), c(-4, 24, -41)))
+qr <- linalg_qr(a)
+
+torch_mm(qr[[1]], qr[[2]])$round()
+torch_mm(qr[[1]]$t(), qr[[1]])$round()
+
+}
+#> torch_tensor
+#>  1  0  0
+#>  0  1  0
+#>  0  0  1
+#> [ CPUFloatType{3,3} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/linalg_slogdet.html b/dev/reference/linalg_slogdet.html index f5fb627f7..6f41d76b9 100644 --- a/dev/reference/linalg_slogdet.html +++ b/dev/reference/linalg_slogdet.html @@ -1,83 +1,22 @@ - - - - - - - -Computes the sign and natural logarithm of the absolute value of the determinant of a square matrix. — linalg_slogdet • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Computes the sign and natural logarithm of the absolute value of the determinant of a square matrix. — linalg_slogdet • torch - - - - - - - - - - - - - - - - - + + -
-
- -
- -
+
@@ -197,101 +119,97 @@ Also supports batches of matrices, and if A is a batch of matrices the output has the same batch dimensions.

-
linalg_slogdet(A)
- -

Arguments

- - - - - - -
A

(Tensor): tensor of shape (*, n, n) where * is zero or more batch dimensions.

- -

Value

+
+
linalg_slogdet(A)
+
+
+

Arguments

+
A
+

(Tensor): tensor of shape (*, n, n) where * is zero or more batch dimensions.

+
+
+

Value

A list (sign, logabsdet). logabsdet will always be real-valued, even when A is complex. sign will have the same dtype as A.

-

Notes

- +
+
+

Notes

-
+ -

Examples

-
if (torch_is_installed()) {
-a <- torch_randn(3,3)
-linalg_slogdet(a)
-
-}
-#> [[1]]
-#> torch_tensor
-#> 1
-#> [ CPUFloatType{} ]
-#> 
-#> [[2]]
-#> torch_tensor
-#> 2.03651
-#> [ CPUFloatType{} ]
-#> 
-
+
+

Examples

+
if (torch_is_installed()) {
+a <- torch_randn(3,3)
+linalg_slogdet(a)
+
+}
+#> [[1]]
+#> torch_tensor
+#> 1
+#> [ CPUFloatType{} ]
+#> 
+#> [[2]]
+#> torch_tensor
+#> -1.57985
+#> [ CPUFloatType{} ]
+#> 
+
+
+
-
- +
- - + + diff --git a/dev/reference/linalg_solve.html b/dev/reference/linalg_solve.html index ace806325..23199ed04 100644 --- a/dev/reference/linalg_solve.html +++ b/dev/reference/linalg_solve.html @@ -1,81 +1,20 @@ - - - - - - - -Computes the solution of a square system of linear equations with a unique solution. — linalg_solve • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Computes the solution of a square system of linear equations with a unique solution. — linalg_solve • torch - - - - - - - - - - - - - - - - - + + -
-
- -
- -
+
@@ -193,24 +115,20 @@ this function computes the solution of the linear system assoc , which is defined as

-
linalg_solve(A, B)
- -

Arguments

- - - - - - - - - - -
A

(Tensor): tensor of shape (*, n, n) where * is zero or more batch dimensions.

B

(Tensor): right-hand side tensor of shape (*, n) or (*, n, k) or (n,) or (n, k) -according to the rules described above

- -

Details

+
+
linalg_solve(A, B)
+
+
+

Arguments

+
A
+

(Tensor): tensor of shape (*, n, n) where * is zero or more batch dimensions.

+
B
+

(Tensor): right-hand side tensor of shape (*, n) or (*, n, k) or (n,) or (n, k) +according to the rules described above

+
+
+

Details

$$ AX = B $$

@@ -219,82 +137,80 @@ This function assumes that is invertible. Supports inputs of float, double, cfloat and cdouble dtypes. Also supports batches of matrices, and if the inputs are batches of matrices then the output has the same batch dimensions.

-

Letting * be zero or more batch dimensions,

    -
  • If A has shape (*, n, n) and B has shape (*, n) (a batch of vectors) or shape +

    Letting * be zero or more batch dimensions,

    • If A has shape (*, n, n) and B has shape (*, n) (a batch of vectors) or shape (*, n, k) (a batch of matrices or "multiple right-hand sides"), this function returns X of shape (*, n) or (*, n, k) respectively.

    • Otherwise, if A has shape (*, n, n) and B has shape (n,) or (n, k), B is broadcasted to have shape (*, n) or (*, n, k) respectively.

    • -
    - -

    This function then returns the solution of the resulting batch of systems of linear equations.

    -

    Note

    - +

This function then returns the solution of the resulting batch of systems of linear equations.

+
+
+

Note

This function computes X = A$inverse() @ B in a faster and more numerically stable way than performing the computations separately.

-

See also

- - +
+ -

Examples

-
if (torch_is_installed()) {
-A <- torch_randn(3, 3)
-b <- torch_randn(3)
-x <- linalg_solve(A, b)
-torch_allclose(torch_matmul(A, x), b)
-
-}
-#> [1] TRUE
-
+
+

Examples

+
if (torch_is_installed()) {
+A <- torch_randn(3, 3)
+b <- torch_randn(3)
+x <- linalg_solve(A, b)
+torch_allclose(torch_matmul(A, x), b)
+
+}
+#> [1] TRUE
+
+
+
-
- +
- - + + diff --git a/dev/reference/linalg_svd.html b/dev/reference/linalg_svd.html index 7f99caabf..b8bc41523 100644 --- a/dev/reference/linalg_svd.html +++ b/dev/reference/linalg_svd.html @@ -1,81 +1,20 @@ - - - - - - - -Computes the singular value decomposition (SVD) of a matrix. — linalg_svd • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Computes the singular value decomposition (SVD) of a matrix. — linalg_svd • torch - - - - - - - - - - - - - - - - - + + -
-
- -
- -
+
@@ -193,41 +115,36 @@ the full SVD of a matrix , if k = min(m,n), is defined as

-
linalg_svd(A, full_matrices = TRUE)
- -

Arguments

- - - - - - - - - - -
A

(Tensor): tensor of shape (*, m, n) where * is zero or more batch dimensions.

full_matrices

(bool, optional): controls whether to compute the full or reduced -SVD, and consequently, the shape of the returned tensors U and V. Default: TRUE.

- -

Value

+
+
linalg_svd(A, full_matrices = TRUE)
+
+
+

Arguments

+
A
+

(Tensor): tensor of shape (*, m, n) where * is zero or more batch dimensions.

+
full_matrices
+

(bool, optional): controls whether to compute the full or reduced +SVD, and consequently, the shape of the returned tensors U and V. Default: TRUE.

+
+
+

Value

A list (U, S, V) which corresponds to , , above. S will always be real-valued, even when A is complex. It will also be ordered in descending order. U and V will have the same dtype as A. The left / right singular vectors will be given by the columns of U and the rows of V respectively.

-

Details

- -

-A=Udiag(S)VHUKm×m,SRk,VKn×n +

+
+

Details

+

A=Udiag(S)VHUKm×m,SRk,VKn×n A = U \operatorname{diag}(S) V^{H} \mathrlap{\qquad U \in \mathbb{K}^{m \times m}, S \in \mathbb{R}^k, V \in \mathbb{K}^{n \times n}}

where , is the conjugate transpose when is complex, and the transpose when is real-valued.

The matrices , (and thus ) are orthogonal in the real case, and unitary in the complex case. When m > n (resp. m < n) we can drop the last m - n (resp. n - m) columns of U (resp. V) to form the reduced SVD:

-

-A=Udiag(S)VHUKm×k,SRk,VKk×n +

A=Udiag(S)VHUKm×k,SRk,VKk×n A = U \operatorname{diag}(S) V^{H} \mathrlap{\qquad U \in \mathbb{K}^{m \times k}, S \in \mathbb{R}^k, V \in \mathbb{K}^{k \times n}}

where .

@@ -239,13 +156,15 @@ the output has the same batch dimensions.

which corresponds to , , above.

The singular values are returned in descending order. The parameter full_matrices chooses between the full (default) and reduced SVD.

-

Note

- +
+
+

Note

When full_matrices=TRUE, the gradients with respect to U[..., :, min(m, n):] and Vh[..., min(m, n):, :] will be ignored, as those vectors can be arbitrary bases of the corresponding subspaces.

-

Warnings

- +
+
+

Warnings

The returned tensors U and V are not unique, nor are they continuous with @@ -267,103 +186,100 @@ the gradient will be numerically unstable, as it depends on the singular values . The gradient will also be numerically unstable when A has small singular values, as it also depends on the computaiton of .

-

See also

- -
-
+
+

See also

+
+
  • linalg_svdvals() computes only the singular values. +Unlike linalg_svd(), the gradients of linalg_svdvals() are always numerically stable.

  • -
  • linalg_eig() for a function that computes another type of spectral +

  • linalg_eig() for a function that computes another type of spectral decomposition of a matrix. The eigendecomposition works just on on square matrices.

  • -
  • linalg_eigh() for a (faster) function that computes the eigenvalue decomposition +

  • linalg_eigh() for a (faster) function that computes the eigenvalue decomposition for Hermitian and symmetric matrices.

  • -
  • linalg_qr() for another (much faster) decomposition that works on general +

  • linalg_qr() for another (much faster) decomposition that works on general matrices.

  • -
- -

Other linalg: -linalg_cholesky_ex(), -linalg_cholesky(), -linalg_det(), -linalg_eigh(), -linalg_eigvalsh(), -linalg_eigvals(), -linalg_eig(), -linalg_householder_product(), -linalg_inv_ex(), -linalg_inv(), -linalg_lstsq(), -linalg_matrix_norm(), -linalg_matrix_power(), -linalg_matrix_rank(), -linalg_multi_dot(), -linalg_norm(), -linalg_pinv(), -linalg_qr(), -linalg_slogdet(), -linalg_solve(), -linalg_svdvals(), -linalg_tensorinv(), -linalg_tensorsolve(), -linalg_vector_norm()

+

Other linalg: +linalg_cholesky_ex(), +linalg_cholesky(), +linalg_det(), +linalg_eigh(), +linalg_eigvalsh(), +linalg_eigvals(), +linalg_eig(), +linalg_householder_product(), +linalg_inv_ex(), +linalg_inv(), +linalg_lstsq(), +linalg_matrix_norm(), +linalg_matrix_power(), +linalg_matrix_rank(), +linalg_multi_dot(), +linalg_norm(), +linalg_pinv(), +linalg_qr(), +linalg_slogdet(), +linalg_solve(), +linalg_svdvals(), +linalg_tensorinv(), +linalg_tensorsolve(), +linalg_vector_norm()

+
-

Examples

-
if (torch_is_installed()) {
-
-a <- torch_randn(5, 3)
-linalg_svd(a, full_matrices=FALSE)
-
-}
-#> [[1]]
-#> torch_tensor
-#> -0.2344 -0.5241  0.1385
-#> -0.2371 -0.6090  0.4807
-#> -0.3938  0.5668  0.7073
-#>  0.8399 -0.0160  0.4752
-#>  0.1683 -0.1816  0.1537
-#> [ CPUFloatType{5,3} ]
-#> 
-#> [[2]]
-#> torch_tensor
-#>  3.6441
-#>  1.9351
-#>  0.8854
-#> [ CPUFloatType{3} ]
-#> 
-#> [[3]]
-#> torch_tensor
-#>  0.6504  0.7497  0.1219
-#> -0.3620  0.1649  0.9175
-#> -0.6677  0.6409 -0.3787
-#> [ CPUFloatType{3,3} ]
-#> 
-
+
+

Examples

+
if (torch_is_installed()) {
+
+a <- torch_randn(5, 3)
+linalg_svd(a, full_matrices=FALSE)
+
+}
+#> [[1]]
+#> torch_tensor
+#>  0.4204  0.2025 -0.1607
+#> -0.0947 -0.0915  0.8299
+#>  0.0823 -0.9359 -0.2467
+#> -0.8371 -0.0819 -0.0139
+#> -0.3269  0.2608 -0.4736
+#> [ CPUFloatType{5,3} ]
+#> 
+#> [[2]]
+#> torch_tensor
+#>  2.5337
+#>  2.3223
+#>  1.9506
+#> [ CPUFloatType{3} ]
+#> 
+#> [[3]]
+#> torch_tensor
+#> -0.2494  0.5621 -0.7885
+#>  0.1513  0.8269  0.5416
+#>  0.9565  0.0158 -0.2913
+#> [ CPUFloatType{3,3} ]
+#> 
+
+
+
-
- +
- - + + diff --git a/dev/reference/linalg_svdvals.html b/dev/reference/linalg_svdvals.html index 6491c7019..8619fae73 100644 --- a/dev/reference/linalg_svdvals.html +++ b/dev/reference/linalg_svdvals.html @@ -1,82 +1,21 @@ - - - - - - - -Computes the singular values of a matrix. — linalg_svdvals • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Computes the singular values of a matrix. — linalg_svdvals • torch - - - - - - - - - - - - - - + + - - - -
-
- -
- -
+
@@ -195,87 +117,85 @@ the output has the same batch dimensions. The singular values are returned in descending order.

-
linalg_svdvals(A)
- -

Arguments

- - - - - - -
A

(Tensor): tensor of shape (*, m, n) where * is zero or more batch dimensions.

- -

Value

+
+
linalg_svdvals(A)
+
+
+

Arguments

+
A
+

(Tensor): tensor of shape (*, m, n) where * is zero or more batch dimensions.

+
+ -

Examples

-
if (torch_is_installed()) {
-A <- torch_randn(5, 3)
-S <- linalg_svdvals(A)
-S
-
-}
-#> torch_tensor
-#>  3.7771
-#>  1.8606
-#>  1.3879
-#> [ CPUFloatType{3} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+A <- torch_randn(5, 3)
+S <- linalg_svdvals(A)
+S
+
+}
+#> torch_tensor
+#>  2.6794
+#>  1.9196
+#>  0.8711
+#> [ CPUFloatType{3} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/linalg_tensorinv.html b/dev/reference/linalg_tensorinv.html index a7e5221eb..69d2b3337 100644 --- a/dev/reference/linalg_tensorinv.html +++ b/dev/reference/linalg_tensorinv.html @@ -1,82 +1,21 @@ - - - - - - - -Computes the multiplicative inverse of torch_tensordot() — linalg_tensorinv • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Computes the multiplicative inverse of torch_tensordot() — linalg_tensorinv • torch - - - - - - - - - - - - - - - - - + + -
-
- -
- -
+
@@ -195,104 +117,98 @@ If this is the case, it computes a tensor X such that tensordot(A, X, ind) is the identity matrix in dimension m.

-
linalg_tensorinv(A, ind = 3L)
- -

Arguments

- - - - - - - - - - -
A

(Tensor): tensor to invert.

ind

(int): index at which to compute the inverse of torch_tensordot(). Default: 3.

- -

Details

+
+
linalg_tensorinv(A, ind = 3L)
+
+
+

Arguments

+
A
+

(Tensor): tensor to invert.

+
ind
+

(int): index at which to compute the inverse of torch_tensordot(). Default: 3.

+
+
+

Details

Supports input of float, double, cfloat and cdouble dtypes.

-

Note

- -

Consider using linalg_tensorsolve() if possible for multiplying a tensor on the left +

+
+

Note

+

Consider using linalg_tensorsolve() if possible for multiplying a tensor on the left by the tensor inverse as linalg_tensorsolve(A, B) == torch_tensordot(linalg_tensorinv(A), B))

-

It is always prefered to use linalg_tensorsolve() when possible, as it is faster and more +

It is always prefered to use linalg_tensorsolve() when possible, as it is faster and more numerically stable than computing the pseudoinverse explicitly.

-

See also

- - +
+ -

Examples

-
if (torch_is_installed()) {
-A <- torch_eye(4 * 6)$reshape(c(4, 6, 8, 3))
-Ainv <- linalg_tensorinv(A, ind=3)
-Ainv$shape
-B <- torch_randn(4, 6)
-torch_allclose(torch_tensordot(Ainv, B), linalg_tensorsolve(A, B))
-
-A <- torch_randn(4, 4)
-Atensorinv<- linalg_tensorinv(A, 2)
-Ainv <- linalg_inv(A)
-torch_allclose(Atensorinv, Ainv)
-
-}
-#> [1] TRUE
-
+
+

Examples

+
if (torch_is_installed()) {
+A <- torch_eye(4 * 6)$reshape(c(4, 6, 8, 3))
+Ainv <- linalg_tensorinv(A, ind=3)
+Ainv$shape
+B <- torch_randn(4, 6)
+torch_allclose(torch_tensordot(Ainv, B), linalg_tensorsolve(A, B))
+
+A <- torch_randn(4, 4)
+Atensorinv<- linalg_tensorinv(A, 2)
+Ainv <- linalg_inv(A)
+torch_allclose(Atensorinv, Ainv)
+
+}
+#> [1] TRUE
+
+
+
-
- +
- - + + diff --git a/dev/reference/linalg_tensorsolve.html b/dev/reference/linalg_tensorsolve.html index b313a71ad..cf7d5e017 100644 --- a/dev/reference/linalg_tensorsolve.html +++ b/dev/reference/linalg_tensorsolve.html @@ -1,82 +1,21 @@ - - - - - - - -Computes the solution X to the system torch_tensordot(A, X) = B. — linalg_tensorsolve • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Computes the solution X to the system torch_tensordot(A, X) = B. — linalg_tensorsolve • torch - - - - - - - - - - - - - - - + + - - -
-
- -
- -
+
@@ -195,107 +117,98 @@ The returned tensor x satisfies tensordot(A, x, dims=x$ndim) == B.

-
linalg_tensorsolve(A, B, dims = NULL)
- -

Arguments

- - - - - - - - - - - - - - -
A

(Tensor): tensor to solve for.

B

(Tensor): the solution

dims

(Tupleint, optional): dimensions of A to be moved. -If NULL, no dimensions are moved. Default: NULL.

- -

Details

+
+
linalg_tensorsolve(A, B, dims = NULL)
+
+
+

Arguments

+
A
+

(Tensor): tensor to solve for.

+
B
+

(Tensor): the solution

+
dims
+

(Tupleint, optional): dimensions of A to be moved. +If NULL, no dimensions are moved. Default: NULL.

+
+
+

Details

If dims is specified, A will be reshaped as A = movedim(A, dims, seq(len(dims) - A$ndim + 1, 0))

Supports inputs of float, double, cfloat and cdouble dtypes.

-

See also

- - +
+ -

Examples

-
if (torch_is_installed()) {
-A <- torch_eye(2 * 3 * 4)$reshape(c(2 * 3, 4, 2, 3, 4))
-B <- torch_randn(2 * 3, 4)
-X <- linalg_tensorsolve(A, B)
-X$shape
-torch_allclose(torch_tensordot(A, X, dims=X$ndim), B)
-
-A <- torch_randn(6, 4, 4, 3, 2)
-B <- torch_randn(4, 3, 2)
-X <- linalg_tensorsolve(A, B, dims=c(1, 3))
-A <- A$permute(c(2, 4, 5, 1, 3))
-torch_allclose(torch_tensordot(A, X, dims=X$ndim), B, atol=1e-6)
-
-}
-#> [1] FALSE
-
+
+

Examples

+
if (torch_is_installed()) {
+A <- torch_eye(2 * 3 * 4)$reshape(c(2 * 3, 4, 2, 3, 4))
+B <- torch_randn(2 * 3, 4)
+X <- linalg_tensorsolve(A, B)
+X$shape
+torch_allclose(torch_tensordot(A, X, dims=X$ndim), B)
+
+A <- torch_randn(6, 4, 4, 3, 2)
+B <- torch_randn(4, 3, 2)
+X <- linalg_tensorsolve(A, B, dims=c(1, 3))
+A <- A$permute(c(2, 4, 5, 1, 3))
+torch_allclose(torch_tensordot(A, X, dims=X$ndim), B, atol=1e-6)
+
+}
+#> [1] FALSE
+
+
+
-
- +
- - + + diff --git a/dev/reference/linalg_vector_norm.html b/dev/reference/linalg_vector_norm.html index 5fa8e642d..b6b3cc243 100644 --- a/dev/reference/linalg_vector_norm.html +++ b/dev/reference/linalg_vector_norm.html @@ -1,82 +1,21 @@ - - - - - - - -Computes a vector norm. — linalg_vector_norm • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Computes a vector norm. — linalg_vector_norm • torch - - - - - - - - - - - - - - - - - + + -
-
- -
- -
+
@@ -195,134 +117,105 @@ This function does not necessarily treat multidimensonal A as a bat vectors, instead:

-
linalg_vector_norm(A, ord = 2, dim = NULL, keepdim = FALSE, dtype = NULL)
+
+
linalg_vector_norm(A, ord = 2, dim = NULL, keepdim = FALSE, dtype = NULL)
+
-

Arguments

- - - - - - - - - - - - - - - - - - - - - - -
A

(Tensor): tensor, flattened by default, but this behavior can be -controlled using dim.

ord

(int, float, inf, -inf, 'fro', 'nuc', optional): order of norm. Default: 2

dim

(int, Tupleint, optional): dimensions over which to compute +

+

Arguments

+
A
+

(Tensor): tensor, flattened by default, but this behavior can be +controlled using dim.

+
ord
+

(int, float, inf, -inf, 'fro', 'nuc', optional): order of norm. Default: 2

+
dim
+

(int, Tupleint, optional): dimensions over which to compute the vector or matrix norm. See above for the behavior when dim=NULL. -Default: NULL

keepdim

(bool, optional): If set to TRUE, the reduced dimensions are retained -in the result as dimensions with size one. Default: FALSE

dtype

dtype (torch_dtype, optional): If specified, the input tensor is cast to +Default: NULL

+
keepdim
+

(bool, optional): If set to TRUE, the reduced dimensions are retained +in the result as dimensions with size one. Default: FALSE

+
dtype
+

dtype (torch_dtype, optional): If specified, the input tensor is cast to dtype before performing the operation, and the returned tensor's type -will be dtype. Default: NULL

- -

Details

- +will be dtype. Default: NULL

+
+
+

Details

-
    -
  • If dim=NULL, A will be flattened before the norm is computed.

  • +
    • If dim=NULL, A will be flattened before the norm is computed.

    • If dim is an int or a tuple, the norm will be computed over these dimensions and the other dimensions will be treated as batch dimensions.

    • -
    - -

    This behavior is for consistency with linalg_norm().

    +

This behavior is for consistency with linalg_norm().

ord defines the norm that is computed. The following norms are -supported:

- - - - - - - - - - - - -
ordnorm for matricesnorm for vectors
NULL (default)Frobenius norm2-norm (see below)
"fro"Frobenius norm– not supported –
"nuc"nuclear norm– not supported –
Infmax(sum(abs(x), dim=2))max(abs(x))
-Infmin(sum(abs(x), dim=2))min(abs(x))
0– not supported –sum(x != 0)
1max(sum(abs(x), dim=1))as below
-1min(sum(abs(x), dim=1))as below
2largest singular valueas below
-2smallest singular valueas below
other int or float– not supported –sum(abs(x)^{ord})^{(1 / ord)}
- - -

See also

- - +supported:

ordnorm for matricesnorm for vectors
NULL (default)Frobenius norm2-norm (see below)
"fro"Frobenius norm– not supported –
"nuc"nuclear norm– not supported –
Infmax(sum(abs(x), dim=2))max(abs(x))
-Infmin(sum(abs(x), dim=2))min(abs(x))
0– not supported –sum(x != 0)
1max(sum(abs(x), dim=1))as below
-1min(sum(abs(x), dim=1))as below
2largest singular valueas below
-2smallest singular valueas below
other int or float– not supported –sum(abs(x)^{ord})^{(1 / ord)}
+ -

Examples

-
if (torch_is_installed()) {
-a <- torch_arange(0, 8, dtype=torch_float()) - 4
-a
-b <- a$reshape(c(3, 3))
-b
-
-linalg_vector_norm(a, ord = 3.5)
-linalg_vector_norm(b, ord = 3.5)
-
-}
-#> torch_tensor
-#> 5.43449
-#> [ CPUFloatType{} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+a <- torch_arange(0, 8, dtype=torch_float()) - 4
+a
+b <- a$reshape(c(3, 3))
+b
+
+linalg_vector_norm(a, ord = 3.5)
+linalg_vector_norm(b, ord = 3.5)
+
+}
+#> torch_tensor
+#> 5.43449
+#> [ CPUFloatType{} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/load_state_dict.html b/dev/reference/load_state_dict.html index 41e7f8ac0..0a0f97967 100644 --- a/dev/reference/load_state_dict.html +++ b/dev/reference/load_state_dict.html @@ -1,82 +1,21 @@ - - - - - - - -Load a state dict file — load_state_dict • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Load a state dict file — load_state_dict • torch - - - - - - - - - - - - - - + + - - - -
-
- -
- -
+
@@ -195,50 +117,46 @@ For it to work correctly you need to use torch.save with the flag: classes from the tensors in the dict.

-
load_state_dict(path)
- -

Arguments

- - - - - - -
path

to the state dict file

- -

Value

+
+
load_state_dict(path)
+
+
+

Arguments

+
path
+

to the state dict file

+
+
+

Value

a named list of tensors.

-

Details

- -

The above might change with development of this +

+
+

Details

+

The above might change with development of this in pytorch's C++ api.

+
+
-
- +
- - + + diff --git a/dev/reference/logits_to_probs.html b/dev/reference/logits_to_probs.html deleted file mode 100644 index 9da0f79b8..000000000 --- a/dev/reference/logits_to_probs.html +++ /dev/null @@ -1,238 +0,0 @@ - - - - - - - - -Converts a tensor of logits into probabilities. Note that for the -binary case, each value denotes log odds, whereas for the -multi-dimensional case, the values along the last dimension denote -the log probabilities (possibly unnormalized) of the events. — logits_to_probs • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - -
- -
-
- - -
-

Converts a tensor of logits into probabilities. Note that for the -binary case, each value denotes log odds, whereas for the -multi-dimensional case, the values along the last dimension denote -the log probabilities (possibly unnormalized) of the events.

-
- -
logits_to_probs(logits, is_binary = FALSE)
- - - -
- -
- - -
- - -
-

Site built with pkgdown 1.6.1.

-
- -
-
- - - - - - - - diff --git a/dev/reference/lr_lambda.html b/dev/reference/lr_lambda.html index 3b2ddc562..4ebe46ca1 100644 --- a/dev/reference/lr_lambda.html +++ b/dev/reference/lr_lambda.html @@ -1,82 +1,21 @@ - - - - - - - -Sets the learning rate of each parameter group to the initial lr -times a given function. When last_epoch=-1, sets initial lr as lr. — lr_lambda • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Sets the learning rate of each parameter group to the initial lr +times a given function. When last_epoch=-1, sets initial lr as lr. — lr_lambda • torch - - - - - - - - + + -
-
- -
- -
+
@@ -194,74 +116,64 @@ times a given function. When last_epoch=-1, sets initial lr as lr. times a given function. When last_epoch=-1, sets initial lr as lr.

-
lr_lambda(optimizer, lr_lambda, last_epoch = -1, verbose = FALSE)
+
+
lr_lambda(optimizer, lr_lambda, last_epoch = -1, verbose = FALSE)
+
-

Arguments

- - - - - - - - - - - - - - - - - - -
optimizer

(Optimizer): Wrapped optimizer.

lr_lambda

(function or list): A function which computes a multiplicative +

+

Arguments

+
optimizer
+

(Optimizer): Wrapped optimizer.

+
lr_lambda
+

(function or list): A function which computes a multiplicative factor given an integer parameter epoch, or a list of such -functions, one for each group in optimizer.param_groups.

last_epoch

(int): The index of last epoch. Default: -1.

verbose

(bool): If TRUE, prints a message to stdout for -each update. Default: FALSE.

- - -

Examples

-
if (torch_is_installed()) {
-# Assuming optimizer has two groups.
-lambda1 <- function(epoch) epoch %/% 30
-lambda2 <- function(epoch) 0.95^epoch
-if (FALSE) {
-scheduler <- lr_lambda(optimizer, lr_lambda = list(lambda1, lambda2))
-for (epoch in 1:100) {
-  train(...)
-  validate(...)
-  scheduler$step()
-}
-}
-
-}
-
+functions, one for each group in optimizer.param_groups.

+
last_epoch
+

(int): The index of last epoch. Default: -1.

+
verbose
+

(bool): If TRUE, prints a message to stdout for +each update. Default: FALSE.

+
+ +
+

Examples

+
if (torch_is_installed()) {
+# Assuming optimizer has two groups.
+lambda1 <- function(epoch) epoch %/% 30
+lambda2 <- function(epoch) 0.95^epoch
+if (FALSE) {
+scheduler <- lr_lambda(optimizer, lr_lambda = list(lambda1, lambda2))
+for (epoch in 1:100) {
+  train(...)
+  validate(...)
+  scheduler$step()
+}
+}
+
+}
+
+
+
-
- +
- - + + diff --git a/dev/reference/lr_multiplicative.html b/dev/reference/lr_multiplicative.html index ca23a1198..7ed449acb 100644 --- a/dev/reference/lr_multiplicative.html +++ b/dev/reference/lr_multiplicative.html @@ -1,82 +1,21 @@ - - - - - - - -Multiply the learning rate of each parameter group by the factor given -in the specified function. When last_epoch=-1, sets initial lr as lr. — lr_multiplicative • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Multiply the learning rate of each parameter group by the factor given +in the specified function. When last_epoch=-1, sets initial lr as lr. — lr_multiplicative • torch - - - - - - - - + + -
-
- -
- -
+
@@ -194,72 +116,62 @@ in the specified function. When last_epoch=-1, sets initial lr as lr. in the specified function. When last_epoch=-1, sets initial lr as lr.

-
lr_multiplicative(optimizer, lr_lambda, last_epoch = -1, verbose = FALSE)
+
+
lr_multiplicative(optimizer, lr_lambda, last_epoch = -1, verbose = FALSE)
+
-

Arguments

- - - - - - - - - - - - - - - - - - -
optimizer

(Optimizer): Wrapped optimizer.

lr_lambda

(function or list): A function which computes a multiplicative +

+

Arguments

+
optimizer
+

(Optimizer): Wrapped optimizer.

+
lr_lambda
+

(function or list): A function which computes a multiplicative factor given an integer parameter epoch, or a list of such -functions, one for each group in optimizer.param_groups.

last_epoch

(int): The index of last epoch. Default: -1.

verbose

(bool): If TRUE, prints a message to stdout for -each update. Default: FALSE.

- - -

Examples

-
if (torch_is_installed()) {
-if (FALSE) {
-lmbda <- function(epoch) 0.95
-scheduler <- lr_multiplicative(optimizer, lr_lambda=lmbda)
-for (epoch in 1:100) {
-  train(...)
-  validate(...)
-  scheduler$step()
-}
-}
-
-}
-
+functions, one for each group in optimizer.param_groups.

+
last_epoch
+

(int): The index of last epoch. Default: -1.

+
verbose
+

(bool): If TRUE, prints a message to stdout for +each update. Default: FALSE.

+
+ +
+

Examples

+
if (torch_is_installed()) {
+if (FALSE) {
+lmbda <- function(epoch) 0.95
+scheduler <- lr_multiplicative(optimizer, lr_lambda=lmbda)
+for (epoch in 1:100) {
+  train(...)
+  validate(...)
+  scheduler$step()
+}
+}
+
+}
+
+
+
-
- +
- - + + diff --git a/dev/reference/lr_one_cycle.html b/dev/reference/lr_one_cycle.html index 9728dd68e..8bff16191 100644 --- a/dev/reference/lr_one_cycle.html +++ b/dev/reference/lr_one_cycle.html @@ -1,83 +1,22 @@ - - - - - - - -Once cycle learning rate — lr_one_cycle • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Once cycle learning rate — lr_one_cycle • torch - - - - - - - - - - - - - - + + - - - -
-
- -
- -
+
@@ -197,183 +119,151 @@ from that maximum learning rate to some minimum learning rate much lower than the initial learning rate.

-
lr_one_cycle(
-  optimizer,
-  max_lr,
-  total_steps = NULL,
-  epochs = NULL,
-  steps_per_epoch = NULL,
-  pct_start = 0.3,
-  anneal_strategy = "cos",
-  cycle_momentum = TRUE,
-  base_momentum = 0.85,
-  max_momentum = 0.95,
-  div_factor = 25,
-  final_div_factor = 10000,
-  last_epoch = -1,
-  verbose = FALSE
-)
+
+
lr_one_cycle(
+  optimizer,
+  max_lr,
+  total_steps = NULL,
+  epochs = NULL,
+  steps_per_epoch = NULL,
+  pct_start = 0.3,
+  anneal_strategy = "cos",
+  cycle_momentum = TRUE,
+  base_momentum = 0.85,
+  max_momentum = 0.95,
+  div_factor = 25,
+  final_div_factor = 10000,
+  last_epoch = -1,
+  verbose = FALSE
+)
+
-

Arguments

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
optimizer

(Optimizer): Wrapped optimizer.

max_lr

(float or list): Upper learning rate boundaries in the cycle -for each parameter group.

total_steps

(int): The total number of steps in the cycle. Note that +

+

Arguments

+
optimizer
+

(Optimizer): Wrapped optimizer.

+
max_lr
+

(float or list): Upper learning rate boundaries in the cycle +for each parameter group.

+
total_steps
+

(int): The total number of steps in the cycle. Note that if a value is not provided here, then it must be inferred by providing a value for epochs and steps_per_epoch. -Default: NULL

epochs

(int): The number of epochs to train for. This is used along +Default: NULL

+
epochs
+

(int): The number of epochs to train for. This is used along with steps_per_epoch in order to infer the total number of steps in the cycle if a value for total_steps is not provided. -Default: NULL

steps_per_epoch

(int): The number of steps per epoch to train for. This is +Default: NULL

+
steps_per_epoch
+

(int): The number of steps per epoch to train for. This is used along with epochs in order to infer the total number of steps in the cycle if a value for total_steps is not provided. -Default: NULL

pct_start

(float): The percentage of the cycle (in number of steps) spent +Default: NULL

+
pct_start
+

(float): The percentage of the cycle (in number of steps) spent increasing the learning rate. -Default: 0.3

anneal_strategy

(str): 'cos', 'linear' +Default: 0.3

+
anneal_strategy
+

(str): 'cos', 'linear' Specifies the annealing strategy: "cos" for cosine annealing, "linear" for linear annealing. -Default: 'cos'

cycle_momentum

(bool): If TRUE, momentum is cycled inversely +Default: 'cos'

+
cycle_momentum
+

(bool): If TRUE, momentum is cycled inversely to learning rate between 'base_momentum' and 'max_momentum'. -Default: TRUE

base_momentum

(float or list): Lower momentum boundaries in the cycle +Default: TRUE

+
base_momentum
+

(float or list): Lower momentum boundaries in the cycle for each parameter group. Note that momentum is cycled inversely to learning rate; at the peak of a cycle, momentum is 'base_momentum' and learning rate is 'max_lr'. -Default: 0.85

max_momentum

(float or list): Upper momentum boundaries in the cycle +Default: 0.85

+
max_momentum
+

(float or list): Upper momentum boundaries in the cycle for each parameter group. Functionally, it defines the cycle amplitude (max_momentum - base_momentum). Note that momentum is cycled inversely to learning rate; at the start of a cycle, momentum is 'max_momentum' and learning rate is 'base_lr' -Default: 0.95

div_factor

(float): Determines the initial learning rate via +Default: 0.95

+
div_factor
+

(float): Determines the initial learning rate via initial_lr = max_lr/div_factor -Default: 25

final_div_factor

(float): Determines the minimum learning rate via +Default: 25

+
final_div_factor
+

(float): Determines the minimum learning rate via min_lr = initial_lr/final_div_factor -Default: 1e4

last_epoch

(int): The index of the last batch. This parameter is used when -resuming a training job. Since step() should be invoked after each +Default: 1e4

+
last_epoch
+

(int): The index of the last batch. This parameter is used when +resuming a training job. Since step() should be invoked after each batch instead of after each epoch, this number represents the total number of batches computed, not the total number of epochs computed. When last_epoch=-1, the schedule is started from the beginning. -Default: -1

verbose

(bool): If TRUE, prints a message to stdout for -each update. Default: FALSE.

- -

Details

- +Default: -1

+
verbose
+

(bool): If TRUE, prints a message to stdout for +each update. Default: FALSE.

+
+
+

Details

This policy was initially described in the paper -Super-Convergence: Very Fast Training of Neural Networks Using Large Learning Rates.

+Super-Convergence: Very Fast Training of Neural Networks Using Large Learning Rates.

The 1cycle learning rate policy changes the learning rate after every batch. step should be called after a batch has been used for training. This scheduler is not chainable.

Note also that the total number of steps in the cycle can be determined in one -of two ways (listed in order of precedence):

    -
  • A value for total_steps is explicitly provided.

  • +of two ways (listed in order of precedence):

    • A value for total_steps is explicitly provided.

    • A number of epochs (epochs) and a number of steps per epoch (steps_per_epoch) are provided.

    • -
    - -

    In this case, the number of total steps is inferred by +

In this case, the number of total steps is inferred by total_steps = epochs * steps_per_epoch

You must either provide a value for total_steps or provide a value for both epochs and steps_per_epoch.

+
-

Examples

-
if (torch_is_installed()) {
-if (FALSE) {
-data_loader <- dataloader(...)
-optimizer <- optim_sgd(model$parameters, lr=0.1, momentum=0.9)
-scheduler <- lr_one_cycle(optimizer, max_lr=0.01, steps_per_epoch=length(data_loader), 
-                          epochs=10)
-
-for (i in 1:epochs) {
-  coro::loop(for (batch in data_loader) {
-     train_batch(...)
-     scheduler$step()
-  })
-}
-}
-
-}
-
+
+

Examples

+
if (torch_is_installed()) {
+if (FALSE) {
+data_loader <- dataloader(...)
+optimizer <- optim_sgd(model$parameters, lr=0.1, momentum=0.9)
+scheduler <- lr_one_cycle(optimizer, max_lr=0.01, steps_per_epoch=length(data_loader), 
+                          epochs=10)
+
+for (i in 1:epochs) {
+  coro::loop(for (batch in data_loader) {
+     train_batch(...)
+     scheduler$step()
+  })
+}
+}
+
+}
+
+
+
-
- +
- - + + diff --git a/dev/reference/lr_scheduler.html b/dev/reference/lr_scheduler.html index df3c7b1ba..0dc9f0a19 100644 --- a/dev/reference/lr_scheduler.html +++ b/dev/reference/lr_scheduler.html @@ -1,79 +1,18 @@ - - - - - - - -Creates learning rate schedulers — lr_scheduler • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Creates learning rate schedulers — lr_scheduler • torch - - - - - - + + - - -
-
- -
- -
+
@@ -189,62 +111,50 @@

Creates learning rate schedulers

-
lr_scheduler(
-  classname = NULL,
-  inherit = LRScheduler,
-  ...,
-  parent_env = parent.frame()
-)
- -

Arguments

- - - - - - - - - - - - - - - - - - -
classname

optional name for the learning rate scheduler

inherit

an optional learning rate scheduler to inherit from

...

named list of methods. You must implement the get_lr() -method that doesn't take any argument and returns learning rates -for each param_group in the optimizer.

parent_env

passed to R6::R6Class().

+
+
lr_scheduler(
+  classname = NULL,
+  inherit = LRScheduler,
+  ...,
+  parent_env = parent.frame()
+)
+
+
+

Arguments

+
classname
+

optional name for the learning rate scheduler

+
inherit
+

an optional learning rate scheduler to inherit from

+
...
+

named list of methods. You must implement the get_lr() +method that doesn't take any argument and returns learning rates +for each param_group in the optimizer.

+
parent_env
+

passed to R6::R6Class().

+
+
-
- +
- - + + diff --git a/dev/reference/lr_step.html b/dev/reference/lr_step.html index 4da6d5437..2f98cf4c8 100644 --- a/dev/reference/lr_step.html +++ b/dev/reference/lr_step.html @@ -1,82 +1,21 @@ - - - - - - - -Step learning rate decay — lr_step • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Step learning rate decay — lr_step • torch - - - - - - - - - - - - - - - - - + + -
-
- -
- -
+
@@ -195,74 +117,64 @@ other changes to the learning rate from outside this scheduler. When last_epoch=-1, sets initial lr as lr.

-
lr_step(optimizer, step_size, gamma = 0.1, last_epoch = -1)
- -

Arguments

- - - - - - - - - - - - - - - - - - -
optimizer

(Optimizer): Wrapped optimizer.

step_size

(int): Period of learning rate decay.

gamma

(float): Multiplicative factor of learning rate decay. -Default: 0.1.

last_epoch

(int): The index of last epoch. Default: -1.

- +
+
lr_step(optimizer, step_size, gamma = 0.1, last_epoch = -1)
+
-

Examples

-
if (torch_is_installed()) {
-if (FALSE) {
-# Assuming optimizer uses lr = 0.05 for all groups
-# lr = 0.05     if epoch < 30
-# lr = 0.005    if 30 <= epoch < 60
-# lr = 0.0005   if 60 <= epoch < 90
-# ...
-scheduler <- lr_step(optimizer, step_size=30, gamma=0.1)
-for (epoch in 1:100) {
-  train(...)
-  validate(...)
-  scheduler$step()
-}
-}
-
-}
-
+
+

Arguments

+
optimizer
+

(Optimizer): Wrapped optimizer.

+
step_size
+

(int): Period of learning rate decay.

+
gamma
+

(float): Multiplicative factor of learning rate decay. +Default: 0.1.

+
last_epoch
+

(int): The index of last epoch. Default: -1.

+
+ +
+

Examples

+
if (torch_is_installed()) {
+if (FALSE) {
+# Assuming optimizer uses lr = 0.05 for all groups
+# lr = 0.05     if epoch < 30
+# lr = 0.005    if 30 <= epoch < 60
+# lr = 0.0005   if 60 <= epoch < 90
+# ...
+scheduler <- lr_step(optimizer, step_size=30, gamma=0.1)
+for (epoch in 1:100) {
+  train(...)
+  validate(...)
+  scheduler$step()
+}
+}
+
+}
+
+
+
-
- +
- - + + diff --git a/dev/reference/nn_adaptive_avg_pool1d.html b/dev/reference/nn_adaptive_avg_pool1d.html index 620972ac0..83b8d106f 100644 --- a/dev/reference/nn_adaptive_avg_pool1d.html +++ b/dev/reference/nn_adaptive_avg_pool1d.html @@ -1,80 +1,19 @@ - - - - - - - -Applies a 1D adaptive average pooling over an input signal composed of several input planes. — nn_adaptive_avg_pool1d • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Applies a 1D adaptive average pooling over an input signal composed of several input planes. — nn_adaptive_avg_pool1d • torch - - - - - - + + - - -
-
- -
- -
+
@@ -191,52 +113,48 @@ The number of output features is equal to the number of input planes." /> The number of output features is equal to the number of input planes.

-
nn_adaptive_avg_pool1d(output_size)
- -

Arguments

- - - - - - -
output_size

the target output size H

- - -

Examples

-
if (torch_is_installed()) {
-# target output size of 5
-m = nn_adaptive_avg_pool1d(5)
-input <- torch_randn(1, 64, 8)
-output <- m(input)
-
-}
-
+
+
nn_adaptive_avg_pool1d(output_size)
+
+ +
+

Arguments

+
output_size
+

the target output size H

+
+ +
+

Examples

+
if (torch_is_installed()) {
+# target output size of 5
+m = nn_adaptive_avg_pool1d(5)
+input <- torch_randn(1, 64, 8)
+output <- m(input)
+
+}
+
+
+
-
- +
- - + + diff --git a/dev/reference/nn_adaptive_avg_pool2d.html b/dev/reference/nn_adaptive_avg_pool2d.html index 24d91d872..20bbce1a0 100644 --- a/dev/reference/nn_adaptive_avg_pool2d.html +++ b/dev/reference/nn_adaptive_avg_pool2d.html @@ -1,80 +1,19 @@ - - - - - - - -Applies a 2D adaptive average pooling over an input signal composed of several input planes. — nn_adaptive_avg_pool2d • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Applies a 2D adaptive average pooling over an input signal composed of several input planes. — nn_adaptive_avg_pool2d • torch - - - - - - + + - - -
-
- -
- -
+
@@ -191,59 +113,55 @@ The number of output features is equal to the number of input planes." /> The number of output features is equal to the number of input planes.

-
nn_adaptive_avg_pool2d(output_size)
+
+
nn_adaptive_avg_pool2d(output_size)
+
-

Arguments

- - - - - - -
output_size

the target output size of the image of the form H x W. +

+

Arguments

+
output_size
+

the target output size of the image of the form H x W. Can be a tuple (H, W) or a single H for a square image H x H. H and W can be either a int, or NULL which means the size will -be the same as that of the input.

- - -

Examples

-
if (torch_is_installed()) {
-# target output size of 5x7
-m <- nn_adaptive_avg_pool2d(c(5,7))
-input <- torch_randn(1, 64, 8, 9)
-output <- m(input)
-# target output size of 7x7 (square)
-m <- nn_adaptive_avg_pool2d(7)
-input <- torch_randn(1, 64, 10, 9)
-output <- m(input)
-
-}
-
+be the same as that of the input.

+
+ +
+

Examples

+
if (torch_is_installed()) {
+# target output size of 5x7
+m <- nn_adaptive_avg_pool2d(c(5,7))
+input <- torch_randn(1, 64, 8, 9)
+output <- m(input)
+# target output size of 7x7 (square)
+m <- nn_adaptive_avg_pool2d(7)
+input <- torch_randn(1, 64, 10, 9)
+output <- m(input)
+
+}
+
+
+
-
- +
- - + + diff --git a/dev/reference/nn_adaptive_avg_pool3d.html b/dev/reference/nn_adaptive_avg_pool3d.html index 6a19c247a..47eee6d16 100644 --- a/dev/reference/nn_adaptive_avg_pool3d.html +++ b/dev/reference/nn_adaptive_avg_pool3d.html @@ -1,80 +1,19 @@ - - - - - - - -Applies a 3D adaptive average pooling over an input signal composed of several input planes. — nn_adaptive_avg_pool3d • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Applies a 3D adaptive average pooling over an input signal composed of several input planes. — nn_adaptive_avg_pool3d • torch - - - - - - + + - - -
-
- -
- -
+
@@ -191,59 +113,55 @@ The number of output features is equal to the number of input planes." /> The number of output features is equal to the number of input planes.

-
nn_adaptive_avg_pool3d(output_size)
+
+
nn_adaptive_avg_pool3d(output_size)
+
-

Arguments

- - - - - - -
output_size

the target output size of the form D x H x W. +

+

Arguments

+
output_size
+

the target output size of the form D x H x W. Can be a tuple (D, H, W) or a single number D for a cube D x D x D. D, H and W can be either a int, or None which means the size will -be the same as that of the input.

- - -

Examples

-
if (torch_is_installed()) {
-# target output size of 5x7x9
-m <- nn_adaptive_avg_pool3d(c(5,7,9))
-input <- torch_randn(1, 64, 8, 9, 10)
-output <- m(input)
-# target output size of 7x7x7 (cube)
-m <- nn_adaptive_avg_pool3d(7)
-input <- torch_randn(1, 64, 10, 9, 8)
-output <- m(input)
-
-}
-
+be the same as that of the input.

+
+ +
+

Examples

+
if (torch_is_installed()) {
+# target output size of 5x7x9
+m <- nn_adaptive_avg_pool3d(c(5,7,9))
+input <- torch_randn(1, 64, 8, 9, 10)
+output <- m(input)
+# target output size of 7x7x7 (cube)
+m <- nn_adaptive_avg_pool3d(7)
+input <- torch_randn(1, 64, 10, 9, 8)
+output <- m(input)
+
+}
+
+
+
-
- +
- - + + diff --git a/dev/reference/nn_adaptive_log_softmax_with_loss.html b/dev/reference/nn_adaptive_log_softmax_with_loss.html index facfd95fa..256fbfcc7 100644 --- a/dev/reference/nn_adaptive_log_softmax_with_loss.html +++ b/dev/reference/nn_adaptive_log_softmax_with_loss.html @@ -1,80 +1,19 @@ - - - - - - - -AdaptiveLogSoftmaxWithLoss module — nn_adaptive_log_softmax_with_loss • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -AdaptiveLogSoftmaxWithLoss module — nn_adaptive_log_softmax_with_loss • torch - - - - - - - - + + -
-
- -
- -
+
-
nn_adaptive_log_softmax_with_loss(
-  in_features,
-  n_classes,
-  cutoffs,
-  div_value = 4,
-  head_bias = FALSE
-)
- -

Arguments

- - - - - - - - - - - - - - - - - - - - - - -
in_features

(int): Number of features in the input tensor

n_classes

(int): Number of classes in the dataset

cutoffs

(Sequence): Cutoffs used to assign targets to their buckets

div_value

(float, optional): value used as an exponent to compute sizes -of the clusters. Default: 4.0

head_bias

(bool, optional): If True, adds a bias term to the 'head' of the -adaptive softmax. Default: False

- -

Value

+
+
nn_adaptive_log_softmax_with_loss(
+  in_features,
+  n_classes,
+  cutoffs,
+  div_value = 4,
+  head_bias = FALSE
+)
+
-

NamedTuple with output and loss fields:

    -
  • output is a Tensor of size N containing computed target +

    +

    Arguments

    +
    in_features
    +

    (int): Number of features in the input tensor

    +
    n_classes
    +

    (int): Number of classes in the dataset

    +
    cutoffs
    +

    (Sequence): Cutoffs used to assign targets to their buckets

    +
    div_value
    +

    (float, optional): value used as an exponent to compute sizes +of the clusters. Default: 4.0

    +
    head_bias
    +

    (bool, optional): If True, adds a bias term to the 'head' of the +adaptive softmax. Default: False

    +
    +
    +

    Value

    +

    NamedTuple with output and loss fields:

    • output is a Tensor of size N containing computed target log probabilities for each example

    • loss is a Scalar representing the computed negative log likelihood loss

    • -
    - -

    Details

    - +
+
+

Details

Adaptive softmax is an approximate strategy for training models with large output spaces. It is most effective when the label distribution is highly imbalanced, for example in natural language modelling, where the word @@ -251,8 +161,7 @@ present are evaluated.

The idea is that the clusters which are accessed frequently (like the first one, containing most frequent labels), should also be cheap to compute -- that is, contain a small number of assigned labels. -We highly recommend taking a look at the original paper for more details.

    -
  • cutoffs should be an ordered Sequence of integers sorted +We highly recommend taking a look at the original paper for more details.

    • cutoffs should be an ordered Sequence of integers sorted in the increasing order. It controls number of clusters and the partitioning of targets into clusters. For example setting cutoffs = c(10, 100, 1000) @@ -271,59 +180,54 @@ and indices starting from \(1\)).

    • head_bias if set to True, adds a bias term to the 'head' of the adaptive softmax. See paper for details. Set to False in the official implementation.

    • -
    - -

    Note

    - +
+
+

Note

This module returns a NamedTuple with output and loss fields. See further documentation for details.

To compute log-probabilities for all classes, the log_prob method can be used.

-

Warning

- +
+
+

Warning

Labels passed as inputs to this module should be sorted according to their frequency. This means that the most frequent label should be represented by the index 0, and the least frequent label should be represented by the index n_classes - 1.

-

Shape

- +
+
+

Shape

-
    -
  • input: \((N, \mbox{in\_features})\)

  • +
    • input: \((N, \mbox{in\_features})\)

    • target: \((N)\) where each value satisfies \(0 <= \mbox{target[i]} <= \mbox{n\_classes}\)

    • output1: \((N)\)

    • output2: Scalar

    • -
    - +
+
-
- +
- - + + diff --git a/dev/reference/nn_adaptive_max_pool1d.html b/dev/reference/nn_adaptive_max_pool1d.html index 14f961e5c..e23ecaa6f 100644 --- a/dev/reference/nn_adaptive_max_pool1d.html +++ b/dev/reference/nn_adaptive_max_pool1d.html @@ -1,80 +1,19 @@ - - - - - - - -Applies a 1D adaptive max pooling over an input signal composed of several input planes. — nn_adaptive_max_pool1d • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Applies a 1D adaptive max pooling over an input signal composed of several input planes. — nn_adaptive_max_pool1d • torch - - - - - - + + - - -
-
- -
- -
+
@@ -191,57 +113,51 @@ The number of output features is equal to the number of input planes." /> The number of output features is equal to the number of input planes.

-
nn_adaptive_max_pool1d(output_size, return_indices = FALSE)
- -

Arguments

- - - - - - - - - - -
output_size

the target output size H

return_indices

if TRUE, will return the indices along with the outputs. -Useful to pass to nn_max_unpool1d(). Default: FALSE

- - -

Examples

-
if (torch_is_installed()) {
-# target output size of 5
-m <- nn_adaptive_max_pool1d(5)
-input <- torch_randn(1, 64, 8)
-output <- m(input)
-
-}
-
+
+
nn_adaptive_max_pool1d(output_size, return_indices = FALSE)
+
+ +
+

Arguments

+
output_size
+

the target output size H

+
return_indices
+

if TRUE, will return the indices along with the outputs. +Useful to pass to nn_max_unpool1d(). Default: FALSE

+
+ +
+

Examples

+
if (torch_is_installed()) {
+# target output size of 5
+m <- nn_adaptive_max_pool1d(5)
+input <- torch_randn(1, 64, 8)
+output <- m(input)
+
+}
+
+
+
-
- +
- - + + diff --git a/dev/reference/nn_adaptive_max_pool2d.html b/dev/reference/nn_adaptive_max_pool2d.html index 604bc9725..f66f213b2 100644 --- a/dev/reference/nn_adaptive_max_pool2d.html +++ b/dev/reference/nn_adaptive_max_pool2d.html @@ -1,80 +1,19 @@ - - - - - - - -Applies a 2D adaptive max pooling over an input signal composed of several input planes. — nn_adaptive_max_pool2d • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Applies a 2D adaptive max pooling over an input signal composed of several input planes. — nn_adaptive_max_pool2d • torch - - - - - - + + - - -
-
- -
- -
+
@@ -191,64 +113,58 @@ The number of output features is equal to the number of input planes." /> The number of output features is equal to the number of input planes.

-
nn_adaptive_max_pool2d(output_size, return_indices = FALSE)
+
+
nn_adaptive_max_pool2d(output_size, return_indices = FALSE)
+
-

Arguments

- - - - - - - - - - -
output_size

the target output size of the image of the form H x W. +

+

Arguments

+
output_size
+

the target output size of the image of the form H x W. Can be a tuple (H, W) or a single H for a square image H x H. H and W can be either a int, or None which means the size will -be the same as that of the input.

return_indices

if TRUE, will return the indices along with the outputs. -Useful to pass to nn_max_unpool2d(). Default: FALSE

- - -

Examples

-
if (torch_is_installed()) {
-# target output size of 5x7
-m <- nn_adaptive_max_pool2d(c(5,7))
-input <- torch_randn(1, 64, 8, 9)
-output <- m(input)
-# target output size of 7x7 (square)
-m <- nn_adaptive_max_pool2d(7)
-input <- torch_randn(1, 64, 10, 9)
-output <- m(input)
-
-}
-
+be the same as that of the input.

+
return_indices
+

if TRUE, will return the indices along with the outputs. +Useful to pass to nn_max_unpool2d(). Default: FALSE

+
+ +
+

Examples

+
if (torch_is_installed()) {
+# target output size of 5x7
+m <- nn_adaptive_max_pool2d(c(5,7))
+input <- torch_randn(1, 64, 8, 9)
+output <- m(input)
+# target output size of 7x7 (square)
+m <- nn_adaptive_max_pool2d(7)
+input <- torch_randn(1, 64, 10, 9)
+output <- m(input)
+
+}
+
+
+
-
- +
- - + + diff --git a/dev/reference/nn_adaptive_max_pool3d.html b/dev/reference/nn_adaptive_max_pool3d.html index ac502701e..cd455e52e 100644 --- a/dev/reference/nn_adaptive_max_pool3d.html +++ b/dev/reference/nn_adaptive_max_pool3d.html @@ -1,80 +1,19 @@ - - - - - - - -Applies a 3D adaptive max pooling over an input signal composed of several input planes. — nn_adaptive_max_pool3d • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Applies a 3D adaptive max pooling over an input signal composed of several input planes. — nn_adaptive_max_pool3d • torch - - - - - - + + - - -
-
- -
- -
+
@@ -191,64 +113,58 @@ The number of output features is equal to the number of input planes." /> The number of output features is equal to the number of input planes.

-
nn_adaptive_max_pool3d(output_size, return_indices = FALSE)
+
+
nn_adaptive_max_pool3d(output_size, return_indices = FALSE)
+
-

Arguments

- - - - - - - - - - -
output_size

the target output size of the image of the form D x H x W. +

+

Arguments

+
output_size
+

the target output size of the image of the form D x H x W. Can be a tuple (D, H, W) or a single D for a cube D x D x D. D, H and W can be either a int, or None which means the size will -be the same as that of the input.

return_indices

if TRUE, will return the indices along with the outputs. -Useful to pass to nn_max_unpool3d(). Default: FALSE

- - -

Examples

-
if (torch_is_installed()) {
-# target output size of 5x7x9
-m <- nn_adaptive_max_pool3d(c(5,7,9))
-input <- torch_randn(1, 64, 8, 9, 10)
-output <- m(input)
-# target output size of 7x7x7 (cube)
-m <- nn_adaptive_max_pool3d(7)
-input <- torch_randn(1, 64, 10, 9, 8)
-output <- m(input)
-
-}
-
+be the same as that of the input.

+
return_indices
+

if TRUE, will return the indices along with the outputs. +Useful to pass to nn_max_unpool3d(). Default: FALSE

+
+ +
+

Examples

+
if (torch_is_installed()) {
+# target output size of 5x7x9
+m <- nn_adaptive_max_pool3d(c(5,7,9))
+input <- torch_randn(1, 64, 8, 9, 10)
+output <- m(input)
+# target output size of 7x7x7 (cube)
+m <- nn_adaptive_max_pool3d(7)
+input <- torch_randn(1, 64, 10, 9, 8)
+output <- m(input)
+
+}
+
+
+
-
- +
- - + + diff --git a/dev/reference/nn_avg_pool1d.html b/dev/reference/nn_avg_pool1d.html index af74671e7..03a907907 100644 --- a/dev/reference/nn_avg_pool1d.html +++ b/dev/reference/nn_avg_pool1d.html @@ -1,87 +1,26 @@ - - - - - - - -Applies a 1D average pooling over an input signal composed of several -input planes. — nn_avg_pool1d • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Applies a 1D average pooling over an input signal composed of several +input planes. — nn_avg_pool1d • torch - - - - - - - - - - - - - - - - - + + -
-
- -
- -
+
@@ -204,97 +126,84 @@ can be precisely described as:

$$

-
nn_avg_pool1d(
-  kernel_size,
-  stride = NULL,
-  padding = 0,
-  ceil_mode = FALSE,
-  count_include_pad = TRUE
-)
- -

Arguments

- - - - - - - - - - - - - - - - - - - - - - -
kernel_size

the size of the window

stride

the stride of the window. Default value is kernel_size

padding

implicit zero padding to be added on both sides

ceil_mode

when TRUE, will use ceil instead of floor to compute the output shape

count_include_pad

when TRUE, will include the zero-padding in the averaging calculation

- -

Details

+
+
nn_avg_pool1d(
+  kernel_size,
+  stride = NULL,
+  padding = 0,
+  ceil_mode = FALSE,
+  count_include_pad = TRUE
+)
+
+
+

Arguments

+
kernel_size
+

the size of the window

+
stride
+

the stride of the window. Default value is kernel_size

+
padding
+

implicit zero padding to be added on both sides

+
ceil_mode
+

when TRUE, will use ceil instead of floor to compute the output shape

+
count_include_pad
+

when TRUE, will include the zero-padding in the averaging calculation

+
+
+

Details

If padding is non-zero, then the input is implicitly zero-padded on both sides for padding number of points.

The parameters kernel_size, stride, padding can each be an int or a one-element tuple.

-

Shape

- +
+
+

Shape

-
    -
  • Input: \((N, C, L_{in})\)

  • +
    • Input: \((N, C, L_{in})\)

    • Output: \((N, C, L_{out})\), where

    • -
    - -

    $$ +

$$ L_{out} = \left\lfloor \frac{L_{in} + 2 \times \mbox{padding} - \mbox{kernel\_size}}{\mbox{stride}} + 1\right\rfloor $$

+
-

Examples

-
if (torch_is_installed()) {
-  
-# pool with window of size=3, stride=2
-m <- nn_avg_pool1d(3, stride=2)
-m(torch_randn(1, 1, 8))
-
-}
-#> torch_tensor
-#> (1,.,.) = 
-#>   0.3143 -0.1988  0.5027
-#> [ CPUFloatType{1,1,3} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+  
+# pool with window of size=3, stride=2
+m <- nn_avg_pool1d(3, stride=2)
+m(torch_randn(1, 1, 8))
+
+}
+#> torch_tensor
+#> (1,.,.) = 
+#>   0.1674 -0.7449 -0.4110
+#> [ CPUFloatType{1,1,3} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/nn_avg_pool2d.html b/dev/reference/nn_avg_pool2d.html index 7f5d21eb2..a2a01c61e 100644 --- a/dev/reference/nn_avg_pool2d.html +++ b/dev/reference/nn_avg_pool2d.html @@ -1,87 +1,26 @@ - - - - - - - -Applies a 2D average pooling over an input signal composed of several input -planes. — nn_avg_pool2d • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Applies a 2D average pooling over an input signal composed of several input +planes. — nn_avg_pool2d • torch - - - - - - - - - - - - - - - - - + + -
-
- -
- -
+
@@ -204,64 +126,47 @@ input(N_i, C_j, stride[0] \times h + m, stride[1] \times w + n) $$

-
nn_avg_pool2d(
-  kernel_size,
-  stride = NULL,
-  padding = 0,
-  ceil_mode = FALSE,
-  count_include_pad = TRUE,
-  divisor_override = NULL
-)
- -

Arguments

- - - - - - - - - - - - - - - - - - - - - - - - - - -
kernel_size

the size of the window

stride

the stride of the window. Default value is kernel_size

padding

implicit zero padding to be added on both sides

ceil_mode

when TRUE, will use ceil instead of floor to compute the output shape

count_include_pad

when TRUE, will include the zero-padding in the averaging calculation

divisor_override

if specified, it will be used as divisor, otherwise kernel_size will be used

- -

Details

+
+
nn_avg_pool2d(
+  kernel_size,
+  stride = NULL,
+  padding = 0,
+  ceil_mode = FALSE,
+  count_include_pad = TRUE,
+  divisor_override = NULL
+)
+
+
+

Arguments

+
kernel_size
+

the size of the window

+
stride
+

the stride of the window. Default value is kernel_size

+
padding
+

implicit zero padding to be added on both sides

+
ceil_mode
+

when TRUE, will use ceil instead of floor to compute the output shape

+
count_include_pad
+

when TRUE, will include the zero-padding in the averaging calculation

+
divisor_override
+

if specified, it will be used as divisor, otherwise kernel_size will be used

+
+
+

Details

If padding is non-zero, then the input is implicitly zero-padded on both sides for padding number of points.

-

The parameters kernel_size, stride, padding can either be:

    -
  • a single int -- in which case the same value is used for the height and width dimension

  • +

    The parameters kernel_size, stride, padding can either be:

    • a single int -- in which case the same value is used for the height and width dimension

    • a tuple of two ints -- in which case, the first int is used for the height dimension, and the second int for the width dimension

    • -
    - -

    Shape

    - +
+
+

Shape

-
    -
  • Input: \((N, C, H_{in}, W_{in})\)

  • +
    • Input: \((N, C, H_{in}, W_{in})\)

    • Output: \((N, C, H_{out}, W_{out})\), where

    • -
    - -

    $$ +

$$ H_{out} = \left\lfloor\frac{H_{in} + 2 \times \mbox{padding}[0] - \mbox{kernel\_size}[0]}{\mbox{stride}[0]} + 1\right\rfloor $$ @@ -269,44 +174,43 @@ $$ W_{out} = \left\lfloor\frac{W_{in} + 2 \times \mbox{padding}[1] - \mbox{kernel\_size}[1]}{\mbox{stride}[1]} + 1\right\rfloor $$

+
-

Examples

-
if (torch_is_installed()) {
-  
-# pool of square window of size=3, stride=2
-m <- nn_avg_pool2d(3, stride=2)
-# pool of non-square window
-m <- nn_avg_pool2d(c(3, 2), stride=c(2, 1))
-input <- torch_randn(20, 16, 50, 32)
-output <- m(input)
-
-}
-
+
+

Examples

+
if (torch_is_installed()) {
+  
+# pool of square window of size=3, stride=2
+m <- nn_avg_pool2d(3, stride=2)
+# pool of non-square window
+m <- nn_avg_pool2d(c(3, 2), stride=c(2, 1))
+input <- torch_randn(20, 16, 50, 32)
+output <- m(input)
+
+}
+
+
+
-
- +
- - + + diff --git a/dev/reference/nn_avg_pool3d.html b/dev/reference/nn_avg_pool3d.html index a11494911..7db179703 100644 --- a/dev/reference/nn_avg_pool3d.html +++ b/dev/reference/nn_avg_pool3d.html @@ -1,50 +1,7 @@ - - - - - - - -Applies a 3D average pooling over an input signal composed of several input -planes. — nn_avg_pool3d • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Applies a 3D average pooling over an input signal composed of several input +planes. — nn_avg_pool3d • torch - - - - - - - - - - - - - - - - - + + -
-
- -
- -
+
@@ -208,64 +130,47 @@ can be precisely described as:

$$

-
nn_avg_pool3d(
-  kernel_size,
-  stride = NULL,
-  padding = 0,
-  ceil_mode = FALSE,
-  count_include_pad = TRUE,
-  divisor_override = NULL
-)
- -

Arguments

- - - - - - - - - - - - - - - - - - - - - - - - - - -
kernel_size

the size of the window

stride

the stride of the window. Default value is kernel_size

padding

implicit zero padding to be added on all three sides

ceil_mode

when TRUE, will use ceil instead of floor to compute the output shape

count_include_pad

when TRUE, will include the zero-padding in the averaging calculation

divisor_override

if specified, it will be used as divisor, otherwise kernel_size will be used

- -

Details

+
+
nn_avg_pool3d(
+  kernel_size,
+  stride = NULL,
+  padding = 0,
+  ceil_mode = FALSE,
+  count_include_pad = TRUE,
+  divisor_override = NULL
+)
+
+
+

Arguments

+
kernel_size
+

the size of the window

+
stride
+

the stride of the window. Default value is kernel_size

+
padding
+

implicit zero padding to be added on all three sides

+
ceil_mode
+

when TRUE, will use ceil instead of floor to compute the output shape

+
count_include_pad
+

when TRUE, will include the zero-padding in the averaging calculation

+
divisor_override
+

if specified, it will be used as divisor, otherwise kernel_size will be used

+
+
+

Details

If padding is non-zero, then the input is implicitly zero-padded on all three sides for padding number of points.

-

The parameters kernel_size, stride can either be:

    -
  • a single int -- in which case the same value is used for the depth, height and width dimension

  • +

    The parameters kernel_size, stride can either be:

    • a single int -- in which case the same value is used for the depth, height and width dimension

    • a tuple of three ints -- in which case, the first int is used for the depth dimension, the second int for the height dimension and the third int for the width dimension

    • -
    - -

    Shape

    - +
+
+

Shape

-
    -
  • Input: \((N, C, D_{in}, H_{in}, W_{in})\)

  • +
    • Input: \((N, C, D_{in}, H_{in}, W_{in})\)

    • Output: \((N, C, D_{out}, H_{out}, W_{out})\), where

    • -
    - -

    $$ +

$$ D_{out} = \left\lfloor\frac{D_{in} + 2 \times \mbox{padding}[0] - \mbox{kernel\_size}[0]}{\mbox{stride}[0]} + 1\right\rfloor $$ @@ -277,44 +182,43 @@ $$ W_{out} = \left\lfloor\frac{W_{in} + 2 \times \mbox{padding}[2] - \mbox{kernel\_size}[2]}{\mbox{stride}[2]} + 1\right\rfloor $$

+
-

Examples

-
if (torch_is_installed()) {
-  
-# pool of square window of size=3, stride=2
-m = nn_avg_pool3d(3, stride=2)
-# pool of non-square window
-m = nn_avg_pool3d(c(3, 2, 2), stride=c(2, 1, 2))
-input = torch_randn(20, 16, 50,44, 31)
-output = m(input)
-
-}
-
+
+

Examples

+
if (torch_is_installed()) {
+  
+# pool of square window of size=3, stride=2
+m = nn_avg_pool3d(3, stride=2)
+# pool of non-square window
+m = nn_avg_pool3d(c(3, 2, 2), stride=c(2, 1, 2))
+input = torch_randn(20, 16, 50,44, 31)
+output = m(input)
+
+}
+
+
+
-
- +
- - + + diff --git a/dev/reference/nn_batch_norm1d.html b/dev/reference/nn_batch_norm1d.html index eed4ae4a7..9ec7bbf4a 100644 --- a/dev/reference/nn_batch_norm1d.html +++ b/dev/reference/nn_batch_norm1d.html @@ -1,81 +1,20 @@ - - - - - - - -BatchNorm1D module — nn_batch_norm1d • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -BatchNorm1D module — nn_batch_norm1d • torch - - - - - - - - - - - - - - - - - + + -
-
- -
- -
+

Applies Batch Normalization over a 2D or 3D input (a mini-batch of 1D inputs with optional additional channel dimension) as described in the paper -Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift

+Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift

-
nn_batch_norm1d(
-  num_features,
-  eps = 1e-05,
-  momentum = 0.1,
-  affine = TRUE,
-  track_running_stats = TRUE
-)
+
+
nn_batch_norm1d(
+  num_features,
+  eps = 1e-05,
+  momentum = 0.1,
+  affine = TRUE,
+  track_running_stats = TRUE
+)
+
-

Arguments

- - - - - - - - - - - - - - - - - - - - - - -
num_features

\(C\) from an expected input of size -\((N, C, L)\) or \(L\) from input of size \((N, L)\)

eps

a value added to the denominator for numerical stability. -Default: 1e-5

momentum

the value used for the running_mean and running_var +

+

Arguments

+
num_features
+

\(C\) from an expected input of size +\((N, C, L)\) or \(L\) from input of size \((N, L)\)

+
eps
+

a value added to the denominator for numerical stability. +Default: 1e-5

+
momentum
+

the value used for the running_mean and running_var computation. Can be set to NULL for cumulative moving average -(i.e. simple average). Default: 0.1

affine

a boolean value that when set to TRUE, this module has -learnable affine parameters. Default: TRUE

track_running_stats

a boolean value that when set to TRUE, this +(i.e. simple average). Default: 0.1

+
affine
+

a boolean value that when set to TRUE, this module has +learnable affine parameters. Default: TRUE

+
track_running_stats
+

a boolean value that when set to TRUE, this module tracks the running mean and variance, and when set to FALSE, this module does not track such statistics and always uses batch -statistics in both training and eval modes. Default: TRUE

- -

Details

- +statistics in both training and eval modes. Default: TRUE

+
+
+

Details

$$ y = \frac{x - \mathrm{E}[x]}{\sqrt{\mathrm{Var}[x] + \epsilon}} * \gamma + \beta $$

@@ -250,8 +162,9 @@ of 0.1. If track_running_stats is set to FALSE, this layer then does not keep running estimates, and batch statistics are instead used during evaluation time as well.

-

Note

- +
+
+

Note

@@ -263,52 +176,49 @@ where \(\hat{x}\) is the estimated statistic and \(x_t\) is the new observed value.

Because the Batch Normalization is done over the C dimension, computing statistics on (N, L) slices, it's common terminology to call this Temporal Batch Normalization.

-

Shape

- +
+
+

Shape

-
    -
  • Input: \((N, C)\) or \((N, C, L)\)

  • +
    • Input: \((N, C)\) or \((N, C, L)\)

    • Output: \((N, C)\) or \((N, C, L)\) (same shape as input)

    • -
    - - -

    Examples

    -
    if (torch_is_installed()) {
    -# With Learnable Parameters
    -m <- nn_batch_norm1d(100)
    -# Without Learnable Parameters
    -m <- nn_batch_norm1d(100, affine = FALSE)
    -input <- torch_randn(20, 100)
    -output <- m(input) 
    -
    -}
    -
    +
+ +
+

Examples

+
if (torch_is_installed()) {
+# With Learnable Parameters
+m <- nn_batch_norm1d(100)
+# Without Learnable Parameters
+m <- nn_batch_norm1d(100, affine = FALSE)
+input <- torch_randn(20, 100)
+output <- m(input) 
+
+}
+
+
+
-
- +
- - + + diff --git a/dev/reference/nn_batch_norm2d.html b/dev/reference/nn_batch_norm2d.html index 829f889c1..2f89e9c69 100644 --- a/dev/reference/nn_batch_norm2d.html +++ b/dev/reference/nn_batch_norm2d.html @@ -1,81 +1,20 @@ - - - - - - - -BatchNorm2D — nn_batch_norm2d • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -BatchNorm2D — nn_batch_norm2d • torch - - - - - - - - - - - - - - - - - + + -
-
- -
- -
+

Applies Batch Normalization over a 4D input (a mini-batch of 2D inputs additional channel dimension) as described in the paper -Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift.

+Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift.

-
nn_batch_norm2d(
-  num_features,
-  eps = 1e-05,
-  momentum = 0.1,
-  affine = TRUE,
-  track_running_stats = TRUE
-)
+
+
nn_batch_norm2d(
+  num_features,
+  eps = 1e-05,
+  momentum = 0.1,
+  affine = TRUE,
+  track_running_stats = TRUE
+)
+
-

Arguments

- - - - - - - - - - - - - - - - - - - - - - -
num_features

\(C\) from an expected input of size -\((N, C, H, W)\)

eps

a value added to the denominator for numerical stability. -Default: 1e-5

momentum

the value used for the running_mean and running_var +

+

Arguments

+
num_features
+

\(C\) from an expected input of size +\((N, C, H, W)\)

+
eps
+

a value added to the denominator for numerical stability. +Default: 1e-5

+
momentum
+

the value used for the running_mean and running_var computation. Can be set to None for cumulative moving average -(i.e. simple average). Default: 0.1

affine

a boolean value that when set to TRUE, this module has -learnable affine parameters. Default: TRUE

track_running_stats

a boolean value that when set to TRUE, this +(i.e. simple average). Default: 0.1

+
affine
+

a boolean value that when set to TRUE, this module has +learnable affine parameters. Default: TRUE

+
track_running_stats
+

a boolean value that when set to TRUE, this module tracks the running mean and variance, and when set to FALSE, this module does not track such statistics and uses batch statistics instead in both training and eval modes if the running mean and variance are None. -Default: TRUE

- -

Details

- +Default: TRUE

+
+
+

Details

$$ y = \frac{x - \mathrm{E}[x]}{ \sqrt{\mathrm{Var}[x] + \epsilon}} * \gamma + \beta $$

@@ -252,8 +164,9 @@ of 0.1.

If track_running_stats is set to FALSE, this layer then does not keep running estimates, and batch statistics are instead used during evaluation time as well.

-

Note

- +
+
+

Note

This momentum argument is different from one used in optimizer classes and the conventional notion of momentum. Mathematically, the update rule for running statistics here is @@ -262,52 +175,49 @@ where \(\hat{x}\) is the estimated statistic and \(x_t\) is the new observed value. Because the Batch Normalization is done over the C dimension, computing statistics on (N, H, W) slices, it's common terminology to call this Spatial Batch Normalization.

-

Shape

- +
+
+

Shape

-
    -
  • Input: \((N, C, H, W)\)

  • +
    • Input: \((N, C, H, W)\)

    • Output: \((N, C, H, W)\) (same shape as input)

    • -
    - - -

    Examples

    -
    if (torch_is_installed()) {
    -# With Learnable Parameters
    -m <- nn_batch_norm2d(100)
    -# Without Learnable Parameters
    -m <- nn_batch_norm2d(100, affine=FALSE)
    -input <- torch_randn(20, 100, 35, 45)
    -output <- m(input)
    -
    -}
    -
    +
+ +
+

Examples

+
if (torch_is_installed()) {
+# With Learnable Parameters
+m <- nn_batch_norm2d(100)
+# Without Learnable Parameters
+m <- nn_batch_norm2d(100, affine=FALSE)
+input <- torch_randn(20, 100, 35, 45)
+output <- m(input)
+
+}
+
+
+
-
- +
- - + + diff --git a/dev/reference/nn_batch_norm3d.html b/dev/reference/nn_batch_norm3d.html index f54ca20a2..8c69cd580 100644 --- a/dev/reference/nn_batch_norm3d.html +++ b/dev/reference/nn_batch_norm3d.html @@ -1,81 +1,20 @@ - - - - - - - -BatchNorm3D — nn_batch_norm3d • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -BatchNorm3D — nn_batch_norm3d • torch - - - - - - - - - - - - - - - - - + + -
-
- -
- -
+

Applies Batch Normalization over a 5D input (a mini-batch of 3D inputs with additional channel dimension) as described in the paper -Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift.

+Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift.

-
nn_batch_norm3d(
-  num_features,
-  eps = 1e-05,
-  momentum = 0.1,
-  affine = TRUE,
-  track_running_stats = TRUE
-)
+
+
nn_batch_norm3d(
+  num_features,
+  eps = 1e-05,
+  momentum = 0.1,
+  affine = TRUE,
+  track_running_stats = TRUE
+)
+
-

Arguments

- - - - - - - - - - - - - - - - - - - - - - -
num_features

\(C\) from an expected input of size -\((N, C, D, H, W)\)

eps

a value added to the denominator for numerical stability. -Default: 1e-5

momentum

the value used for the running_mean and running_var +

+

Arguments

+
num_features
+

\(C\) from an expected input of size +\((N, C, D, H, W)\)

+
eps
+

a value added to the denominator for numerical stability. +Default: 1e-5

+
momentum
+

the value used for the running_mean and running_var computation. Can be set to None for cumulative moving average -(i.e. simple average). Default: 0.1

affine

a boolean value that when set to TRUE, this module has -learnable affine parameters. Default: TRUE

track_running_stats

a boolean value that when set to TRUE, this +(i.e. simple average). Default: 0.1

+
affine
+

a boolean value that when set to TRUE, this module has +learnable affine parameters. Default: TRUE

+
track_running_stats
+

a boolean value that when set to TRUE, this module tracks the running mean and variance, and when set to FALSE, this module does not track such statistics and uses batch statistics instead in both training and eval modes if the running mean and variance are None. -Default: TRUE

- -

Details

- +Default: TRUE

+
+
+

Details

$$ y = \frac{x - \mathrm{E}[x]}{ \sqrt{\mathrm{Var}[x] + \epsilon}} * \gamma + \beta $$

@@ -253,8 +165,9 @@ of 0.1.

If track_running_stats is set to FALSE, this layer then does not keep running estimates, and batch statistics are instead used during evaluation time as well.

-

Note

- +
+
+

Note

This momentum argument is different from one used in optimizer classes and the conventional notion of momentum. Mathematically, the update rule for running statistics here is: @@ -264,52 +177,49 @@ new observed value.

Because the Batch Normalization is done over the C dimension, computing statistics on (N, D, H, W) slices, it's common terminology to call this Volumetric Batch Normalization or Spatio-temporal Batch Normalization.

-

Shape

- +
+
+

Shape

-
    -
  • Input: \((N, C, D, H, W)\)

  • +
    • Input: \((N, C, D, H, W)\)

    • Output: \((N, C, D, H, W)\) (same shape as input)

    • -
    - - -

    Examples

    -
    if (torch_is_installed()) {
    -# With Learnable Parameters
    -m <- nn_batch_norm3d(100)
    -# Without Learnable Parameters
    -m <- nn_batch_norm3d(100, affine=FALSE)
    -input <- torch_randn(20, 100, 35, 45, 55)
    -output <- m(input)
    -
    -}
    -
    +
+ +
+

Examples

+
if (torch_is_installed()) {
+# With Learnable Parameters
+m <- nn_batch_norm3d(100)
+# Without Learnable Parameters
+m <- nn_batch_norm3d(100, affine=FALSE)
+input <- torch_randn(20, 100, 35, 45, 55)
+output <- m(input)
+
+}
+
+
+
-
- +
- - + + diff --git a/dev/reference/nn_bce_loss.html b/dev/reference/nn_bce_loss.html index a0a65569b..2f4686233 100644 --- a/dev/reference/nn_bce_loss.html +++ b/dev/reference/nn_bce_loss.html @@ -1,80 +1,19 @@ - - - - - - - -Binary cross entropy loss — nn_bce_loss • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Binary cross entropy loss — nn_bce_loss • torch - - - - - - - - + + -
-
- -
- -
+
@@ -191,29 +113,25 @@ between the target and the output:" /> between the target and the output:

-
nn_bce_loss(weight = NULL, reduction = "mean")
+
+
nn_bce_loss(weight = NULL, reduction = "mean")
+
-

Arguments

- - - - - - - - - - -
weight

(Tensor, optional): a manual rescaling weight given to the loss -of each batch element. If given, has to be a Tensor of size nbatch.

reduction

(string, optional): Specifies the reduction to apply to the output: +

+

Arguments

+
weight
+

(Tensor, optional): a manual rescaling weight given to the loss +of each batch element. If given, has to be a Tensor of size nbatch.

+
reduction
+

(string, optional): Specifies the reduction to apply to the output: 'none' | 'mean' | 'sum'. 'none': no reduction will be applied, 'mean': the sum of the output will be divided by the number of elements in the output, 'sum': the output will be summed. Note: size_average and reduce are in the process of being deprecated, and in the meantime, -specifying either of those two args will override reduction. Default: 'mean'

- -

Details

- +specifying either of those two args will override reduction. Default: 'mean'

+
+
+

Details

The unreduced (i.e. with reduction set to 'none') loss can be described as: $$ \ell(x, y) = L = \{l_1,\dots,l_N\}^\top, \quad @@ -244,55 +162,52 @@ and using it for things like linear regression would not be straight-forward. Our solution is that BCELoss clamps its log function outputs to be greater than or equal to -100. This way, we can always have a finite loss value and a linear backward method.

-

Shape

- +
+
+

Shape

-
    -
  • Input: \((N, *)\) where \(*\) means, any number of additional +

    • Input: \((N, *)\) where \(*\) means, any number of additional dimensions

    • Target: \((N, *)\), same shape as the input

    • Output: scalar. If reduction is 'none', then \((N, *)\), same shape as input.

    • -
    - - -

    Examples

    -
    if (torch_is_installed()) {
    -m <- nn_sigmoid()
    -loss <- nn_bce_loss()
    -input <- torch_randn(3, requires_grad=TRUE)
    -target <- torch_rand(3)
    -output <- loss(m(input), target)
    -output$backward()
    -
    -}
    -
    +
+ +
+

Examples

+
if (torch_is_installed()) {
+m <- nn_sigmoid()
+loss <- nn_bce_loss()
+input <- torch_randn(3, requires_grad=TRUE)
+target <- torch_rand(3)
+output <- loss(m(input), target)
+output$backward()
+
+}
+
+
+
-
- +
- - + + diff --git a/dev/reference/nn_bce_with_logits_loss.html b/dev/reference/nn_bce_with_logits_loss.html index d155cdac9..2f584788d 100644 --- a/dev/reference/nn_bce_with_logits_loss.html +++ b/dev/reference/nn_bce_with_logits_loss.html @@ -1,82 +1,21 @@ - - - - - - - -BCE with logits loss — nn_bce_with_logits_loss • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -BCE with logits loss — nn_bce_with_logits_loss • torch - - - - - - - - - - - - - - - - - + + -
-
- -
- -
+
@@ -195,34 +117,28 @@ followed by a BCELoss as, by combining the operations into one laye we take advantage of the log-sum-exp trick for numerical stability.

-
nn_bce_with_logits_loss(weight = NULL, reduction = "mean", pos_weight = NULL)
+
+
nn_bce_with_logits_loss(weight = NULL, reduction = "mean", pos_weight = NULL)
+
-

Arguments

- - - - - - - - - - - - - - -
weight

(Tensor, optional): a manual rescaling weight given to the loss -of each batch element. If given, has to be a Tensor of size nbatch.

reduction

(string, optional): Specifies the reduction to apply to the output: +

+

Arguments

+
weight
+

(Tensor, optional): a manual rescaling weight given to the loss +of each batch element. If given, has to be a Tensor of size nbatch.

+
reduction
+

(string, optional): Specifies the reduction to apply to the output: 'none' | 'mean' | 'sum'. 'none': no reduction will be applied, 'mean': the sum of the output will be divided by the number of elements in the output, 'sum': the output will be summed. Note: size_average and reduce are in the process of being deprecated, and in the meantime, -specifying either of those two args will override reduction. Default: 'mean'

pos_weight

(Tensor, optional): a weight of positive examples. -Must be a vector with length equal to the number of classes.

- -

Details

- +specifying either of those two args will override reduction. Default: 'mean'

+
pos_weight
+

(Tensor, optional): a weight of positive examples. +Must be a vector with length equal to the number of classes.

+
+
+

Details

The unreduced (i.e. with reduction set to 'none') loss can be described as:

$$ \ell(x, y) = L = \{l_1,\dots,l_N\}^\top, \quad @@ -256,62 +172,59 @@ classification,

For example, if a dataset contains 100 positive and 300 negative examples of a single class, then pos_weight for the class should be equal to \(\frac{300}{100}=3\). The loss would act as if the dataset contains \(3\times 100=300\) positive examples.

-

Shape

- +
+
+

Shape

-
    -
  • Input: \((N, *)\) where \(*\) means, any number of additional dimensions

  • +
    • Input: \((N, *)\) where \(*\) means, any number of additional dimensions

    • Target: \((N, *)\), same shape as the input

    • Output: scalar. If reduction is 'none', then \((N, *)\), same shape as input.

    • -
    - - -

    Examples

    -
    if (torch_is_installed()) {
    -loss <- nn_bce_with_logits_loss()
    -input <- torch_randn(3, requires_grad=TRUE)
    -target <- torch_empty(3)$random_(1, 2)
    -output <- loss(input, target)
    -output$backward()
    -
    -target <- torch_ones(10, 64, dtype=torch_float32())  # 64 classes, batch size = 10
    -output <- torch_full(c(10, 64), 1.5)  # A prediction (logit)
    -pos_weight <- torch_ones(64)  # All weights are equal to 1
    -criterion <- nn_bce_with_logits_loss(pos_weight=pos_weight)
    -criterion(output, target)  # -log(sigmoid(1.5))
    -
    -}
    -#> torch_tensor
    -#> 0.201413
    -#> [ CPUFloatType{} ]
    -
    +
+ +
+

Examples

+
if (torch_is_installed()) {
+loss <- nn_bce_with_logits_loss()
+input <- torch_randn(3, requires_grad=TRUE)
+target <- torch_empty(3)$random_(1, 2)
+output <- loss(input, target)
+output$backward()
+
+target <- torch_ones(10, 64, dtype=torch_float32())  # 64 classes, batch size = 10
+output <- torch_full(c(10, 64), 1.5)  # A prediction (logit)
+pos_weight <- torch_ones(64)  # All weights are equal to 1
+criterion <- nn_bce_with_logits_loss(pos_weight=pos_weight)
+criterion(output, target)  # -log(sigmoid(1.5))
+
+}
+#> torch_tensor
+#> 0.201413
+#> [ CPUFloatType{} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/nn_bilinear.html b/dev/reference/nn_bilinear.html index 669c6cbbf..d37251da9 100644 --- a/dev/reference/nn_bilinear.html +++ b/dev/reference/nn_bilinear.html @@ -1,80 +1,19 @@ - - - - - - - -Bilinear module — nn_bilinear • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Bilinear module — nn_bilinear • torch - - - - - - - - + + -
-
- -
- -
+
@@ -191,49 +113,38 @@ \(y = x_1^T A x_2 + b\)

-
nn_bilinear(in1_features, in2_features, out_features, bias = TRUE)
- -

Arguments

- - - - - - - - - - - - - - - - - - -
in1_features

size of each first input sample

in2_features

size of each second input sample

out_features

size of each output sample

bias

If set to FALSE, the layer will not learn an additive bias. -Default: TRUE

- -

Shape

+
+
nn_bilinear(in1_features, in2_features, out_features, bias = TRUE)
+
+
+

Arguments

+
in1_features
+

size of each first input sample

+
in2_features
+

size of each second input sample

+
out_features
+

size of each output sample

+
bias
+

If set to FALSE, the layer will not learn an additive bias. +Default: TRUE

+
+
+

Shape

-
    -
  • Input1: \((N, *, H_{in1})\) \(H_{in1}=\mbox{in1\_features}\) and +

    • Input1: \((N, *, H_{in1})\) \(H_{in1}=\mbox{in1\_features}\) and \(*\) means any number of additional dimensions. All but the last dimension of the inputs should be the same.

    • Input2: \((N, *, H_{in2})\) where \(H_{in2}=\mbox{in2\_features}\).

    • Output: \((N, *, H_{out})\) where \(H_{out}=\mbox{out\_features}\) and all but the last dimension are the same shape as the input.

    • -
    - -

    Attributes

    - +
+
+

Attributes

-
    -
  • weight: the learnable weights of the module of shape +

    • weight: the learnable weights of the module of shape \((\mbox{out\_features}, \mbox{in1\_features}, \mbox{in2\_features})\). The values are initialized from \(\mathcal{U}(-\sqrt{k}, \sqrt{k})\), where \(k = \frac{1}{\mbox{in1\_features}}\)

    • @@ -241,45 +152,42 @@ The values are initialized from \(\mathcal{U}(-\sqrt{k}, \sqrt{k})\), where If bias is TRUE, the values are initialized from \(\mathcal{U}(-\sqrt{k}, \sqrt{k})\), where \(k = \frac{1}{\mbox{in1\_features}}\)

      -
    - - -

    Examples

    -
    if (torch_is_installed()) {
    -m <- nn_bilinear(20, 30, 50)
    -input1 <- torch_randn(128, 20)
    -input2 <- torch_randn(128, 30)
    -output = m(input1, input2)
    -print(output$size()) 
    -
    -}
    -#> [1] 128  50
    -
    +
+ +
+

Examples

+
if (torch_is_installed()) {
+m <- nn_bilinear(20, 30, 50)
+input1 <- torch_randn(128, 20)
+input2 <- torch_randn(128, 30)
+output = m(input1, input2)
+print(output$size()) 
+
+}
+#> [1] 128  50
+
+
+
-
- +
- - + + diff --git a/dev/reference/nn_buffer.html b/dev/reference/nn_buffer.html index 6dd953f4e..496a81ad9 100644 --- a/dev/reference/nn_buffer.html +++ b/dev/reference/nn_buffer.html @@ -1,79 +1,18 @@ - - - - - - - -Creates a nn_buffer — nn_buffer • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Creates a nn_buffer — nn_buffer • torch - - - - - - + + - - -
-
- -
- -
+
@@ -189,47 +111,39 @@

Indicates that a tensor is a buffer in a nn_module

-
nn_buffer(x, persistent = TRUE)
- -

Arguments

- - - - - - - - - - -
x

the tensor that will be converted to nn_buffer

persistent

whether the buffer should be persistent or not.

+
+
nn_buffer(x, persistent = TRUE)
+
+
+

Arguments

+
x
+

the tensor that will be converted to nn_buffer

+
persistent
+

whether the buffer should be persistent or not.

+
+
-
- +
- - + + diff --git a/dev/reference/nn_celu.html b/dev/reference/nn_celu.html index e5812b9cd..dea2a9ab3 100644 --- a/dev/reference/nn_celu.html +++ b/dev/reference/nn_celu.html @@ -1,79 +1,18 @@ - - - - - - - -CELU module — nn_celu • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -CELU module — nn_celu • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,72 +111,65 @@

Applies the element-wise function:

-
nn_celu(alpha = 1, inplace = FALSE)
- -

Arguments

- - - - - - - - - - -
alpha

the \(\alpha\) value for the CELU formulation. Default: 1.0

inplace

can optionally do the operation in-place. Default: FALSE

- -

Details

+
+
nn_celu(alpha = 1, inplace = FALSE)
+
+
+

Arguments

+
alpha
+

the \(\alpha\) value for the CELU formulation. Default: 1.0

+
inplace
+

can optionally do the operation in-place. Default: FALSE

+
+
+

Details

$$ \mbox{CELU}(x) = \max(0,x) + \min(0, \alpha * (\exp(x/\alpha) - 1)) $$

More details can be found in the paper -Continuously Differentiable Exponential Linear Units.

-

Shape

- +Continuously Differentiable Exponential Linear Units.

+
+
+

Shape

-
    -
  • Input: \((N, *)\) where * means, any number of additional +

    • Input: \((N, *)\) where * means, any number of additional dimensions

    • Output: \((N, *)\), same shape as the input

    • -
    - - -

    Examples

    -
    if (torch_is_installed()) {
    -m <- nn_celu()
    -input <- torch_randn(2)
    -output <- m(input)
    -
    -}
    -
    +
+ +
+

Examples

+
if (torch_is_installed()) {
+m <- nn_celu()
+input <- torch_randn(2)
+output <- m(input)
+
+}
+
+
+
-
- +
- - + + diff --git a/dev/reference/nn_contrib_sparsemax.html b/dev/reference/nn_contrib_sparsemax.html index 00ab249fb..d40d67ec0 100644 --- a/dev/reference/nn_contrib_sparsemax.html +++ b/dev/reference/nn_contrib_sparsemax.html @@ -1,79 +1,18 @@ - - - - - - - -Sparsemax activation — nn_contrib_sparsemax • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Sparsemax activation — nn_contrib_sparsemax • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,48 +111,43 @@

Sparsemax activation module.

-
nn_contrib_sparsemax(dim = -1)
- -

Arguments

- - - - - - -
dim

The dimension over which to apply the sparsemax function. (-1)

- -

Details

+
+
nn_contrib_sparsemax(dim = -1)
+
+
+

Arguments

+
dim
+

The dimension over which to apply the sparsemax function. (-1)

+
+
+
-
- +
- - + + diff --git a/dev/reference/nn_conv1d.html b/dev/reference/nn_conv1d.html index 59ff0be60..c5a74fff9 100644 --- a/dev/reference/nn_conv1d.html +++ b/dev/reference/nn_conv1d.html @@ -1,83 +1,22 @@ - - - - - - - -Conv1D module — nn_conv1d • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Conv1D module — nn_conv1d • torch - - - - - - - - - - - - - - - - - + + -
-
- -
- -
+
@@ -197,87 +119,67 @@ In the simplest case, the output value of the layer with input size precisely described as:

-
nn_conv1d(
-  in_channels,
-  out_channels,
-  kernel_size,
-  stride = 1,
-  padding = 0,
-  dilation = 1,
-  groups = 1,
-  bias = TRUE,
-  padding_mode = "zeros"
-)
- -

Arguments

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
in_channels

(int): Number of channels in the input image

out_channels

(int): Number of channels produced by the convolution

kernel_size

(int or tuple): Size of the convolving kernel

stride

(int or tuple, optional): Stride of the convolution. Default: 1

padding

(int, tuple or str, optional) – Padding added to both sides of -the input. Default: 0

dilation

(int or tuple, optional): Spacing between kernel -elements. Default: 1

groups

(int, optional): Number of blocked connections from input -channels to output channels. Default: 1

bias

(bool, optional): If TRUE, adds a learnable bias to the -output. Default: TRUE

padding_mode

(string, optional): 'zeros', 'reflect', -'replicate' or 'circular'. Default: 'zeros'

- -

Details

+
+
nn_conv1d(
+  in_channels,
+  out_channels,
+  kernel_size,
+  stride = 1,
+  padding = 0,
+  dilation = 1,
+  groups = 1,
+  bias = TRUE,
+  padding_mode = "zeros"
+)
+
+
+

Arguments

+
in_channels
+

(int): Number of channels in the input image

+
out_channels
+

(int): Number of channels produced by the convolution

+
kernel_size
+

(int or tuple): Size of the convolving kernel

+
stride
+

(int or tuple, optional): Stride of the convolution. Default: 1

+
padding
+

(int, tuple or str, optional) – Padding added to both sides of +the input. Default: 0

+
dilation
+

(int or tuple, optional): Spacing between kernel +elements. Default: 1

+
groups
+

(int, optional): Number of blocked connections from input +channels to output channels. Default: 1

+
bias
+

(bool, optional): If TRUE, adds a learnable bias to the +output. Default: TRUE

+
padding_mode
+

(string, optional): 'zeros', 'reflect', +'replicate' or 'circular'. Default: 'zeros'

+
+
+

Details

$$ \mbox{out}(N_i, C_{\mbox{out}_j}) = \mbox{bias}(C_{\mbox{out}_j}) + \sum_{k = 0}^{C_{in} - 1} \mbox{weight}(C_{\mbox{out}_j}, k) \star \mbox{input}(N_i, k) $$

where \(\star\) is the valid -cross-correlation operator, +cross-correlation operator, \(N\) is a batch size, \(C\) denotes a number of channels, -\(L\) is a length of signal sequence.

    -
  • stride controls the stride for the cross-correlation, a single +\(L\) is a length of signal sequence.

    • stride controls the stride for the cross-correlation, a single number or a one-element tuple.

    • padding controls the amount of implicit zero-paddings on both sides for padding number of points.

    • dilation controls the spacing between the kernel points; also known as the à trous algorithm. It is harder to describe, but this -link +link has a nice visualization of what dilation does.

    • groups controls the connections between inputs and outputs. in_channels and out_channels must both be divisible by -groups. For example,

        -
      • At groups=1, all inputs are convolved to all outputs.

      • +groups. For example,

        • At groups=1, all inputs are convolved to all outputs.

        • At groups=2, the operation becomes equivalent to having two conv layers side by side, each seeing half the input channels, and producing half the output channels, and both subsequently @@ -286,10 +188,9 @@ concatenated.

        • its own set of filters, of size \(\left\lfloor\frac{out\_channels}{in\_channels}\right\rfloor\).

        -
      - -

      Note

      - +
+
+

Note

@@ -303,25 +204,23 @@ literature as depthwise convolution. In other words, for an input of size \((N, C_{in}, L_{in})\), a depthwise convolution with a depthwise multiplier K, can be constructed by arguments \((C_{\mbox{in}}=C_{in}, C_{\mbox{out}}=C_{in} \times K, ..., \mbox{groups}=C_{in})\).

-

Shape

- +
+
+

Shape

-
    -
  • Input: \((N, C_{in}, L_{in})\)

  • +
    • Input: \((N, C_{in}, L_{in})\)

    • Output: \((N, C_{out}, L_{out})\) where

    • -
    - -

    $$ +

$$ L_{out} = \left\lfloor\frac{L_{in} + 2 \times \mbox{padding} - \mbox{dilation} \times (\mbox{kernel\_size} - 1) - 1}{\mbox{stride}} + 1\right\rfloor $$

-

Attributes

- +
+
+

Attributes

-
    -
  • weight (Tensor): the learnable weights of the module of shape +

    • weight (Tensor): the learnable weights of the module of shape \((\mbox{out\_channels}, \frac{\mbox{in\_channels}}{\mbox{groups}}, \mbox{kernel\_size})\). The values of these weights are sampled from \(\mathcal{U}(-\sqrt{k}, \sqrt{k})\) where @@ -330,42 +229,39 @@ The values of these weights are sampled from (out_channels). If bias is TRUE, then the values of these weights are sampled from \(\mathcal{U}(-\sqrt{k}, \sqrt{k})\) where \(k = \frac{groups}{C_{\mbox{in}} * \mbox{kernel\_size}}\)

    • -
    - - -

    Examples

    -
    if (torch_is_installed()) {
    -m <- nn_conv1d(16, 33, 3, stride=2)
    -input <- torch_randn(20, 16, 50)
    -output <- m(input)
    -
    -}
    -
    +
+ +
+

Examples

+
if (torch_is_installed()) {
+m <- nn_conv1d(16, 33, 3, stride=2)
+input <- torch_randn(20, 16, 50)
+output <- m(input)
+
+}
+
+
+
-
- +
- - + + diff --git a/dev/reference/nn_conv2d.html b/dev/reference/nn_conv2d.html index 1ca89d71c..60b80b363 100644 --- a/dev/reference/nn_conv2d.html +++ b/dev/reference/nn_conv2d.html @@ -1,80 +1,19 @@ - - - - - - - -Conv2D module — nn_conv2d • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Conv2D module — nn_conv2d • torch - - - - - - - - + + -
-
- -
- -
+
@@ -191,67 +113,49 @@ planes." /> planes.

-
nn_conv2d(
-  in_channels,
-  out_channels,
-  kernel_size,
-  stride = 1,
-  padding = 0,
-  dilation = 1,
-  groups = 1,
-  bias = TRUE,
-  padding_mode = "zeros"
-)
+
+
nn_conv2d(
+  in_channels,
+  out_channels,
+  kernel_size,
+  stride = 1,
+  padding = 0,
+  dilation = 1,
+  groups = 1,
+  bias = TRUE,
+  padding_mode = "zeros"
+)
+
-

Arguments

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
in_channels

(int): Number of channels in the input image

out_channels

(int): Number of channels produced by the convolution

kernel_size

(int or tuple): Size of the convolving kernel

stride

(int or tuple, optional): Stride of the convolution. Default: 1

padding

(int or tuple or string, optional): Zero-padding added to both sides of +

+

Arguments

+
in_channels
+

(int): Number of channels in the input image

+
out_channels
+

(int): Number of channels produced by the convolution

+
kernel_size
+

(int or tuple): Size of the convolving kernel

+
stride
+

(int or tuple, optional): Stride of the convolution. Default: 1

+
padding
+

(int or tuple or string, optional): Zero-padding added to both sides of the input. controls the amount of padding applied to the input. It can be either a string 'valid', 'same' or a tuple of ints giving the -amount of implicit padding applied on both sides. Default: 0

dilation

(int or tuple, optional): Spacing between kernel elements. Default: 1

groups

(int, optional): Number of blocked connections from input -channels to output channels. Default: 1

bias

(bool, optional): If TRUE, adds a learnable bias to the -output. Default: TRUE

padding_mode

(string, optional): 'zeros', 'reflect', -'replicate' or 'circular'. Default: 'zeros'

- -

Details

- +amount of implicit padding applied on both sides. Default: 0

+
dilation
+

(int or tuple, optional): Spacing between kernel elements. Default: 1

+
groups
+

(int, optional): Number of blocked connections from input +channels to output channels. Default: 1

+
bias
+

(bool, optional): If TRUE, adds a learnable bias to the +output. Default: TRUE

+
padding_mode
+

(string, optional): 'zeros', 'reflect', +'replicate' or 'circular'. Default: 'zeros'

+
+
+

Details

In the simplest case, the output value of the layer with input size \((N, C_{\mbox{in}}, H, W)\) and output \((N, C_{\mbox{out}}, H_{\mbox{out}}, W_{\mbox{out}})\) can be precisely described as:

@@ -262,8 +166,7 @@ $$

where \(\star\) is the valid 2D cross-correlation operator, \(N\) is a batch size, \(C\) denotes a number of channels, \(H\) is a height of input planes in pixels, and \(W\) is -width in pixels.

    -
  • stride controls the stride for the cross-correlation, a single +width in pixels.

    • stride controls the stride for the cross-correlation, a single number or a tuple.

    • padding controls the amount of implicit zero-paddings on both sides for padding number of points for each dimension.

    • @@ -272,8 +175,7 @@ known as the à trous algorithm. It is harder to describe, but this linkdilation does.

    • groups controls the connections between inputs and outputs. in_channels and out_channels must both be divisible by -groups. For example,

        -
      • At groups=1, all inputs are convolved to all outputs.

      • +groups. For example,

        • At groups=1, all inputs are convolved to all outputs.

        • At groups=2, the operation becomes equivalent to having two conv layers side by side, each seeing half the input channels, and producing half the output channels, and both subsequently @@ -282,17 +184,13 @@ concatenated.

        • its own set of filters, of size: \(\left\lfloor\frac{out\_channels}{in\_channels}\right\rfloor\).

        -
      - -

      The parameters kernel_size, stride, padding, dilation can either be:

        -
      • a single int -- in which case the same value is used for the height and +

      The parameters kernel_size, stride, padding, dilation can either be:

      • a single int -- in which case the same value is used for the height and width dimension

      • a tuple of two ints -- in which case, the first int is used for the height dimension, and the second int for the width dimension

      • -
      - -

      Note

      - +
+
+

Note

@@ -310,12 +208,12 @@ a depthwise convolution with a depthwise multiplier K, can be const may select a nondeterministic algorithm to increase performance. If this is undesirable, you can try to make the operation deterministic (potentially at a performance cost) by setting backends_cudnn_deterministic = TRUE.

-

Shape

- +
+
+

Shape

-
    -
  • Input: \((N, C_{in}, H_{in}, W_{in})\)

  • +
    • Input: \((N, C_{in}, H_{in}, W_{in})\)

    • Output: \((N, C_{out}, H_{out}, W_{out})\) where $$ H_{out} = \left\lfloor\frac{H_{in} + 2 \times \mbox{padding}[0] - \mbox{dilation}[0] @@ -325,14 +223,12 @@ $$ W_{out} = \left\lfloor\frac{W_{in} + 2 \times \mbox{padding}[1] - \mbox{dilation}[1] \times (\mbox{kernel\_size}[1] - 1) - 1}{\mbox{stride}[1]} + 1\right\rfloor $$

    • -
    - -

    Attributes

    - +
+
+

Attributes

-
    -
  • weight (Tensor): the learnable weights of the module of shape +

    • weight (Tensor): the learnable weights of the module of shape \((\mbox{out\_channels}, \frac{\mbox{in\_channels}}{\mbox{groups}}\), \(\mbox{kernel\_size[0]}, \mbox{kernel\_size[1]})\). The values of these weights are sampled from @@ -343,48 +239,45 @@ The values of these weights are sampled from then the values of these weights are sampled from \(\mathcal{U}(-\sqrt{k}, \sqrt{k})\) where \(k = \frac{groups}{C_{\mbox{in}} * \prod_{i=0}^{1}\mbox{kernel\_size}[i]}\)

    • -
    - - -

    Examples

    -
    if (torch_is_installed()) {
    -
    -# With square kernels and equal stride
    -m <- nn_conv2d(16, 33, 3, stride = 2)
    -# non-square kernels and unequal stride and with padding
    -m <- nn_conv2d(16, 33, c(3, 5), stride=c(2, 1), padding=c(4, 2))
    -# non-square kernels and unequal stride and with padding and dilation
    -m <- nn_conv2d(16, 33, c(3, 5), stride=c(2, 1), padding=c(4, 2), dilation=c(3, 1))
    -input <- torch_randn(20, 16, 50, 100)
    -output <- m(input)  
    -
    -}
    -
    +
+ +
+

Examples

+
if (torch_is_installed()) {
+
+# With square kernels and equal stride
+m <- nn_conv2d(16, 33, 3, stride = 2)
+# non-square kernels and unequal stride and with padding
+m <- nn_conv2d(16, 33, c(3, 5), stride=c(2, 1), padding=c(4, 2))
+# non-square kernels and unequal stride and with padding and dilation
+m <- nn_conv2d(16, 33, c(3, 5), stride=c(2, 1), padding=c(4, 2), dilation=c(3, 1))
+input <- torch_randn(20, 16, 50, 100)
+output <- m(input)  
+
+}
+
+
+
-
- +
- - + + diff --git a/dev/reference/nn_conv3d.html b/dev/reference/nn_conv3d.html index 6d1b8f903..387af6bd1 100644 --- a/dev/reference/nn_conv3d.html +++ b/dev/reference/nn_conv3d.html @@ -1,82 +1,21 @@ - - - - - - - -Conv3D module — nn_conv3d • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Conv3D module — nn_conv3d • torch - - - - - - - - - - - - - - - - - + + -
-
- -
- -
+
@@ -195,67 +117,48 @@ In the simplest case, the output value of the layer with input size \((N, C_{in} and output \((N, C_{out}, D_{out}, H_{out}, W_{out})\) can be precisely described as:

-
nn_conv3d(
-  in_channels,
-  out_channels,
-  kernel_size,
-  stride = 1,
-  padding = 0,
-  dilation = 1,
-  groups = 1,
-  bias = TRUE,
-  padding_mode = "zeros"
-)
- -

Arguments

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
in_channels

(int): Number of channels in the input image

out_channels

(int): Number of channels produced by the convolution

kernel_size

(int or tuple): Size of the convolving kernel

stride

(int or tuple, optional): Stride of the convolution. Default: 1

padding

(int, tuple or str, optional): padding added to all six sides of the input. Default: 0

dilation

(int or tuple, optional): Spacing between kernel elements. Default: 1

groups

(int, optional): Number of blocked connections from input channels to output channels. Default: 1

bias

(bool, optional): If TRUE, adds a learnable bias to the output. Default: TRUE

padding_mode

(string, optional): 'zeros', 'reflect', 'replicate' or 'circular'. Default: 'zeros'

- -

Details

+
+
nn_conv3d(
+  in_channels,
+  out_channels,
+  kernel_size,
+  stride = 1,
+  padding = 0,
+  dilation = 1,
+  groups = 1,
+  bias = TRUE,
+  padding_mode = "zeros"
+)
+
+
+

Arguments

+
in_channels
+

(int): Number of channels in the input image

+
out_channels
+

(int): Number of channels produced by the convolution

+
kernel_size
+

(int or tuple): Size of the convolving kernel

+
stride
+

(int or tuple, optional): Stride of the convolution. Default: 1

+
padding
+

(int, tuple or str, optional): padding added to all six sides of the input. Default: 0

+
dilation
+

(int or tuple, optional): Spacing between kernel elements. Default: 1

+
groups
+

(int, optional): Number of blocked connections from input channels to output channels. Default: 1

+
bias
+

(bool, optional): If TRUE, adds a learnable bias to the output. Default: TRUE

+
padding_mode
+

(string, optional): 'zeros', 'reflect', 'replicate' or 'circular'. Default: 'zeros'

+
+
+

Details

$$ out(N_i, C_{out_j}) = bias(C_{out_j}) + \sum_{k = 0}^{C_{in} - 1} weight(C_{out_j}, k) \star input(N_i, k) $$

-

where \(\star\) is the valid 3D cross-correlation operator

    -
  • stride controls the stride for the cross-correlation.

  • +

    where \(\star\) is the valid 3D cross-correlation operator

    • stride controls the stride for the cross-correlation.

    • padding controls the amount of implicit zero-paddings on both sides for padding number of points for each dimension.

    • dilation controls the spacing between the kernel points; also known as the à trous algorithm. @@ -271,16 +174,12 @@ concatenated.

    • At groups= in_channels, each input channel is convolved with its own set of filters, of size \(\left\lfloor\frac{out\_channels}{in\_channels}\right\rfloor\).

    • -
    - -

    The parameters kernel_size, stride, padding, dilation can either be:

      -
    • a single int -- in which case the same value is used for the depth, height and width dimension

    • +

    The parameters kernel_size, stride, padding, dilation can either be:

    • a single int -- in which case the same value is used for the depth, height and width dimension

    • a tuple of three ints -- in which case, the first int is used for the depth dimension, the second int for the height dimension and the third int for the width dimension

    • -
    - -

    Note

    - +
+
+

Note

Depending of the size of your kernel, several (of the last) columns of the input might be lost, because it is a valid cross-correlation, and not a full cross-correlation. @@ -296,12 +195,12 @@ may select a nondeterministic algorithm to increase performance. If this is undesirable, you can try to make the operation deterministic (potentially at a performance cost) by setting torch.backends.cudnn.deterministic = TRUE. Please see the notes on :doc:/notes/randomness for background.

-

Shape

- +
+
+

Shape

-
    -
  • Input: \((N, C_{in}, D_{in}, H_{in}, W_{in})\)

  • +
    • Input: \((N, C_{in}, D_{in}, H_{in}, W_{in})\)

    • Output: \((N, C_{out}, D_{out}, H_{out}, W_{out})\) where $$ D_{out} = \left\lfloor\frac{D_{in} + 2 \times \mbox{padding}[0] - \mbox{dilation}[0] @@ -315,14 +214,12 @@ $$ W_{out} = \left\lfloor\frac{W_{in} + 2 \times \mbox{padding}[2] - \mbox{dilation}[2] \times (\mbox{kernel\_size}[2] - 1) - 1}{\mbox{stride}[2]} + 1\right\rfloor $$

    • -
    - -

    Attributes

    - +
+
+

Attributes

-
    -
  • weight (Tensor): the learnable weights of the module of shape +

    • weight (Tensor): the learnable weights of the module of shape \((\mbox{out\_channels}, \frac{\mbox{in\_channels}}{\mbox{groups}},\) \(\mbox{kernel\_size[0]}, \mbox{kernel\_size[1]}, \mbox{kernel\_size[2]})\). The values of these weights are sampled from @@ -332,45 +229,42 @@ The values of these weights are sampled from then the values of these weights are sampled from \(\mathcal{U}(-\sqrt{k}, \sqrt{k})\) where \(k = \frac{groups}{C_{\mbox{in}} * \prod_{i=0}^{2}\mbox{kernel\_size}[i]}\)

    • -
    - - -

    Examples

    -
    if (torch_is_installed()) {
    -# With square kernels and equal stride
    -m <- nn_conv3d(16, 33, 3, stride=2)
    -# non-square kernels and unequal stride and with padding
    -m <- nn_conv3d(16, 33, c(3, 5, 2), stride=c(2, 1, 1), padding=c(4, 2, 0))
    -input <- torch_randn(20, 16, 10, 50, 100)
    -output <- m(input)
    -
    -}
    -
    +
+ +
+

Examples

+
if (torch_is_installed()) {
+# With square kernels and equal stride
+m <- nn_conv3d(16, 33, 3, stride=2)
+# non-square kernels and unequal stride and with padding
+m <- nn_conv3d(16, 33, c(3, 5, 2), stride=c(2, 1, 1), padding=c(4, 2, 0))
+input <- torch_randn(20, 16, 10, 50, 100)
+output <- m(input)
+
+}
+
+
+
-
- +
- - + + diff --git a/dev/reference/nn_conv_transpose1d.html b/dev/reference/nn_conv_transpose1d.html index 0d3350b80..48da6fbad 100644 --- a/dev/reference/nn_conv_transpose1d.html +++ b/dev/reference/nn_conv_transpose1d.html @@ -1,80 +1,19 @@ - - - - - - - -ConvTranspose1D — nn_conv_transpose1d • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -ConvTranspose1D — nn_conv_transpose1d • torch - - - - - - - - + + -
-
- -
- -
+
@@ -191,85 +113,63 @@ composed of several input planes." /> composed of several input planes.

-
nn_conv_transpose1d(
-  in_channels,
-  out_channels,
-  kernel_size,
-  stride = 1,
-  padding = 0,
-  output_padding = 0,
-  groups = 1,
-  bias = TRUE,
-  dilation = 1,
-  padding_mode = "zeros"
-)
- -

Arguments

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
in_channels

(int): Number of channels in the input image

out_channels

(int): Number of channels produced by the convolution

kernel_size

(int or tuple): Size of the convolving kernel

stride

(int or tuple, optional): Stride of the convolution. Default: 1

padding

(int or tuple, optional): dilation * (kernel_size - 1) - padding zero-padding -will be added to both sides of the input. Default: 0

output_padding

(int or tuple, optional): Additional size added to one side -of the output shape. Default: 0

groups

(int, optional): Number of blocked connections from input channels to output channels. Default: 1

bias

(bool, optional): If True, adds a learnable bias to the output. Default: TRUE

dilation

(int or tuple, optional): Spacing between kernel elements. Default: 1

padding_mode

(string, optional): 'zeros', 'reflect', -'replicate' or 'circular'. Default: 'zeros'

- -

Details

+
+
nn_conv_transpose1d(
+  in_channels,
+  out_channels,
+  kernel_size,
+  stride = 1,
+  padding = 0,
+  output_padding = 0,
+  groups = 1,
+  bias = TRUE,
+  dilation = 1,
+  padding_mode = "zeros"
+)
+
+
+

Arguments

+
in_channels
+

(int): Number of channels in the input image

+
out_channels
+

(int): Number of channels produced by the convolution

+
kernel_size
+

(int or tuple): Size of the convolving kernel

+
stride
+

(int or tuple, optional): Stride of the convolution. Default: 1

+
padding
+

(int or tuple, optional): dilation * (kernel_size - 1) - padding zero-padding +will be added to both sides of the input. Default: 0

+
output_padding
+

(int or tuple, optional): Additional size added to one side +of the output shape. Default: 0

+
groups
+

(int, optional): Number of blocked connections from input channels to output channels. Default: 1

+
bias
+

(bool, optional): If True, adds a learnable bias to the output. Default: TRUE

+
dilation
+

(int or tuple, optional): Spacing between kernel elements. Default: 1

+
padding_mode
+

(string, optional): 'zeros', 'reflect', +'replicate' or 'circular'. Default: 'zeros'

+
+
+

Details

This module can be seen as the gradient of Conv1d with respect to its input. It is also known as a fractionally-strided convolution or -a deconvolution (although it is not an actual deconvolution operation).

    -
  • stride controls the stride for the cross-correlation.

  • +a deconvolution (although it is not an actual deconvolution operation).

    • stride controls the stride for the cross-correlation.

    • padding controls the amount of implicit zero-paddings on both sides for dilation * (kernel_size - 1) - padding number of points. See note below for details.

    • output_padding controls the additional size added to one side of the output shape. See note below for details.

    • dilation controls the spacing between the kernel points; also known as the -à trous algorithm. It is harder to describe, but this link +à trous algorithm. It is harder to describe, but this link has a nice visualization of what dilation does.

    • groups controls the connections between inputs and outputs. in_channels and out_channels must both be divisible by -groups. For example,

        -
      • At groups=1, all inputs are convolved to all outputs.

      • +groups. For example,

        • At groups=1, all inputs are convolved to all outputs.

        • At groups=2, the operation becomes equivalent to having two conv layers side by side, each seeing half the input channels, and producing half the output channels, and both subsequently @@ -278,10 +178,9 @@ concatenated.

        • its own set of filters (of size \(\left\lfloor\frac{out\_channels}{in\_channels}\right\rfloor\)).

        -
      - -

      Note

      - +
+
+

Note

Depending of the size of your kernel, several (of the last) columns of the input might be lost, because it is a valid cross-correlation, and not a full cross-correlation. @@ -300,25 +199,23 @@ not actually add zero-padding to output.

may select a nondeterministic algorithm to increase performance. If this is undesirable, you can try to make the operation deterministic (potentially at a performance cost) by setting torch.backends.cudnn.deterministic = TRUE.

-

Shape

- +
+
+

Shape

-
    -
  • Input: \((N, C_{in}, L_{in})\)

  • +
    • Input: \((N, C_{in}, L_{in})\)

    • Output: \((N, C_{out}, L_{out})\) where $$ L_{out} = (L_{in} - 1) \times \mbox{stride} - 2 \times \mbox{padding} + \mbox{dilation} \times (\mbox{kernel\_size} - 1) + \mbox{output\_padding} + 1 $$

    • -
    - -

    Attributes

    - +
+
+

Attributes

-
    -
  • weight (Tensor): the learnable weights of the module of shape +

    • weight (Tensor): the learnable weights of the module of shape \((\mbox{in\_channels}, \frac{\mbox{out\_channels}}{\mbox{groups}},\) \(\mbox{kernel\_size})\). The values of these weights are sampled from @@ -328,42 +225,39 @@ The values of these weights are sampled from If bias is TRUE, then the values of these weights are sampled from \(\mathcal{U}(-\sqrt{k}, \sqrt{k})\) where \(k = \frac{groups}{C_{\mbox{out}} * \mbox{kernel\_size}}\)

    • -
    - - -

    Examples

    -
    if (torch_is_installed()) {
    -m <- nn_conv_transpose1d(32, 16, 2)
    -input <- torch_randn(10, 32, 2)
    -output <- m(input)
    -
    -}
    -
    +
+ +
+

Examples

+
if (torch_is_installed()) {
+m <- nn_conv_transpose1d(32, 16, 2)
+input <- torch_randn(10, 32, 2)
+output <- m(input)
+
+}
+
+
+
-
- +
- - + + diff --git a/dev/reference/nn_conv_transpose2d.html b/dev/reference/nn_conv_transpose2d.html index 355cb3c89..37e0adc41 100644 --- a/dev/reference/nn_conv_transpose2d.html +++ b/dev/reference/nn_conv_transpose2d.html @@ -1,80 +1,19 @@ - - - - - - - -ConvTranpose2D module — nn_conv_transpose2d • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -ConvTranpose2D module — nn_conv_transpose2d • torch - - - - - - - - + + -
-
- -
- -
+
@@ -191,73 +113,52 @@ composed of several input planes." /> composed of several input planes.

-
nn_conv_transpose2d(
-  in_channels,
-  out_channels,
-  kernel_size,
-  stride = 1,
-  padding = 0,
-  output_padding = 0,
-  groups = 1,
-  bias = TRUE,
-  dilation = 1,
-  padding_mode = "zeros"
-)
- -

Arguments

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
in_channels

(int): Number of channels in the input image

out_channels

(int): Number of channels produced by the convolution

kernel_size

(int or tuple): Size of the convolving kernel

stride

(int or tuple, optional): Stride of the convolution. Default: 1

padding

(int or tuple, optional): dilation * (kernel_size - 1) - padding zero-padding -will be added to both sides of each dimension in the input. Default: 0

output_padding

(int or tuple, optional): Additional size added to one side -of each dimension in the output shape. Default: 0

groups

(int, optional): Number of blocked connections from input channels to output channels. Default: 1

bias

(bool, optional): If True, adds a learnable bias to the output. Default: True

dilation

(int or tuple, optional): Spacing between kernel elements. Default: 1

padding_mode

(string, optional): 'zeros', 'reflect', -'replicate' or 'circular'. Default: 'zeros'

- -

Details

+
+
nn_conv_transpose2d(
+  in_channels,
+  out_channels,
+  kernel_size,
+  stride = 1,
+  padding = 0,
+  output_padding = 0,
+  groups = 1,
+  bias = TRUE,
+  dilation = 1,
+  padding_mode = "zeros"
+)
+
+
+

Arguments

+
in_channels
+

(int): Number of channels in the input image

+
out_channels
+

(int): Number of channels produced by the convolution

+
kernel_size
+

(int or tuple): Size of the convolving kernel

+
stride
+

(int or tuple, optional): Stride of the convolution. Default: 1

+
padding
+

(int or tuple, optional): dilation * (kernel_size - 1) - padding zero-padding +will be added to both sides of each dimension in the input. Default: 0

+
output_padding
+

(int or tuple, optional): Additional size added to one side +of each dimension in the output shape. Default: 0

+
groups
+

(int, optional): Number of blocked connections from input channels to output channels. Default: 1

+
bias
+

(bool, optional): If True, adds a learnable bias to the output. Default: True

+
dilation
+

(int or tuple, optional): Spacing between kernel elements. Default: 1

+
padding_mode
+

(string, optional): 'zeros', 'reflect', +'replicate' or 'circular'. Default: 'zeros'

+
+
+

Details

This module can be seen as the gradient of Conv2d with respect to its input. It is also known as a fractionally-strided convolution or -a deconvolution (although it is not an actual deconvolution operation).

    -
  • stride controls the stride for the cross-correlation.

  • +a deconvolution (although it is not an actual deconvolution operation).

    • stride controls the stride for the cross-correlation.

    • padding controls the amount of implicit zero-paddings on both sides for dilation * (kernel_size - 1) - padding number of points. See note below for details.

    • @@ -267,8 +168,7 @@ of the output shape. See note below for details.

      It is harder to describe, but this link_ has a nice visualization of what dilation does.

    • groups controls the connections between inputs and outputs. in_channels and out_channels must both be divisible by -groups. For example,

        -
      • At groups=1, all inputs are convolved to all outputs.

      • +groups. For example,

        • At groups=1, all inputs are convolved to all outputs.

        • At groups=2, the operation becomes equivalent to having two conv layers side by side, each seeing half the input channels, and producing half the output channels, and both subsequently @@ -277,26 +177,22 @@ concatenated.

        • its own set of filters (of size \(\left\lfloor\frac{out\_channels}{in\_channels}\right\rfloor\)).

        -
      - -

      The parameters kernel_size, stride, padding, output_padding -can either be:

        -
      • a single int -- in which case the same value is used for the height and width dimensions

      • +

      The parameters kernel_size, stride, padding, output_padding +can either be:

      • a single int -- in which case the same value is used for the height and width dimensions

      • a tuple of two ints -- in which case, the first int is used for the height dimension, and the second int for the width dimension

      • -
      - -

      Note

      - +
+
+

Note

Depending of the size of your kernel, several (of the last) columns of the input might be lost, because it is a valid cross-correlation_, and not a full cross-correlation. It is up to the user to add proper padding.

The padding argument effectively adds dilation * (kernel_size - 1) - padding amount of zero padding to both sizes of the input. This is set so that -when a nn_conv2d and a nn_conv_transpose2d are initialized with same +when a nn_conv2d and a nn_conv_transpose2d are initialized with same parameters, they are inverses of each other in regard to the input and output shapes. However, when stride > 1, -nn_conv2d maps multiple input shapes to the same output +nn_conv2d maps multiple input shapes to the same output shape. output_padding is provided to resolve this ambiguity by effectively increasing the calculated output shape on one side. Note that output_padding is only used to find output shape, but does @@ -305,12 +201,12 @@ not actually add zero-padding to output.

may select a nondeterministic algorithm to increase performance. If this is undesirable, you can try to make the operation deterministic (potentially at a performance cost) by setting torch.backends.cudnn.deterministic = TRUE.

-

Shape

- +
+
+

Shape

-
    -
  • Input: \((N, C_{in}, H_{in}, W_{in})\)

  • +
    • Input: \((N, C_{in}, H_{in}, W_{in})\)

    • Output: \((N, C_{out}, H_{out}, W_{out})\) where $$ H_{out} = (H_{in} - 1) \times \mbox{stride}[0] - 2 \times \mbox{padding}[0] + \mbox{dilation}[0] @@ -320,14 +216,12 @@ $$ W_{out} = (W_{in} - 1) \times \mbox{stride}[1] - 2 \times \mbox{padding}[1] + \mbox{dilation}[1] \times (\mbox{kernel\_size}[1] - 1) + \mbox{output\_padding}[1] + 1 $$

    • -
    - -

    Attributes

    - +
+
+

Attributes

-
    -
  • weight (Tensor): the learnable weights of the module of shape +

    • weight (Tensor): the learnable weights of the module of shape \((\mbox{in\_channels}, \frac{\mbox{out\_channels}}{\mbox{groups}},\) \(\mbox{kernel\_size[0]}, \mbox{kernel\_size[1]})\). The values of these weights are sampled from @@ -337,54 +231,51 @@ The values of these weights are sampled from If bias is True, then the values of these weights are sampled from \(\mathcal{U}(-\sqrt{k}, \sqrt{k})\) where \(k = \frac{groups}{C_{\mbox{out}} * \prod_{i=0}^{1}\mbox{kernel\_size}[i]}\)

    • -
    - - -

    Examples

    -
    if (torch_is_installed()) {
    -# With square kernels and equal stride
    -m <- nn_conv_transpose2d(16, 33, 3, stride=2)
    -# non-square kernels and unequal stride and with padding
    -m <- nn_conv_transpose2d(16, 33, c(3, 5), stride=c(2, 1), padding=c(4, 2))
    -input <- torch_randn(20, 16, 50, 100)
    -output <- m(input)
    -# exact output size can be also specified as an argument
    -input <- torch_randn(1, 16, 12, 12)
    -downsample <- nn_conv2d(16, 16, 3, stride=2, padding=1)
    -upsample <- nn_conv_transpose2d(16, 16, 3, stride=2, padding=1)
    -h <- downsample(input)
    -h$size()
    -output <- upsample(h, output_size=input$size())
    -output$size()
    -
    -}
    -#> [1]  1 16 12 12
    -
    +
+ +
+

Examples

+
if (torch_is_installed()) {
+# With square kernels and equal stride
+m <- nn_conv_transpose2d(16, 33, 3, stride=2)
+# non-square kernels and unequal stride and with padding
+m <- nn_conv_transpose2d(16, 33, c(3, 5), stride=c(2, 1), padding=c(4, 2))
+input <- torch_randn(20, 16, 50, 100)
+output <- m(input)
+# exact output size can be also specified as an argument
+input <- torch_randn(1, 16, 12, 12)
+downsample <- nn_conv2d(16, 16, 3, stride=2, padding=1)
+upsample <- nn_conv_transpose2d(16, 16, 3, stride=2, padding=1)
+h <- downsample(input)
+h$size()
+output <- upsample(h, output_size=input$size())
+output$size()
+
+}
+#> [1]  1 16 12 12
+
+
+
-
- +
- - + + diff --git a/dev/reference/nn_conv_transpose3d.html b/dev/reference/nn_conv_transpose3d.html index 11bd01f85..eb489d779 100644 --- a/dev/reference/nn_conv_transpose3d.html +++ b/dev/reference/nn_conv_transpose3d.html @@ -1,80 +1,19 @@ - - - - - - - -ConvTranpose3D module — nn_conv_transpose3d • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -ConvTranpose3D module — nn_conv_transpose3d • torch - - - - - - - - + + -
-
- -
- -
+
@@ -191,76 +113,55 @@ planes." /> planes.

-
nn_conv_transpose3d(
-  in_channels,
-  out_channels,
-  kernel_size,
-  stride = 1,
-  padding = 0,
-  output_padding = 0,
-  groups = 1,
-  bias = TRUE,
-  dilation = 1,
-  padding_mode = "zeros"
-)
+
+
nn_conv_transpose3d(
+  in_channels,
+  out_channels,
+  kernel_size,
+  stride = 1,
+  padding = 0,
+  output_padding = 0,
+  groups = 1,
+  bias = TRUE,
+  dilation = 1,
+  padding_mode = "zeros"
+)
+
-

Arguments

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
in_channels

(int): Number of channels in the input image

out_channels

(int): Number of channels produced by the convolution

kernel_size

(int or tuple): Size of the convolving kernel

stride

(int or tuple, optional): Stride of the convolution. Default: 1

padding

(int or tuple, optional): dilation * (kernel_size - 1) - padding zero-padding +

+

Arguments

+
in_channels
+

(int): Number of channels in the input image

+
out_channels
+

(int): Number of channels produced by the convolution

+
kernel_size
+

(int or tuple): Size of the convolving kernel

+
stride
+

(int or tuple, optional): Stride of the convolution. Default: 1

+
padding
+

(int or tuple, optional): dilation * (kernel_size - 1) - padding zero-padding will be added to both sides of each dimension in the input. Default: 0 output_padding (int or tuple, optional): Additional size added to one side -of each dimension in the output shape. Default: 0

output_padding

(int or tuple, optional): Additional size added to one side -of each dimension in the output shape. Default: 0

groups

(int, optional): Number of blocked connections from input channels to output channels. Default: 1

bias

(bool, optional): If True, adds a learnable bias to the output. Default: True

dilation

(int or tuple, optional): Spacing between kernel elements. Default: 1

padding_mode

(string, optional): 'zeros', 'reflect', 'replicate' or 'circular'. Default: 'zeros'

- -

Details

- +of each dimension in the output shape. Default: 0

+
output_padding
+

(int or tuple, optional): Additional size added to one side +of each dimension in the output shape. Default: 0

+
groups
+

(int, optional): Number of blocked connections from input channels to output channels. Default: 1

+
bias
+

(bool, optional): If True, adds a learnable bias to the output. Default: True

+
dilation
+

(int or tuple, optional): Spacing between kernel elements. Default: 1

+
padding_mode
+

(string, optional): 'zeros', 'reflect', 'replicate' or 'circular'. Default: 'zeros'

+
+
+

Details

The transposed convolution operator multiplies each input value element-wise by a learnable kernel, and sums over the outputs from all input feature planes.

This module can be seen as the gradient of Conv3d with respect to its input. It is also known as a fractionally-strided convolution or -a deconvolution (although it is not an actual deconvolution operation).

    -
  • stride controls the stride for the cross-correlation.

  • +a deconvolution (although it is not an actual deconvolution operation).

    • stride controls the stride for the cross-correlation.

    • padding controls the amount of implicit zero-paddings on both sides for dilation * (kernel_size - 1) - padding number of points. See note below for details.

    • @@ -270,8 +171,7 @@ of the output shape. See note below for details.

      It is harder to describe, but this link_ has a nice visualization of what dilation does.

    • groups controls the connections between inputs and outputs. in_channels and out_channels must both be divisible by -groups. For example,

        -
      • At groups=1, all inputs are convolved to all outputs.

      • +groups. For example,

        • At groups=1, all inputs are convolved to all outputs.

        • At groups=2, the operation becomes equivalent to having two conv layers side by side, each seeing half the input channels, and producing half the output channels, and both subsequently @@ -280,17 +180,13 @@ concatenated.

        • its own set of filters (of size \(\left\lfloor\frac{out\_channels}{in\_channels}\right\rfloor\)).

        -
      - -

      The parameters kernel_size, stride, padding, output_padding -can either be:

        -
      • a single int -- in which case the same value is used for the depth, height and width dimensions

      • +

      The parameters kernel_size, stride, padding, output_padding +can either be:

      • a single int -- in which case the same value is used for the depth, height and width dimensions

      • a tuple of three ints -- in which case, the first int is used for the depth dimension, the second int for the height dimension and the third int for the width dimension

      • -
      - -

      Note

      - +
+
+

Note

Depending of the size of your kernel, several (of the last) columns of the input might be lost, because it is a valid cross-correlation, and not a full cross-correlation. @@ -309,12 +205,12 @@ not actually add zero-padding to output.

may select a nondeterministic algorithm to increase performance. If this is undesirable, you can try to make the operation deterministic (potentially at a performance cost) by setting torch.backends.cudnn.deterministic = TRUE.

-

Shape

- +
+
+

Shape

-
    -
  • Input: \((N, C_{in}, D_{in}, H_{in}, W_{in})\)

  • +
    • Input: \((N, C_{in}, D_{in}, H_{in}, W_{in})\)

    • Output: \((N, C_{out}, D_{out}, H_{out}, W_{out})\) where $$ D_{out} = (D_{in} - 1) \times \mbox{stride}[0] - 2 \times \mbox{padding}[0] + \mbox{dilation}[0] @@ -328,14 +224,12 @@ $$ W_{out} = (W_{in} - 1) \times \mbox{stride}[2] - 2 \times \mbox{padding}[2] + \mbox{dilation}[2] \times (\mbox{kernel\_size}[2] - 1) + \mbox{output\_padding}[2] + 1 $$

    • -
    - -

    Attributes

    - +
+
+

Attributes

-
    -
  • weight (Tensor): the learnable weights of the module of shape +

    • weight (Tensor): the learnable weights of the module of shape \((\mbox{in\_channels}, \frac{\mbox{out\_channels}}{\mbox{groups}},\) \(\mbox{kernel\_size[0]}, \mbox{kernel\_size[1]}, \mbox{kernel\_size[2]})\). The values of these weights are sampled from @@ -345,46 +239,43 @@ The values of these weights are sampled from If bias is True, then the values of these weights are sampled from \(\mathcal{U}(-\sqrt{k}, \sqrt{k})\) where \(k = \frac{groups}{C_{\mbox{out}} * \prod_{i=0}^{2}\mbox{kernel\_size}[i]}\)

    • -
    - - -

    Examples

    -
    if (torch_is_installed()) {
    -if (FALSE) {
    -# With square kernels and equal stride
    -m <- nn_conv_transpose3d(16, 33, 3, stride=2)
    -# non-square kernels and unequal stride and with padding
    -m <- nn_conv_transpose3d(16, 33, c(3, 5, 2), stride=c(2, 1, 1), padding=c(0, 4, 2))
    -input <- torch_randn(20, 16, 10, 50, 100)
    -output <- m(input)
    -}
    -}
    -
    +
+ +
+

Examples

+
if (torch_is_installed()) {
+if (FALSE) {
+# With square kernels and equal stride
+m <- nn_conv_transpose3d(16, 33, 3, stride=2)
+# non-square kernels and unequal stride and with padding
+m <- nn_conv_transpose3d(16, 33, c(3, 5, 2), stride=c(2, 1, 1), padding=c(0, 4, 2))
+input <- torch_randn(20, 16, 10, 50, 100)
+output <- m(input)
+}
+}
+
+
+
-
- +
- - + + diff --git a/dev/reference/nn_cosine_embedding_loss.html b/dev/reference/nn_cosine_embedding_loss.html index e8f992b6d..3e48bb674 100644 --- a/dev/reference/nn_cosine_embedding_loss.html +++ b/dev/reference/nn_cosine_embedding_loss.html @@ -1,84 +1,23 @@ - - - - - - - -Cosine embedding loss — nn_cosine_embedding_loss • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Cosine embedding loss — nn_cosine_embedding_loss • torch - - - - - - - - - - - - - - - - - + + -
-
- -
- -
+
@@ -199,30 +121,26 @@ embeddings or semi-supervised learning. The loss function for each sample is:

-
nn_cosine_embedding_loss(margin = 0, reduction = "mean")
+
+
nn_cosine_embedding_loss(margin = 0, reduction = "mean")
+
-

Arguments

- - - - - - - - - - -
margin

(float, optional): Should be a number from \(-1\) to \(1\), +

+

Arguments

+
margin
+

(float, optional): Should be a number from \(-1\) to \(1\), \(0\) to \(0.5\) is suggested. If margin is missing, the -default value is \(0\).

reduction

(string, optional): Specifies the reduction to apply to the output: +default value is \(0\).

+
reduction
+

(string, optional): Specifies the reduction to apply to the output: 'none' | 'mean' | 'sum'. 'none': no reduction will be applied, 'mean': the sum of the output will be divided by the number of elements in the output, 'sum': the output will be summed. Note: size_average and reduce are in the process of being deprecated, and in the meantime, -specifying either of those two args will override reduction. Default: 'mean'

- -

Details

- +specifying either of those two args will override reduction. Default: 'mean'

+
+
+

Details

$$ \mbox{loss}(x, y) = \begin{array}{ll} @@ -230,32 +148,29 @@ specifying either of those two args will override reduction. Defaul \max(0, \cos(x_1, x_2) - \mbox{margin}), & \mbox{if } y = -1 \end{array} $$

+
+
-
- +
- - + + diff --git a/dev/reference/nn_cross_entropy_loss.html b/dev/reference/nn_cross_entropy_loss.html index 682edc8ee..c53aa1259 100644 --- a/dev/reference/nn_cross_entropy_loss.html +++ b/dev/reference/nn_cross_entropy_loss.html @@ -1,80 +1,19 @@ - - - - - - - -CrossEntropyLoss module — nn_cross_entropy_loss • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -CrossEntropyLoss module — nn_cross_entropy_loss • torch - - - - - - - - + + -
-
- -
- -
+
-

This criterion combines nn_log_softmax() and nn_nll_loss() in one single class. +

This criterion combines nn_log_softmax() and nn_nll_loss() in one single class. It is useful when training a classification problem with C classes.

-
nn_cross_entropy_loss(weight = NULL, ignore_index = -100, reduction = "mean")
+
+
nn_cross_entropy_loss(weight = NULL, ignore_index = -100, reduction = "mean")
+
-

Arguments

- - - - - - - - - - - - - - -
weight

(Tensor, optional): a manual rescaling weight given to each class. -If given, has to be a Tensor of size C

ignore_index

(int, optional): Specifies a target value that is ignored +

+

Arguments

+
weight
+

(Tensor, optional): a manual rescaling weight given to each class. +If given, has to be a Tensor of size C

+
ignore_index
+

(int, optional): Specifies a target value that is ignored and does not contribute to the input gradient. When size_average is -TRUE, the loss is averaged over non-ignored targets.

reduction

(string, optional): Specifies the reduction to apply to the output: +TRUE, the loss is averaged over non-ignored targets.

+
reduction
+

(string, optional): Specifies the reduction to apply to the output: 'none' | 'mean' | 'sum'. 'none': no reduction will be applied, 'mean': the sum of the output will be divided by the number of elements in the output, 'sum': the output will be summed. Note: size_average and reduce are in the process of being deprecated, and in the meantime, -specifying either of those two args will override reduction. Default: 'mean'

- -

Details

- +specifying either of those two args will override reduction. Default: 'mean'

+
+
+

Details

If provided, the optional argument weight should be a 1D Tensor assigning weight to each of the classes.

This is particularly useful when you have an unbalanced training set. @@ -245,12 +161,12 @@ Can also be used for higher dimension inputs, such as 2D images, by providing an input of size \((minibatch, C, d_1, d_2, ..., d_K)\) with \(K \geq 1\), where \(K\) is the number of dimensions, and a target of appropriate shape (see below).

-

Shape

- +
+
+

Shape

-
    -
  • Input: \((N, C)\) where C = number of classes, or +

    • Input: \((N, C)\) where C = number of classes, or \((N, C, d_1, d_2, ..., d_K)\) with \(K \geq 1\) in the case of K-dimensional loss.

    • Target: \((N)\) where each value is \(0 \leq \mbox{targets}[i] \leq C-1\), or @@ -261,44 +177,41 @@ If reduction is 'none', then the same size as the targ \((N)\), or \((N, d_1, d_2, ..., d_K)\) with \(K \geq 1\) in the case of K-dimensional loss.

    • -
    - - -

    Examples

    -
    if (torch_is_installed()) {
    -loss <- nn_cross_entropy_loss()
    -input <- torch_randn(3, 5, requires_grad=TRUE)
    -target <- torch_randint(low = 1, high = 5, size = 3, dtype = torch_long())
    -output <- loss(input, target)
    -output$backward()
    -
    -}
    -
    +
+ +
+

Examples

+
if (torch_is_installed()) {
+loss <- nn_cross_entropy_loss()
+input <- torch_randn(3, 5, requires_grad=TRUE)
+target <- torch_randint(low = 1, high = 5, size = 3, dtype = torch_long())
+output <- loss(input, target)
+output$backward()
+
+}
+
+
+
-
- +
- - + + diff --git a/dev/reference/nn_ctc_loss.html b/dev/reference/nn_ctc_loss.html index 0a2590b46..6eb8c07bf 100644 --- a/dev/reference/nn_ctc_loss.html +++ b/dev/reference/nn_ctc_loss.html @@ -1,82 +1,21 @@ - - - - - - - -The Connectionist Temporal Classification loss. — nn_ctc_loss • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -The Connectionist Temporal Classification loss. — nn_ctc_loss • torch - - - - - - - - + + -
-
- -
- -
+
@@ -195,34 +117,28 @@ with respect to each input node. The alignment of input to target is assumed to limits the length of the target sequence such that it must be \(\leq\) the input length.

-
nn_ctc_loss(blank = 0, reduction = "mean", zero_infinity = FALSE)
+
+
nn_ctc_loss(blank = 0, reduction = "mean", zero_infinity = FALSE)
+
-

Arguments

- - - - - - - - - - - - - - -
blank

(int, optional): blank label. Default \(0\).

reduction

(string, optional): Specifies the reduction to apply to the output: +

+

Arguments

+
blank
+

(int, optional): blank label. Default \(0\).

+
reduction
+

(string, optional): Specifies the reduction to apply to the output: 'none' | 'mean' | 'sum'. 'none': no reduction will be applied, 'mean': the output losses will be divided by the target lengths and -then the mean over the batch is taken. Default: 'mean'

zero_infinity

(bool, optional): +then the mean over the batch is taken. Default: 'mean'

+
zero_infinity
+

(bool, optional): Whether to zero infinite losses and the associated gradients. Default: FALSE Infinite losses mainly occur when the inputs are too short -to be aligned to the targets.

- -

Note

- +to be aligned to the targets.

+
+
+

Note

In order to use CuDNN, the following must be satisfied: targets must be in concatenated format, all input_lengths must be T. \(blank=0\), target_lengths \(\leq 256\), the integer arguments must be of @@ -232,12 +148,12 @@ dtype torch_int32.

may select a nondeterministic algorithm to increase performance. If this is undesirable, you can try to make the operation deterministic (potentially at a performance cost) by setting torch.backends.cudnn.deterministic = TRUE.

-

Shape

- +
+
+

Shape

-
    -
  • Log_probs: Tensor of size \((T, N, C)\), +

    • Log_probs: Tensor of size \((T, N, C)\), where \(T = \mbox{input length}\), \(N = \mbox{batch size}\), and \(C = \mbox{number of classes (including blank)}\). @@ -270,81 +186,79 @@ If the targets are given as a 1d tensor that is the concatenation of individual targets, the target_lengths must add up to the total length of the tensor.

    • Output: scalar. If reduction is 'none', then \((N)\), where \(N = \mbox{batch size}\).

    • -
    - -

    [nnf)log_softmax()]: R:nnf)log_softmax() +

[nnf)log_softmax()]: R:nnf)log_softmax() [n,0:s_n]: R:n,0:s_n

-

References

- +
+
+

References

A. Graves et al.: Connectionist Temporal Classification: Labelling Unsegmented Sequence Data with Recurrent Neural Networks: https://www.cs.toronto.edu/~graves/icml_2006.pdf

+
-

Examples

-
if (torch_is_installed()) {
-# Target are to be padded
-T <- 50      # Input sequence length
-C <- 20      # Number of classes (including blank)
-N <- 16      # Batch size
-S <- 30      # Target sequence length of longest target in batch (padding length)
-S_min <- 10  # Minimum target length, for demonstration purposes
-
-# Initialize random batch of input vectors, for *size = (T,N,C)
-input <- torch_randn(T, N, C)$log_softmax(2)$detach()$requires_grad_()
-
-# Initialize random batch of targets (0 = blank, 1:C = classes)
-target <- torch_randint(low=1, high=C, size=c(N, S), dtype=torch_long())
-
-input_lengths <- torch_full(size=c(N), fill_value=TRUE, dtype=torch_long())
-target_lengths <- torch_randint(low=S_min, high=S, size=c(N), dtype=torch_long())
-ctc_loss <- nn_ctc_loss()
-loss <- ctc_loss(input, target, input_lengths, target_lengths)
-loss$backward()
-
-
-# Target are to be un-padded
-T <- 50      # Input sequence length
-C <- 20      # Number of classes (including blank)
-N <- 16      # Batch size
-
-# Initialize random batch of input vectors, for *size = (T,N,C)
-input <- torch_randn(T, N, C)$log_softmax(2)$detach()$requires_grad_()
-input_lengths <- torch_full(size=c(N), fill_value=TRUE, dtype=torch_long())
-
-# Initialize random batch of targets (0 = blank, 1:C = classes)
-target_lengths <- torch_randint(low=1, high=T, size=c(N), dtype=torch_long())
-target <- torch_randint(low=1, high=C, size=as.integer(sum(target_lengths)), dtype=torch_long())
-ctc_loss <- nn_ctc_loss()
-loss <- ctc_loss(input, target, input_lengths, target_lengths)
-loss$backward()
-
-}
-
+
+

Examples

+
if (torch_is_installed()) {
+# Target are to be padded
+T <- 50      # Input sequence length
+C <- 20      # Number of classes (including blank)
+N <- 16      # Batch size
+S <- 30      # Target sequence length of longest target in batch (padding length)
+S_min <- 10  # Minimum target length, for demonstration purposes
+
+# Initialize random batch of input vectors, for *size = (T,N,C)
+input <- torch_randn(T, N, C)$log_softmax(2)$detach()$requires_grad_()
+
+# Initialize random batch of targets (0 = blank, 1:C = classes)
+target <- torch_randint(low=1, high=C, size=c(N, S), dtype=torch_long())
+
+input_lengths <- torch_full(size=c(N), fill_value=TRUE, dtype=torch_long())
+target_lengths <- torch_randint(low=S_min, high=S, size=c(N), dtype=torch_long())
+ctc_loss <- nn_ctc_loss()
+loss <- ctc_loss(input, target, input_lengths, target_lengths)
+loss$backward()
+
+
+# Target are to be un-padded
+T <- 50      # Input sequence length
+C <- 20      # Number of classes (including blank)
+N <- 16      # Batch size
+
+# Initialize random batch of input vectors, for *size = (T,N,C)
+input <- torch_randn(T, N, C)$log_softmax(2)$detach()$requires_grad_()
+input_lengths <- torch_full(size=c(N), fill_value=TRUE, dtype=torch_long())
+
+# Initialize random batch of targets (0 = blank, 1:C = classes)
+target_lengths <- torch_randint(low=1, high=T, size=c(N), dtype=torch_long())
+target <- torch_randint(low=1, high=C, size=as.integer(sum(target_lengths)), dtype=torch_long())
+ctc_loss <- nn_ctc_loss()
+loss <- ctc_loss(input, target, input_lengths, target_lengths)
+loss$backward()
+
+}
+
+
+
-
- +
- - + + diff --git a/dev/reference/nn_dropout.html b/dev/reference/nn_dropout.html index d23d04255..ece938cbd 100644 --- a/dev/reference/nn_dropout.html +++ b/dev/reference/nn_dropout.html @@ -1,82 +1,21 @@ - - - - - - - -Dropout module — nn_dropout • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Dropout module — nn_dropout • torch - - - - - - - - - - - - - - - - - + + -
-
- -
- -
+
@@ -195,72 +117,65 @@ distribution. Each channel will be zeroed out independently on every forward call.

-
nn_dropout(p = 0.5, inplace = FALSE)
- -

Arguments

- - - - - - - - - - -
p

probability of an element to be zeroed. Default: 0.5

inplace

If set to TRUE, will do this operation in-place. Default: FALSE.

- -

Details

+
+
nn_dropout(p = 0.5, inplace = FALSE)
+
+
+

Arguments

+
p
+

probability of an element to be zeroed. Default: 0.5

+
inplace
+

If set to TRUE, will do this operation in-place. Default: FALSE.

+
+
+

Details

This has proven to be an effective technique for regularization and preventing the co-adaptation of neurons as described in the paper -Improving neural networks by preventing co-adaptation of feature detectors.

+Improving neural networks by preventing co-adaptation of feature detectors.

Furthermore, the outputs are scaled by a factor of :math:\frac{1}{1-p} during training. This means that during evaluation the module simply computes an identity function.

-

Shape

- +
+
+

Shape

-
    -
  • Input: \((*)\). Input can be of any shape

  • +
    • Input: \((*)\). Input can be of any shape

    • Output: \((*)\). Output is of the same shape as input

    • -
    - - -

    Examples

    -
    if (torch_is_installed()) {
    -m <- nn_dropout(p = 0.2)
    -input <- torch_randn(20, 16)
    -output <- m(input)
    -
    -}
    -
    +
+ +
+

Examples

+
if (torch_is_installed()) {
+m <- nn_dropout(p = 0.2)
+input <- torch_randn(20, 16)
+output <- m(input)
+
+}
+
+
+
-
- +
- - + + diff --git a/dev/reference/nn_dropout2d.html b/dev/reference/nn_dropout2d.html index a1804f5b2..a4c1ba6d5 100644 --- a/dev/reference/nn_dropout2d.html +++ b/dev/reference/nn_dropout2d.html @@ -1,81 +1,20 @@ - - - - - - - -Dropout2D module — nn_dropout2d • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Dropout2D module — nn_dropout2d • torch - - - - - - - - - - - - - - - - - + + -
-
- -
- -
+
@@ -193,78 +115,71 @@ e.g., the \(j\)-th channel of the \(i\)-th sample in the batched input is a 2D tensor \(\mbox{input}[i, j]\)).

-
nn_dropout2d(p = 0.5, inplace = FALSE)
- -

Arguments

- - - - - - - - - - -
p

(float, optional): probability of an element to be zero-ed.

inplace

(bool, optional): If set to TRUE, will do this operation -in-place

- -

Details

+
+
nn_dropout2d(p = 0.5, inplace = FALSE)
+
+
+

Arguments

+
p
+

(float, optional): probability of an element to be zero-ed.

+
inplace
+

(bool, optional): If set to TRUE, will do this operation +in-place

+
+
+

Details

Each channel will be zeroed out independently on every forward call with probability p using samples from a Bernoulli distribution. -Usually the input comes from nn_conv2d modules.

+Usually the input comes from nn_conv2d modules.

As described in the paper -Efficient Object Localization Using Convolutional Networks , +Efficient Object Localization Using Convolutional Networks , if adjacent pixels within feature maps are strongly correlated (as is normally the case in early convolution layers) then i.i.d. dropout will not regularize the activations and will otherwise just result in an effective learning rate decrease. In this case, nn_dropout2d will help promote independence between feature maps and should be used instead.

-

Shape

- +
+
+

Shape

-
    -
  • Input: \((N, C, H, W)\)

  • +
    • Input: \((N, C, H, W)\)

    • Output: \((N, C, H, W)\) (same shape as input)

    • -
    - - -

    Examples

    -
    if (torch_is_installed()) {
    -m <- nn_dropout2d(p = 0.2)
    -input <- torch_randn(20, 16, 32, 32)
    -output <- m(input)
    -
    -}
    -
    +
+ +
+

Examples

+
if (torch_is_installed()) {
+m <- nn_dropout2d(p = 0.2)
+input <- torch_randn(20, 16, 32, 32)
+output <- m(input)
+
+}
+
+
+
-
- +
- - + + diff --git a/dev/reference/nn_dropout3d.html b/dev/reference/nn_dropout3d.html index 71af82337..73f3f7f04 100644 --- a/dev/reference/nn_dropout3d.html +++ b/dev/reference/nn_dropout3d.html @@ -1,81 +1,20 @@ - - - - - - - -Dropout3D module — nn_dropout3d • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Dropout3D module — nn_dropout3d • torch - - - - - - - - - - - - - - - - - + + -
-
- -
- -
+
@@ -193,78 +115,71 @@ e.g., the \(j\)-th channel of the \(i\)-th sample in the batched input is a 3D tensor \(\mbox{input}[i, j]\)).

-
nn_dropout3d(p = 0.5, inplace = FALSE)
- -

Arguments

- - - - - - - - - - -
p

(float, optional): probability of an element to be zeroed.

inplace

(bool, optional): If set to TRUE, will do this operation -in-place

- -

Details

+
+
nn_dropout3d(p = 0.5, inplace = FALSE)
+
+
+

Arguments

+
p
+

(float, optional): probability of an element to be zeroed.

+
inplace
+

(bool, optional): If set to TRUE, will do this operation +in-place

+
+
+

Details

Each channel will be zeroed out independently on every forward call with probability p using samples from a Bernoulli distribution. -Usually the input comes from nn_conv2d modules.

+Usually the input comes from nn_conv2d modules.

As described in the paper -Efficient Object Localization Using Convolutional Networks , +Efficient Object Localization Using Convolutional Networks , if adjacent pixels within feature maps are strongly correlated (as is normally the case in early convolution layers) then i.i.d. dropout will not regularize the activations and will otherwise just result in an effective learning rate decrease.

In this case, nn_dropout3d will help promote independence between feature maps and should be used instead.

-

Shape

- +
+
+

Shape

-
    -
  • Input: \((N, C, D, H, W)\)

  • +
    • Input: \((N, C, D, H, W)\)

    • Output: \((N, C, D, H, W)\) (same shape as input)

    • -
    - - -

    Examples

    -
    if (torch_is_installed()) {
    -m <- nn_dropout3d(p = 0.2)
    -input <- torch_randn(20, 16, 4, 32, 32)
    -output <- m(input)
    -
    -}
    -
    +
+ +
+

Examples

+
if (torch_is_installed()) {
+m <- nn_dropout3d(p = 0.2)
+input <- torch_randn(20, 16, 4, 32, 32)
+output <- m(input)
+
+}
+
+
+
-
- +
- - + + diff --git a/dev/reference/nn_elu.html b/dev/reference/nn_elu.html index 8e2f98b3a..ec533b212 100644 --- a/dev/reference/nn_elu.html +++ b/dev/reference/nn_elu.html @@ -1,79 +1,18 @@ - - - - - - - -ELU module — nn_elu • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -ELU module — nn_elu • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,70 +111,63 @@

Applies the element-wise function:

-
nn_elu(alpha = 1, inplace = FALSE)
- -

Arguments

- - - - - - - - - - -
alpha

the \(\alpha\) value for the ELU formulation. Default: 1.0

inplace

can optionally do the operation in-place. Default: FALSE

- -

Details

+
+
nn_elu(alpha = 1, inplace = FALSE)
+
+
+

Arguments

+
alpha
+

the \(\alpha\) value for the ELU formulation. Default: 1.0

+
inplace
+

can optionally do the operation in-place. Default: FALSE

+
+
+

Details

$$ \mbox{ELU}(x) = \max(0,x) + \min(0, \alpha * (\exp(x) - 1)) $$

-

Shape

- +
+
+

Shape

-
    -
  • Input: \((N, *)\) where * means, any number of additional +

    • Input: \((N, *)\) where * means, any number of additional dimensions

    • Output: \((N, *)\), same shape as the input

    • -
    - - -

    Examples

    -
    if (torch_is_installed()) {
    -m <- nn_elu()
    -input <- torch_randn(2)
    -output <-  m(input)
    -
    -}
    -
    +
+ +
+

Examples

+
if (torch_is_installed()) {
+m <- nn_elu()
+input <- torch_randn(2)
+output <-  m(input)
+
+}
+
+
+
-
- +
- - + + diff --git a/dev/reference/nn_embedding.html b/dev/reference/nn_embedding.html index 1b224cc4f..076126cf7 100644 --- a/dev/reference/nn_embedding.html +++ b/dev/reference/nn_embedding.html @@ -1,82 +1,21 @@ - - - - - - - -Embedding module — nn_embedding • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Embedding module — nn_embedding • torch - - - - - - - - - - - - - - - - - + + -
-
- -
- -
+
@@ -195,60 +117,44 @@ The input to the module is a list of indices, and the output is the correspondin word embeddings.

-
nn_embedding(
-  num_embeddings,
-  embedding_dim,
-  padding_idx = NULL,
-  max_norm = NULL,
-  norm_type = 2,
-  scale_grad_by_freq = FALSE,
-  sparse = FALSE,
-  .weight = NULL
-)
- -

Arguments

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
num_embeddings

(int): size of the dictionary of embeddings

embedding_dim

(int): the size of each embedding vector

padding_idx

(int, optional): If given, pads the output with the embedding vector at padding_idx -(initialized to zeros) whenever it encounters the index.

max_norm

(float, optional): If given, each embedding vector with norm larger than max_norm -is renormalized to have norm max_norm.

norm_type

(float, optional): The p of the p-norm to compute for the max_norm option. Default 2.

scale_grad_by_freq

(boolean, optional): If given, this will scale gradients by the inverse of frequency of -the words in the mini-batch. Default False.

sparse

(bool, optional): If True, gradient w.r.t. weight matrix will be a sparse tensor.

.weight

(Tensor) embeddings weights (in case you want to set it manually)

-

See Notes for more details regarding sparse gradients.

- -

Note

+
+
nn_embedding(
+  num_embeddings,
+  embedding_dim,
+  padding_idx = NULL,
+  max_norm = NULL,
+  norm_type = 2,
+  scale_grad_by_freq = FALSE,
+  sparse = FALSE,
+  .weight = NULL
+)
+
+
+

Arguments

+
num_embeddings
+

(int): size of the dictionary of embeddings

+
embedding_dim
+

(int): the size of each embedding vector

+
padding_idx
+

(int, optional): If given, pads the output with the embedding vector at padding_idx +(initialized to zeros) whenever it encounters the index.

+
max_norm
+

(float, optional): If given, each embedding vector with norm larger than max_norm +is renormalized to have norm max_norm.

+
norm_type
+

(float, optional): The p of the p-norm to compute for the max_norm option. Default 2.

+
scale_grad_by_freq
+

(boolean, optional): If given, this will scale gradients by the inverse of frequency of +the words in the mini-batch. Default False.

+
sparse
+

(bool, optional): If True, gradient w.r.t. weight matrix will be a sparse tensor.

+
.weight
+

(Tensor) embeddings weights (in case you want to set it manually)

+

See Notes for more details regarding sparse gradients.

+
+
+

Note

Keep in mind that only a limited number of optimizers support sparse gradients: currently it's optim.SGD (CUDA and CPU), optim.SparseAdam (CUDA and CPU) and optim.Adagrad (CPU)

@@ -258,71 +164,66 @@ vector can be modified afterwards, e.g., using a customized initialization method, and thus changing the vector used to pad the output. The gradient for this vector from nn_embedding is always zero.

-

Attributes

- +
+
+

Attributes

-
    -
  • weight (Tensor): the learnable weights of the module of shape (num_embeddings, embedding_dim) +

    • weight (Tensor): the learnable weights of the module of shape (num_embeddings, embedding_dim) initialized from \(\mathcal{N}(0, 1)\)

    • -
    - -

    Shape

    - +
+
+

Shape

-
    -
  • Input: \((*)\), LongTensor of arbitrary shape containing the indices to extract

  • +
    • Input: \((*)\), LongTensor of arbitrary shape containing the indices to extract

    • Output: \((*, H)\), where * is the input shape and \(H=\mbox{embedding\_dim}\)

    • -
    - - -

    Examples

    -
    if (torch_is_installed()) {
    -# an Embedding module containing 10 tensors of size 3
    -embedding <- nn_embedding(10, 3)
    -# a batch of 2 samples of 4 indices each
    -input <- torch_tensor(rbind(c(1,2,4,5),c(4,3,2,9)), dtype = torch_long())
    -embedding(input)
    -# example with padding_idx
    -embedding <- nn_embedding(10, 3, padding_idx=1)
    -input <- torch_tensor(matrix(c(1,3,1,6), nrow = 1), dtype = torch_long())
    -embedding(input)
    -
    -}
    -#> torch_tensor
    -#> (1,.,.) = 
    -#>   0.0000  0.0000  0.0000
    -#>   2.6061 -0.9449 -0.8783
    -#>   0.0000  0.0000  0.0000
    -#>   0.7411  0.0675  0.2930
    -#> [ CPUFloatType{1,4,3} ][ grad_fn = <EmbeddingBackward> ]
    -
    +
+ +
+

Examples

+
if (torch_is_installed()) {
+# an Embedding module containing 10 tensors of size 3
+embedding <- nn_embedding(10, 3)
+# a batch of 2 samples of 4 indices each
+input <- torch_tensor(rbind(c(1,2,4,5),c(4,3,2,9)), dtype = torch_long())
+embedding(input)
+# example with padding_idx
+embedding <- nn_embedding(10, 3, padding_idx=1)
+input <- torch_tensor(matrix(c(1,3,1,6), nrow = 1), dtype = torch_long())
+embedding(input)
+
+}
+#> torch_tensor
+#> (1,.,.) = 
+#>   0.0000  0.0000  0.0000
+#>  -2.7940 -0.4395  2.2699
+#>   0.0000  0.0000  0.0000
+#>   1.2420 -1.8120  0.7758
+#> [ CPUFloatType{1,4,3} ][ grad_fn = <EmbeddingBackward> ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/nn_fractional_max_pool2d.html b/dev/reference/nn_fractional_max_pool2d.html index 0e7d996fb..12e532c35 100644 --- a/dev/reference/nn_fractional_max_pool2d.html +++ b/dev/reference/nn_fractional_max_pool2d.html @@ -1,80 +1,19 @@ - - - - - - - -Applies a 2D fractional max pooling over an input signal composed of several input planes. — nn_fractional_max_pool2d • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Applies a 2D fractional max pooling over an input signal composed of several input planes. — nn_fractional_max_pool2d • torch - - - - - - - - + + -
-
- -
- -
+

Fractional MaxPooling is described in detail in the paper -Fractional MaxPooling by Ben Graham

+Fractional MaxPooling by Ben Graham

-
nn_fractional_max_pool2d(
-  kernel_size,
-  output_size = NULL,
-  output_ratio = NULL,
-  return_indices = FALSE
-)
- -

Arguments

- - - - - - - - - - - - - - - - - - -
kernel_size

the size of the window to take a max over. -Can be a single number k (for a square kernel of k x k) or a tuple (kh, kw)

output_size

the target output size of the image of the form oH x oW. -Can be a tuple (oH, oW) or a single number oH for a square image oH x oH

output_ratio

If one wants to have an output size as a ratio of the input size, this option can be given. -This has to be a number or tuple in the range (0, 1)

return_indices

if TRUE, will return the indices along with the outputs. -Useful to pass to nn_max_unpool2d(). Default: FALSE

- -

Details

+
+
nn_fractional_max_pool2d(
+  kernel_size,
+  output_size = NULL,
+  output_ratio = NULL,
+  return_indices = FALSE
+)
+
+
+

Arguments

+
kernel_size
+

the size of the window to take a max over. +Can be a single number k (for a square kernel of k x k) or a tuple (kh, kw)

+
output_size
+

the target output size of the image of the form oH x oW. +Can be a tuple (oH, oW) or a single number oH for a square image oH x oH

+
output_ratio
+

If one wants to have an output size as a ratio of the input size, this option can be given. +This has to be a number or tuple in the range (0, 1)

+
return_indices
+

if TRUE, will return the indices along with the outputs. +Useful to pass to nn_max_unpool2d(). Default: FALSE

+
+
+

Details

The max-pooling operation is applied in \(kH \times kW\) regions by a stochastic step size determined by the target output size. The number of output features is equal to the number of input planes.

+
-

Examples

-
if (torch_is_installed()) {
-
-}
-#> NULL
-
+
+

Examples

+
if (torch_is_installed()) {
+
+}
+#> NULL
+
+
+
-
- +
- - + + diff --git a/dev/reference/nn_fractional_max_pool3d.html b/dev/reference/nn_fractional_max_pool3d.html index a7aee2d87..4c0b3b709 100644 --- a/dev/reference/nn_fractional_max_pool3d.html +++ b/dev/reference/nn_fractional_max_pool3d.html @@ -1,80 +1,19 @@ - - - - - - - -Applies a 3D fractional max pooling over an input signal composed of several input planes. — nn_fractional_max_pool3d • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Applies a 3D fractional max pooling over an input signal composed of several input planes. — nn_fractional_max_pool3d • torch - - - - - - - - + + -
-
- -
- -
+

Fractional MaxPooling is described in detail in the paper -Fractional MaxPooling by Ben Graham

+Fractional MaxPooling by Ben Graham

-
nn_fractional_max_pool3d(
-  kernel_size,
-  output_size = NULL,
-  output_ratio = NULL,
-  return_indices = FALSE
-)
- -

Arguments

- - - - - - - - - - - - - - - - - - -
kernel_size

the size of the window to take a max over. -Can be a single number k (for a square kernel of k x k x k) or a tuple (kt x kh x kw)

output_size

the target output size of the image of the form oT x oH x oW. -Can be a tuple (oT, oH, oW) or a single number oH for a square image oH x oH x oH

output_ratio

If one wants to have an output size as a ratio of the input size, this option can be given. -This has to be a number or tuple in the range (0, 1)

return_indices

if TRUE, will return the indices along with the outputs. -Useful to pass to nn_max_unpool3d(). Default: FALSE

- -

Details

+
+
nn_fractional_max_pool3d(
+  kernel_size,
+  output_size = NULL,
+  output_ratio = NULL,
+  return_indices = FALSE
+)
+
+
+

Arguments

+
kernel_size
+

the size of the window to take a max over. +Can be a single number k (for a square kernel of k x k x k) or a tuple (kt x kh x kw)

+
output_size
+

the target output size of the image of the form oT x oH x oW. +Can be a tuple (oT, oH, oW) or a single number oH for a square image oH x oH x oH

+
output_ratio
+

If one wants to have an output size as a ratio of the input size, this option can be given. +This has to be a number or tuple in the range (0, 1)

+
return_indices
+

if TRUE, will return the indices along with the outputs. +Useful to pass to nn_max_unpool3d(). Default: FALSE

+
+
+

Details

The max-pooling operation is applied in \(kTxkHxkW\) regions by a stochastic step size determined by the target output size. The number of output features is equal to the number of input planes.

+
-

Examples

-
if (torch_is_installed()) {
-# pool of cubic window of size=3, and target output size 13x12x11
-m = nn_fractional_max_pool3d(3, output_size=c(13, 12, 11))
-# pool of cubic window and target output size being half of input size
-m = nn_fractional_max_pool3d(3, output_ratio=c(0.5, 0.5, 0.5))
-input = torch_randn(20, 16, 50, 32, 16)
-output = m(input)
-
-}
-
+
+

Examples

+
if (torch_is_installed()) {
+# pool of cubic window of size=3, and target output size 13x12x11
+m = nn_fractional_max_pool3d(3, output_size=c(13, 12, 11))
+# pool of cubic window and target output size being half of input size
+m = nn_fractional_max_pool3d(3, output_ratio=c(0.5, 0.5, 0.5))
+input = torch_randn(20, 16, 50, 32, 16)
+output = m(input)
+
+}
+
+
+
-
- +
- - + + diff --git a/dev/reference/nn_gelu.html b/dev/reference/nn_gelu.html index f079da206..33fcccf93 100644 --- a/dev/reference/nn_gelu.html +++ b/dev/reference/nn_gelu.html @@ -1,80 +1,19 @@ - - - - - - - -GELU module — nn_gelu • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -GELU module — nn_gelu • torch - - - - - - - - + + -
-
- -
- -
+
@@ -191,56 +113,54 @@ $$\mbox{GELU}(x) = x * \Phi(x)$$" /> $$\mbox{GELU}(x) = x * \Phi(x)$$

-
nn_gelu()
- - -

Details

+
+
nn_gelu()
+
+
+

Details

where \(\Phi(x)\) is the Cumulative Distribution Function for Gaussian Distribution.

-

Shape

- +
+
+

Shape

-
    -
  • Input: \((N, *)\) where * means, any number of additional +

    • Input: \((N, *)\) where * means, any number of additional dimensions

    • Output: \((N, *)\), same shape as the input

    • -
    - - -

    Examples

    -
    if (torch_is_installed()) {
    -m = nn_gelu()
    -input <- torch_randn(2)
    -output <- m(input)
    -
    -}
    -
    +
+ +
+

Examples

+
if (torch_is_installed()) {
+m = nn_gelu()
+input <- torch_randn(2)
+output <- m(input)
+
+}
+
+
+
-
- +
- - + + diff --git a/dev/reference/nn_glu.html b/dev/reference/nn_glu.html index 021dfda1e..c43637c70 100644 --- a/dev/reference/nn_glu.html +++ b/dev/reference/nn_glu.html @@ -1,81 +1,20 @@ - - - - - - - -GLU module — nn_glu • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -GLU module — nn_glu • torch - - - - - - - - - - - - - - - - - + + -
-
- -
- -
+
@@ -193,61 +115,55 @@ of the input matrices and \(b\) is the second half." /> of the input matrices and \(b\) is the second half.

-
nn_glu(dim = -1)
- -

Arguments

- - - - - - -
dim

(int): the dimension on which to split the input. Default: -1

- -

Shape

+
+
nn_glu(dim = -1)
+
+
+

Arguments

+
dim
+

(int): the dimension on which to split the input. Default: -1

+
+
+

Shape

-
    -
  • Input: \((\ast_1, N, \ast_2)\) where * means, any number of additional +

    • Input: \((\ast_1, N, \ast_2)\) where * means, any number of additional dimensions

    • Output: \((\ast_1, M, \ast_2)\) where \(M=N/2\)

    • -
    - - -

    Examples

    -
    if (torch_is_installed()) {
    -m <- nn_glu()
    -input <- torch_randn(4, 2)
    -output <- m(input)
    -
    -}
    -
    +
+ +
+

Examples

+
if (torch_is_installed()) {
+m <- nn_glu()
+input <- torch_randn(4, 2)
+output <- m(input)
+
+}
+
+
+
-
- +
- - + + diff --git a/dev/reference/nn_group_norm.html b/dev/reference/nn_group_norm.html index 42a6ba440..bc8f93b96 100644 --- a/dev/reference/nn_group_norm.html +++ b/dev/reference/nn_group_norm.html @@ -1,80 +1,19 @@ - - - - - - - -Group normalization — nn_group_norm • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Group normalization — nn_group_norm • torch - - - - - - - - + + -
-
- -
- -
+

Applies Group Normalization over a mini-batch of inputs as described in -the paper Group Normalization.

+the paper Group Normalization.

-
nn_group_norm(num_groups, num_channels, eps = 1e-05, affine = TRUE)
+
+
nn_group_norm(num_groups, num_channels, eps = 1e-05, affine = TRUE)
+
-

Arguments

- - - - - - - - - - - - - - - - - - -
num_groups

(int): number of groups to separate the channels into

num_channels

(int): number of channels expected in input

eps

a value added to the denominator for numerical stability. Default: 1e-5

affine

a boolean value that when set to TRUE, this module +

+

Arguments

+
num_groups
+

(int): number of groups to separate the channels into

+
num_channels
+

(int): number of channels expected in input

+
eps
+

a value added to the denominator for numerical stability. Default: 1e-5

+
affine
+

a boolean value that when set to TRUE, this module has learnable per-channel affine parameters initialized to ones (for weights) -and zeros (for biases). Default: TRUE.

- -

Details

- +and zeros (for biases). Default: TRUE.

+
+
+

Details

$$ y = \frac{x - \mathrm{E}[x]}{ \sqrt{\mathrm{Var}[x] + \epsilon}} * \gamma + \beta $$

@@ -228,60 +142,58 @@ per-channel affine transform parameter vectors of size num_channels affine is TRUE. The standard-deviation is calculated via the biased estimator, equivalent to torch_var(input, unbiased=FALSE).

-

Note

- +
+
+

Note

This layer uses statistics computed from input data in both training and evaluation modes.

-

Shape

- +
+
+

Shape

-
    -
  • Input: \((N, C, *)\) where \(C=\mbox{num\_channels}\)

  • +
    • Input: \((N, C, *)\) where \(C=\mbox{num\_channels}\)

    • Output: \((N, C, *)\)` (same shape as input)

    • -
    - - -

    Examples

    -
    if (torch_is_installed()) {
    -
    -input <- torch_randn(20, 6, 10, 10)
    -# Separate 6 channels into 3 groups
    -m <- nn_group_norm(3, 6)
    -# Separate 6 channels into 6 groups (equivalent with [nn_instance_morm])
    -m <- nn_group_norm(6, 6)
    -# Put all 6 channels into a single group (equivalent with [nn_layer_norm])
    -m <- nn_group_norm(1, 6)
    -# Activating the module
    -output <- m(input)
    -
    -}
    -
    +
+ +
+

Examples

+
if (torch_is_installed()) {
+
+input <- torch_randn(20, 6, 10, 10)
+# Separate 6 channels into 3 groups
+m <- nn_group_norm(3, 6)
+# Separate 6 channels into 6 groups (equivalent with [nn_instance_morm])
+m <- nn_group_norm(6, 6)
+# Put all 6 channels into a single group (equivalent with [nn_layer_norm])
+m <- nn_group_norm(1, 6)
+# Activating the module
+output <- m(input)
+
+}
+
+
+
-
- +
- - + + diff --git a/dev/reference/nn_gru.html b/dev/reference/nn_gru.html index c29cd877c..02cb901d0 100644 --- a/dev/reference/nn_gru.html +++ b/dev/reference/nn_gru.html @@ -1,80 +1,19 @@ - - - - - - - -Applies a multi-layer gated recurrent unit (GRU) RNN to an input sequence. — nn_gru • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Applies a multi-layer gated recurrent unit (GRU) RNN to an input sequence. — nn_gru • torch - - - - - - - - + + -
-
- -
- -
+
@@ -191,63 +113,47 @@ function:" /> function:

-
nn_gru(
-  input_size,
-  hidden_size,
-  num_layers = 1,
-  bias = TRUE,
-  batch_first = FALSE,
-  dropout = 0,
-  bidirectional = FALSE,
-  ...
-)
+
+
nn_gru(
+  input_size,
+  hidden_size,
+  num_layers = 1,
+  bias = TRUE,
+  batch_first = FALSE,
+  dropout = 0,
+  bidirectional = FALSE,
+  ...
+)
+
-

Arguments

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
input_size

The number of expected features in the input x

hidden_size

The number of features in the hidden state h

num_layers

Number of recurrent layers. E.g., setting num_layers=2 +

+

Arguments

+
input_size
+

The number of expected features in the input x

+
hidden_size
+

The number of features in the hidden state h

+
num_layers
+

Number of recurrent layers. E.g., setting num_layers=2 would mean stacking two GRUs together to form a stacked GRU, with the second GRU taking in outputs of the first GRU and -computing the final results. Default: 1

bias

If FALSE, then the layer does not use bias weights b_ih and b_hh. -Default: TRUE

batch_first

If TRUE, then the input and output tensors are provided -as (batch, seq, feature). Default: FALSE

dropout

If non-zero, introduces a Dropout layer on the outputs of each +computing the final results. Default: 1

+
bias
+

If FALSE, then the layer does not use bias weights b_ih and b_hh. +Default: TRUE

+
batch_first
+

If TRUE, then the input and output tensors are provided +as (batch, seq, feature). Default: FALSE

+
dropout
+

If non-zero, introduces a Dropout layer on the outputs of each GRU layer except the last layer, with dropout probability equal to -dropout. Default: 0

bidirectional

If TRUE, becomes a bidirectional GRU. Default: FALSE

...

currently unused.

- -

Details

- +dropout. Default: 0

+
bidirectional
+

If TRUE, becomes a bidirectional GRU. Default: FALSE

+
...
+

currently unused.

+
+
+

Details

$$ \begin{array}{ll} r_t = \sigma(W_{ir} x_t + b_{ir} + W_{hr} h_{(t-1)} + b_{hr}) \\ @@ -261,32 +167,31 @@ at time t, \(h_{(t-1)}\) is the hidden state of the previous layer at time t-1 or the initial hidden state at time 0, and \(r_t\), \(z_t\), \(n_t\) are the reset, update, and new gates, respectively. \(\sigma\) is the sigmoid function.

-

Note

- +
+
+

Note

All the weights and biases are initialized from \(\mathcal{U}(-\sqrt{k}, \sqrt{k})\) where \(k = \frac{1}{\mbox{hidden\_size}}\)

-

Inputs

- +
+
+

Inputs

-

Inputs: input, h_0

    -
  • input of shape (seq_len, batch, input_size): tensor containing the features +

    Inputs: input, h_0

    • input of shape (seq_len, batch, input_size): tensor containing the features of the input sequence. The input can also be a packed variable length -sequence. See nn_utils_rnn_pack_padded_sequence() +sequence. See nn_utils_rnn_pack_padded_sequence() for details.

    • h_0 of shape (num_layers * num_directions, batch, hidden_size): tensor containing the initial hidden state for each element in the batch. Defaults to zero if not provided.

    • -
    - -

    Outputs

    - +
+
+

Outputs

-

Outputs: output, h_n

    -
  • output of shape (seq_len, batch, num_directions * hidden_size): tensor +

    Outputs: output, h_n

    • output of shape (seq_len, batch, num_directions * hidden_size): tensor containing the output features h_t from the last layer of the GRU, for each t. If a PackedSequence has been given as the input, the output will also be a packed sequence. @@ -298,14 +203,12 @@ Similarly, the directions can be separated in the packed case.

    • containing the hidden state for t = seq_len Like output, the layers can be separated using h_n$view(num_layers, num_directions, batch, hidden_size).

      -
    - -

    Attributes

    - +
+
+

Attributes

-
    -
  • weight_ih_l[k] : the learnable input-hidden weights of the \(\mbox{k}^{th}\) layer +

    • weight_ih_l[k] : the learnable input-hidden weights of the \(\mbox{k}^{th}\) layer (W_ir|W_iz|W_in), of shape (3*hidden_size x input_size)

    • weight_hh_l[k] : the learnable hidden-hidden weights of the \(\mbox{k}^{th}\) layer (W_hr|W_hz|W_hn), of shape (3*hidden_size x hidden_size)

    • @@ -313,44 +216,41 @@ Like output, the layers can be separated using (b_ir|b_iz|b_in), of shape (3*hidden_size)

    • bias_hh_l[k] : the learnable hidden-hidden bias of the \(\mbox{k}^{th}\) layer (b_hr|b_hz|b_hn), of shape (3*hidden_size)

    • -
    - - -

    Examples

    -
    if (torch_is_installed()) {
    -
    -rnn <- nn_gru(10, 20, 2)
    -input <- torch_randn(5, 3, 10)
    -h0 <- torch_randn(2, 3, 20)
    -output <- rnn(input, h0)
    -
    -}
    -
    +
+ +
+

Examples

+
if (torch_is_installed()) {
+
+rnn <- nn_gru(10, 20, 2)
+input <- torch_randn(5, 3, 10)
+h0 <- torch_randn(2, 3, 20)
+output <- rnn(input, h0)
+
+}
+
+
+
-
- +
- - + + diff --git a/dev/reference/nn_hardshrink.html b/dev/reference/nn_hardshrink.html index 277f964e4..570af5c22 100644 --- a/dev/reference/nn_hardshrink.html +++ b/dev/reference/nn_hardshrink.html @@ -1,79 +1,18 @@ - - - - - - - -Hardshwink module — nn_hardshrink • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Hardshwink module — nn_hardshrink • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,19 +111,17 @@

Applies the hard shrinkage function element-wise:

-
nn_hardshrink(lambd = 0.5)
- -

Arguments

- - - - - - -
lambd

the \(\lambda\) value for the Hardshrink formulation. Default: 0.5

- -

Details

+
+
nn_hardshrink(lambd = 0.5)
+
+
+

Arguments

+
lambd
+

the \(\lambda\) value for the Hardshrink formulation. Default: 0.5

+
+
+

Details

$$ \mbox{HardShrink}(x) = \left\{ \begin{array}{ll} @@ -211,50 +131,47 @@ x, & \mbox{ if } x < -\lambda \\ \end{array} \right. $$

-

Shape

- +
+
+

Shape

-
    -
  • Input: \((N, *)\) where * means, any number of additional +

    • Input: \((N, *)\) where * means, any number of additional dimensions

    • Output: \((N, *)\), same shape as the input

    • -
    - - -

    Examples

    -
    if (torch_is_installed()) {
    -m <- nn_hardshrink()
    -input <- torch_randn(2)
    -output <- m(input)
    -
    -}
    -
    +
+ +
+

Examples

+
if (torch_is_installed()) {
+m <- nn_hardshrink()
+input <- torch_randn(2)
+output <- m(input)
+
+}
+
+
+
-
- +
- - + + diff --git a/dev/reference/nn_hardsigmoid.html b/dev/reference/nn_hardsigmoid.html index 75b57910b..63690cd94 100644 --- a/dev/reference/nn_hardsigmoid.html +++ b/dev/reference/nn_hardsigmoid.html @@ -1,79 +1,18 @@ - - - - - - - -Hardsigmoid module — nn_hardsigmoid • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Hardsigmoid module — nn_hardsigmoid • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,11 +111,12 @@

Applies the element-wise function:

-
nn_hardsigmoid()
- - -

Details

+
+
nn_hardsigmoid()
+
+
+

Details

$$ \mbox{Hardsigmoid}(x) = \left\{ \begin{array}{ll} 0 & \mbox{if~} x \le -3, \\ @@ -202,50 +125,47 @@ \end{array} \right. $$

-

Shape

- +
+
+

Shape

-
    -
  • Input: \((N, *)\) where * means, any number of additional +

    • Input: \((N, *)\) where * means, any number of additional dimensions

    • Output: \((N, *)\), same shape as the input

    • -
    - - -

    Examples

    -
    if (torch_is_installed()) {
    -m <- nn_hardsigmoid()
    -input <- torch_randn(2)
    -output <- m(input)
    -
    -}
    -
    +
+ +
+

Examples

+
if (torch_is_installed()) {
+m <- nn_hardsigmoid()
+input <- torch_randn(2)
+output <- m(input)
+
+}
+
+
+
-
- +
- - + + diff --git a/dev/reference/nn_hardswish.html b/dev/reference/nn_hardswish.html index 871dabc9c..9df03e228 100644 --- a/dev/reference/nn_hardswish.html +++ b/dev/reference/nn_hardswish.html @@ -1,80 +1,19 @@ - - - - - - - -Hardswish module — nn_hardswish • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Hardswish module — nn_hardswish • torch - - - - - - - - + + -
-
- -
- -
+

Applies the hardswish function, element-wise, as described in the paper: -Searching for MobileNetV3

+Searching for MobileNetV3

-
nn_hardswish()
- - -

Details

+
+
nn_hardswish()
+
+
+

Details

$$ \mbox{Hardswish}(x) = \left\{ \begin{array}{ll} 0 & \mbox{if } x \le -3, \\ @@ -203,52 +126,49 @@ Searching for MobileNetV3" /> x \cdot (x + 3)/6 & \mbox{otherwise} \end{array} \right. $$

-

Shape

- +
+
+

Shape

-
    -
  • Input: \((N, *)\) where * means, any number of additional +

    • Input: \((N, *)\) where * means, any number of additional dimensions

    • Output: \((N, *)\), same shape as the input

    • -
    - - -

    Examples

    -
    if (torch_is_installed()) {
    -if (FALSE) {
    -m <- nn_hardswish()
    -input <- torch_randn(2)
    -output <- m(input)
    -}
    -
    -}
    -
    +
+ +
+

Examples

+
if (torch_is_installed()) {
+if (FALSE) {
+m <- nn_hardswish()
+input <- torch_randn(2)
+output <- m(input)
+}
+
+}
+
+
+
-
- +
- - + + diff --git a/dev/reference/nn_hardtanh.html b/dev/reference/nn_hardtanh.html index 4c2a66de4..bddb01a90 100644 --- a/dev/reference/nn_hardtanh.html +++ b/dev/reference/nn_hardtanh.html @@ -1,80 +1,19 @@ - - - - - - - -Hardtanh module — nn_hardtanh • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Hardtanh module — nn_hardtanh • torch - - - - - - - - + + -
-
- -
- -
+
@@ -191,27 +113,21 @@ HardTanh is defined as:" /> HardTanh is defined as:

-
nn_hardtanh(min_val = -1, max_val = 1, inplace = FALSE)
- -

Arguments

- - - - - - - - - - - - - - -
min_val

minimum value of the linear region range. Default: -1

max_val

maximum value of the linear region range. Default: 1

inplace

can optionally do the operation in-place. Default: FALSE

- -

Details

+
+
nn_hardtanh(min_val = -1, max_val = 1, inplace = FALSE)
+
+
+

Arguments

+
min_val
+

minimum value of the linear region range. Default: -1

+
max_val
+

maximum value of the linear region range. Default: 1

+
inplace
+

can optionally do the operation in-place. Default: FALSE

+
+
+

Details

$$ \mbox{HardTanh}(x) = \left\{ \begin{array}{ll} 1 & \mbox{ if } x > 1 \\ @@ -222,50 +138,47 @@ HardTanh is defined as:

$$

The range of the linear region :math:[-1, 1] can be adjusted using min_val and max_val.

-

Shape

- +
+
+

Shape

-
    -
  • Input: \((N, *)\) where * means, any number of additional +

    • Input: \((N, *)\) where * means, any number of additional dimensions

    • Output: \((N, *)\), same shape as the input

    • -
    - - -

    Examples

    -
    if (torch_is_installed()) {
    -m <- nn_hardtanh(-2, 2)
    -input <- torch_randn(2)
    -output <- m(input)
    -
    -}
    -
    +
+ +
+

Examples

+
if (torch_is_installed()) {
+m <- nn_hardtanh(-2, 2)
+input <- torch_randn(2)
+output <- m(input)
+
+}
+
+
+
-
- +
- - + + diff --git a/dev/reference/nn_hinge_embedding_loss.html b/dev/reference/nn_hinge_embedding_loss.html index fbc2ac497..ab9619a08 100644 --- a/dev/reference/nn_hinge_embedding_loss.html +++ b/dev/reference/nn_hinge_embedding_loss.html @@ -1,80 +1,19 @@ - - - - - - - -Hinge embedding loss — nn_hinge_embedding_loss • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Hinge embedding loss — nn_hinge_embedding_loss • torch - - - - - - - - + + -
-
- -
- -
+
@@ -191,28 +113,24 @@ (containing 1 or -1).

-
nn_hinge_embedding_loss(margin = 1, reduction = "mean")
+
+
nn_hinge_embedding_loss(margin = 1, reduction = "mean")
+
-

Arguments

- - - - - - - - - - -
margin

(float, optional): Has a default value of 1.

reduction

(string, optional): Specifies the reduction to apply to the output: +

+

Arguments

+
margin
+

(float, optional): Has a default value of 1.

+
reduction
+

(string, optional): Specifies the reduction to apply to the output: 'none' | 'mean' | 'sum'. 'none': no reduction will be applied, 'mean': the sum of the output will be divided by the number of elements in the output, 'sum': the output will be summed. Note: size_average and reduce are in the process of being deprecated, and in the meantime, -specifying either of those two args will override reduction. Default: 'mean'

- -

Details

- +specifying either of those two args will override reduction. Default: 'mean'

+
+
+

Details

This is usually used for measuring whether two inputs are similar or dissimilar, e.g. using the L1 pairwise distance as \(x\), and is typically used for learning nonlinear embeddings or semi-supervised learning. @@ -231,43 +149,38 @@ $$

\end{array} $$

where \(L = \{l_1,\dots,l_N\}^\top\).

-

Shape

- +
+
+

Shape

-
    -
  • Input: \((*)\) where \(*\) means, any number of dimensions. The sum operation +

    • Input: \((*)\) where \(*\) means, any number of dimensions. The sum operation operates over all the elements.

    • Target: \((*)\), same shape as the input

    • Output: scalar. If reduction is 'none', then same shape as the input

    • -
    - +
+
-
- +
- - + + diff --git a/dev/reference/nn_identity.html b/dev/reference/nn_identity.html index 8b6e8bb40..3f23fe8ce 100644 --- a/dev/reference/nn_identity.html +++ b/dev/reference/nn_identity.html @@ -1,79 +1,18 @@ - - - - - - - -Identity module — nn_identity • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Identity module — nn_identity • torch - - - - - - + + - - -
-
- -
- -
+
@@ -189,53 +111,49 @@

A placeholder identity operator that is argument-insensitive.

-
nn_identity(...)
- -

Arguments

- - - - - - -
...

any arguments (unused)

- - -

Examples

-
if (torch_is_installed()) {
-m <- nn_identity(54, unused_argument1 = 0.1, unused_argument2 = FALSE)
-input <- torch_randn(128, 20)
-output <- m(input)
-print(output$size())
-
-}
-#> [1] 128  20
-
+
+
nn_identity(...)
+
+ +
+

Arguments

+
...
+

any arguments (unused)

+
+ +
+

Examples

+
if (torch_is_installed()) {
+m <- nn_identity(54, unused_argument1 = 0.1, unused_argument2 = FALSE)
+input <- torch_randn(128, 20)
+output <- m(input)
+print(output$size())
+
+}
+#> [1] 128  20
+
+
+
-
- +
- - + + diff --git a/dev/reference/nn_init_calculate_gain.html b/dev/reference/nn_init_calculate_gain.html index 712139daa..9a220fe82 100644 --- a/dev/reference/nn_init_calculate_gain.html +++ b/dev/reference/nn_init_calculate_gain.html @@ -1,79 +1,18 @@ - - - - - - - -Calculate gain — nn_init_calculate_gain • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Calculate gain — nn_init_calculate_gain • torch - - - - - - + + - - -
-
- -
- -
+
@@ -189,47 +111,39 @@

Return the recommended gain value for the given nonlinearity function.

-
nn_init_calculate_gain(nonlinearity, param = NULL)
- -

Arguments

- - - - - - - - - - -
nonlinearity

the non-linear function

param

optional parameter for the non-linear function

+
+
nn_init_calculate_gain(nonlinearity, param = NULL)
+
+
+

Arguments

+
nonlinearity
+

the non-linear function

+
param
+

optional parameter for the non-linear function

+
+
-
- +
- - + + diff --git a/dev/reference/nn_init_constant_.html b/dev/reference/nn_init_constant_.html index f7f9f911a..14e2cf9d9 100644 --- a/dev/reference/nn_init_constant_.html +++ b/dev/reference/nn_init_constant_.html @@ -1,79 +1,18 @@ - - - - - - - -Constant initialization — nn_init_constant_ • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Constant initialization — nn_init_constant_ • torch - - - - - - + + - - -
-
- -
- -
+
@@ -189,59 +111,53 @@

Fills the input Tensor with the value val.

-
nn_init_constant_(tensor, val)
- -

Arguments

- - - - - - - - - - -
tensor

an n-dimensional Tensor

val

the value to fill the tensor with

- - -

Examples

-
if (torch_is_installed()) {
-w <- torch_empty(3, 5)
-nn_init_constant_(w, 0.3)
-
-}
-#> torch_tensor
-#>  0.3000  0.3000  0.3000  0.3000  0.3000
-#>  0.3000  0.3000  0.3000  0.3000  0.3000
-#>  0.3000  0.3000  0.3000  0.3000  0.3000
-#> [ CPUFloatType{3,5} ]
-
+
+
nn_init_constant_(tensor, val)
+
+ +
+

Arguments

+
tensor
+

an n-dimensional Tensor

+
val
+

the value to fill the tensor with

+
+ +
+

Examples

+
if (torch_is_installed()) {
+w <- torch_empty(3, 5)
+nn_init_constant_(w, 0.3)
+
+}
+#> torch_tensor
+#>  0.3000  0.3000  0.3000  0.3000  0.3000
+#>  0.3000  0.3000  0.3000  0.3000  0.3000
+#>  0.3000  0.3000  0.3000  0.3000  0.3000
+#> [ CPUFloatType{3,5} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/nn_init_dirac_.html b/dev/reference/nn_init_dirac_.html index 19cfcdbb6..7102c8522 100644 --- a/dev/reference/nn_init_dirac_.html +++ b/dev/reference/nn_init_dirac_.html @@ -1,82 +1,21 @@ - - - - - - - -Dirac initialization — nn_init_dirac_ • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Dirac initialization — nn_init_dirac_ • torch - - - - - - - - - - - - - - - + + - - -
-
- -
- -
+
@@ -195,56 +117,50 @@ layers, where as many input channels are preserved as possible. In case of groups>1, each group of channels preserves identity.

-
nn_init_dirac_(tensor, groups = 1)
- -

Arguments

- - - - - - - - - - -
tensor

a 3, 4, 5-dimensional torch.Tensor

groups

(optional) number of groups in the conv layer (default: 1)

- - -

Examples

-
if (torch_is_installed()) {
-if (FALSE) {
-w <- torch_empty(3, 16, 5, 5)
-nn_init_dirac_(w)
-}
-
-}
-
+
+
nn_init_dirac_(tensor, groups = 1)
+
+ +
+

Arguments

+
tensor
+

a 3, 4, 5-dimensional torch.Tensor

+
groups
+

(optional) number of groups in the conv layer (default: 1)

+
+ +
+

Examples

+
if (torch_is_installed()) {
+if (FALSE) {
+w <- torch_empty(3, 16, 5, 5)
+nn_init_dirac_(w)
+}
+
+}
+
+
+
-
- +
- - + + diff --git a/dev/reference/nn_init_eye_.html b/dev/reference/nn_init_eye_.html index 586c51bc4..a131a03b5 100644 --- a/dev/reference/nn_init_eye_.html +++ b/dev/reference/nn_init_eye_.html @@ -1,81 +1,20 @@ - - - - - - - -Eye initialization — nn_init_eye_ • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Eye initialization — nn_init_eye_ • torch - - - - - - - - - - - - - - - + + - - -
-
- -
- -
+
@@ -193,55 +115,51 @@ Preserves the identity of the inputs in Linear layers, where as many inputs are preserved as possible.

-
nn_init_eye_(tensor)
- -

Arguments

- - - - - - -
tensor

a 2-dimensional torch tensor.

- - -

Examples

-
if (torch_is_installed()) {
-w <- torch_empty(3, 5)
-nn_init_eye_(w)
-
-}
-#> torch_tensor
-#>  1  0  0  0  0
-#>  0  1  0  0  0
-#>  0  0  1  0  0
-#> [ CPUFloatType{3,5} ]
-
+
+
nn_init_eye_(tensor)
+
+ +
+

Arguments

+
tensor
+

a 2-dimensional torch tensor.

+
+ +
+

Examples

+
if (torch_is_installed()) {
+w <- torch_empty(3, 5)
+nn_init_eye_(w)
+
+}
+#> torch_tensor
+#>  1  0  0  0  0
+#>  0  1  0  0  0
+#>  0  0  1  0  0
+#> [ CPUFloatType{3,5} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/nn_init_kaiming_normal_.html b/dev/reference/nn_init_kaiming_normal_.html index c6e86714f..e73c6a3d8 100644 --- a/dev/reference/nn_init_kaiming_normal_.html +++ b/dev/reference/nn_init_kaiming_normal_.html @@ -1,81 +1,20 @@ - - - - - - - -Kaiming normal initialization — nn_init_kaiming_normal_ • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Kaiming normal initialization — nn_init_kaiming_normal_ • torch - - - - - - - - - - - - - - - - - + + -
-
- -
- -
+
@@ -193,76 +115,66 @@ described in Delving deep into rectifiers: Surpassing human-level performa normal distribution.

-
nn_init_kaiming_normal_(
-  tensor,
-  a = 0,
-  mode = "fan_in",
-  nonlinearity = "leaky_relu"
-)
+
+
nn_init_kaiming_normal_(
+  tensor,
+  a = 0,
+  mode = "fan_in",
+  nonlinearity = "leaky_relu"
+)
+
-

Arguments

- - - - - - - - - - - - - - - - - - -
tensor

an n-dimensional torch.Tensor

a

the negative slope of the rectifier used after this layer (only used -with 'leaky_relu')

mode

either 'fan_in' (default) or 'fan_out'. Choosing 'fan_in' preserves +

+

Arguments

+
tensor
+

an n-dimensional torch.Tensor

+
a
+

the negative slope of the rectifier used after this layer (only used +with 'leaky_relu')

+
mode
+

either 'fan_in' (default) or 'fan_out'. Choosing 'fan_in' preserves the magnitude of the variance of the weights in the forward pass. Choosing -'fan_out' preserves the magnitudes in the backwards pass.

nonlinearity

the non-linear function. recommended to use only with 'relu' -or 'leaky_relu' (default).

- - -

Examples

-
if (torch_is_installed()) {
-w <- torch_empty(3, 5)
-nn_init_kaiming_normal_(w, mode = "fan_in", nonlinearity = "leaky_relu")
-
-}
-#> torch_tensor
-#> -0.6792  1.1186 -0.7690  0.7750 -0.1943
-#> -0.1540  0.0082  0.3742  0.0420  0.8249
-#>  0.1577  0.2320 -0.5648 -0.6196 -0.8011
-#> [ CPUFloatType{3,5} ]
-
+'fan_out' preserves the magnitudes in the backwards pass.

+
nonlinearity
+

the non-linear function. recommended to use only with 'relu' +or 'leaky_relu' (default).

+
+ +
+

Examples

+
if (torch_is_installed()) {
+w <- torch_empty(3, 5)
+nn_init_kaiming_normal_(w, mode = "fan_in", nonlinearity = "leaky_relu")
+
+}
+#> torch_tensor
+#>  0.5597  1.6307 -1.1737 -0.0284  0.6240
+#> -0.4227 -0.2330 -0.9105  0.7609  0.1408
+#>  0.1924 -0.7354  0.1678 -0.8725  0.7955
+#> [ CPUFloatType{3,5} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/nn_init_kaiming_uniform_.html b/dev/reference/nn_init_kaiming_uniform_.html index b57eaceb8..ab08ba728 100644 --- a/dev/reference/nn_init_kaiming_uniform_.html +++ b/dev/reference/nn_init_kaiming_uniform_.html @@ -1,81 +1,20 @@ - - - - - - - -Kaiming uniform initialization — nn_init_kaiming_uniform_ • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Kaiming uniform initialization — nn_init_kaiming_uniform_ • torch - - - - - - - - - - - - - - - - - + + -
-
- -
- -
+
@@ -193,76 +115,66 @@ described in Delving deep into rectifiers: Surpassing human-level performa uniform distribution.

-
nn_init_kaiming_uniform_(
-  tensor,
-  a = 0,
-  mode = "fan_in",
-  nonlinearity = "leaky_relu"
-)
+
+
nn_init_kaiming_uniform_(
+  tensor,
+  a = 0,
+  mode = "fan_in",
+  nonlinearity = "leaky_relu"
+)
+
-

Arguments

- - - - - - - - - - - - - - - - - - -
tensor

an n-dimensional torch.Tensor

a

the negative slope of the rectifier used after this layer (only used -with 'leaky_relu')

mode

either 'fan_in' (default) or 'fan_out'. Choosing 'fan_in' preserves +

+

Arguments

+
tensor
+

an n-dimensional torch.Tensor

+
a
+

the negative slope of the rectifier used after this layer (only used +with 'leaky_relu')

+
mode
+

either 'fan_in' (default) or 'fan_out'. Choosing 'fan_in' preserves the magnitude of the variance of the weights in the forward pass. Choosing -'fan_out' preserves the magnitudes in the backwards pass.

nonlinearity

the non-linear function. recommended to use only with 'relu' -or 'leaky_relu' (default).

- - -

Examples

-
if (torch_is_installed()) {
-w <- torch_empty(3, 5)
-nn_init_kaiming_uniform_(w, mode = "fan_in", nonlinearity = "leaky_relu")
-
-}
-#> torch_tensor
-#> -0.3597 -0.2455  1.0234  1.0863  0.4554
-#>  0.6568  0.5657  0.0153  0.1182 -0.3720
-#>  0.1252 -0.4104  0.5346  0.6952  0.0063
-#> [ CPUFloatType{3,5} ]
-
+'fan_out' preserves the magnitudes in the backwards pass.

+
nonlinearity
+

the non-linear function. recommended to use only with 'relu' +or 'leaky_relu' (default).

+
+ +
+

Examples

+
if (torch_is_installed()) {
+w <- torch_empty(3, 5)
+nn_init_kaiming_uniform_(w, mode = "fan_in", nonlinearity = "leaky_relu")
+
+}
+#> torch_tensor
+#>  1.0333  0.2205 -0.9490 -0.9102 -0.4403
+#> -0.4488  0.7044 -0.8638 -0.9148 -0.4350
+#> -0.1012  0.9291  0.5385  0.5255  1.0466
+#> [ CPUFloatType{3,5} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/nn_init_normal_.html b/dev/reference/nn_init_normal_.html index e161f3615..0711537b1 100644 --- a/dev/reference/nn_init_normal_.html +++ b/dev/reference/nn_init_normal_.html @@ -1,79 +1,18 @@ - - - - - - - -Normal initialization — nn_init_normal_ • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Normal initialization — nn_init_normal_ • torch - - - - - - + + - - -
-
- -
- -
+
@@ -189,63 +111,55 @@

Fills the input Tensor with values drawn from the normal distribution

-
nn_init_normal_(tensor, mean = 0, std = 1)
- -

Arguments

- - - - - - - - - - - - - - -
tensor

an n-dimensional Tensor

mean

the mean of the normal distribution

std

the standard deviation of the normal distribution

- - -

Examples

-
if (torch_is_installed()) {
-w <- torch_empty(3, 5)
-nn_init_normal_(w)
-
-}
-#> torch_tensor
-#>  1.5091 -0.8198 -0.7872 -0.1892  0.1993
-#>  0.9473  0.5092 -0.9673 -1.7986 -0.9718
-#> -0.5666  0.1663  0.7699 -0.2990 -0.2959
-#> [ CPUFloatType{3,5} ]
-
+
+
nn_init_normal_(tensor, mean = 0, std = 1)
+
+ +
+

Arguments

+
tensor
+

an n-dimensional Tensor

+
mean
+

the mean of the normal distribution

+
std
+

the standard deviation of the normal distribution

+
+ +
+

Examples

+
if (torch_is_installed()) {
+w <- torch_empty(3, 5)
+nn_init_normal_(w)
+
+}
+#> torch_tensor
+#> -1.1571  0.7198 -0.0445 -1.1248  1.1080
+#> -0.3596  0.5308 -0.6259  0.1228  0.2068
+#> -0.4467  0.6220 -0.1635 -0.7117  1.1448
+#> [ CPUFloatType{3,5} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/nn_init_ones_.html b/dev/reference/nn_init_ones_.html index 6be0eb93a..da8da2220 100644 --- a/dev/reference/nn_init_ones_.html +++ b/dev/reference/nn_init_ones_.html @@ -1,79 +1,18 @@ - - - - - - - -Ones initialization — nn_init_ones_ • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Ones initialization — nn_init_ones_ • torch - - - - - - + + - - -
-
- -
- -
+
@@ -189,55 +111,51 @@

Fills the input Tensor with the scalar value 1

-
nn_init_ones_(tensor)
- -

Arguments

- - - - - - -
tensor

an n-dimensional Tensor

- - -

Examples

-
if (torch_is_installed()) {
-w <- torch_empty(3, 5)
-nn_init_ones_(w)
-
-}
-#> torch_tensor
-#>  1  1  1  1  1
-#>  1  1  1  1  1
-#>  1  1  1  1  1
-#> [ CPUFloatType{3,5} ]
-
+
+
nn_init_ones_(tensor)
+
+ +
+

Arguments

+
tensor
+

an n-dimensional Tensor

+
+ +
+

Examples

+
if (torch_is_installed()) {
+w <- torch_empty(3, 5)
+nn_init_ones_(w)
+
+}
+#> torch_tensor
+#>  1  1  1  1  1
+#>  1  1  1  1  1
+#>  1  1  1  1  1
+#> [ CPUFloatType{3,5} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/nn_init_orthogonal_.html b/dev/reference/nn_init_orthogonal_.html index c0ae2d606..89cb20293 100644 --- a/dev/reference/nn_init_orthogonal_.html +++ b/dev/reference/nn_init_orthogonal_.html @@ -1,82 +1,21 @@ - - - - - - - -Orthogonal initialization — nn_init_orthogonal_ • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Orthogonal initialization — nn_init_orthogonal_ • torch - - - - - - - - - - - - - - - + + - - -
-
- -
- -
+
@@ -195,59 +117,53 @@ at least 2 dimensions, and for tensors with more than 2 dimensions the trailing dimensions are flattened.

-
nn_init_orthogonal_(tensor, gain = 1)
- -

Arguments

- - - - - - - - - - -
tensor

an n-dimensional Tensor

gain

optional scaling factor

- - -

Examples

-
if (torch_is_installed()) {
-w <- torch_empty(3,5)
-nn_init_orthogonal_(w)
-
-}
-#> torch_tensor
-#> -0.0802  0.3374  0.2647  0.8924  0.1153
-#>  0.0655  0.5401  0.7129 -0.4255  0.1213
-#>  0.7062  0.5276 -0.4176  0.0162 -0.2195
-#> [ CPUFloatType{3,5} ]
-
+
+
nn_init_orthogonal_(tensor, gain = 1)
+
+ +
+

Arguments

+
tensor
+

an n-dimensional Tensor

+
gain
+

optional scaling factor

+
+ +
+

Examples

+
if (torch_is_installed()) {
+w <- torch_empty(3,5)
+nn_init_orthogonal_(w)
+
+}
+#> torch_tensor
+#> -0.3827 -0.4775 -0.0170  0.7565  0.2300
+#> -0.7800  0.3363 -0.4935 -0.1851 -0.0275
+#>  0.0643 -0.6951 -0.4478 -0.2671 -0.4907
+#> [ CPUFloatType{3,5} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/nn_init_sparse_.html b/dev/reference/nn_init_sparse_.html index 9b03048c9..37065d7aa 100644 --- a/dev/reference/nn_init_sparse_.html +++ b/dev/reference/nn_init_sparse_.html @@ -1,81 +1,20 @@ - - - - - - - -Sparse initialization — nn_init_sparse_ • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Sparse initialization — nn_init_sparse_ • torch - - - - - - - - - - - - - - - + + - - -
-
- -
- -
+
@@ -193,60 +115,52 @@ non-zero elements will be drawn from the normal distribution as described in Deep learning via Hessian-free optimization - Martens, J. (2010).

-
nn_init_sparse_(tensor, sparsity, std = 0.01)
- -

Arguments

- - - - - - - - - - - - - - -
tensor

an n-dimensional Tensor

sparsity

The fraction of elements in each column to be set to zero

std

the standard deviation of the normal distribution used to generate -the non-zero values

- - -

Examples

-
if (torch_is_installed()) {
-if (FALSE) {
-w <- torch_empty(3, 5)
-nn_init_sparse_(w, sparsity = 0.1)
-}
-}
-
+
+
nn_init_sparse_(tensor, sparsity, std = 0.01)
+
+ +
+

Arguments

+
tensor
+

an n-dimensional Tensor

+
sparsity
+

The fraction of elements in each column to be set to zero

+
std
+

the standard deviation of the normal distribution used to generate +the non-zero values

+
+ +
+

Examples

+
if (torch_is_installed()) {
+if (FALSE) {
+w <- torch_empty(3, 5)
+nn_init_sparse_(w, sparsity = 0.1)
+}
+}
+
+
+
-
- +
- - + + diff --git a/dev/reference/nn_init_trunc_normal_.html b/dev/reference/nn_init_trunc_normal_.html index 10fc6960e..3eec5a0f2 100644 --- a/dev/reference/nn_init_trunc_normal_.html +++ b/dev/reference/nn_init_trunc_normal_.html @@ -1,80 +1,19 @@ - - - - - - - -Truncated normal initialization — nn_init_trunc_normal_ • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Truncated normal initialization — nn_init_trunc_normal_ • torch - - - - - - - - + + -
-
- -
- -
+
@@ -191,71 +113,59 @@ normal distribution." /> normal distribution.

-
nn_init_trunc_normal_(tensor, mean = 0, std = 1, a = -2, b = 2)
- -

Arguments

- - - - - - - - - - - - - - - - - - - - - - -
tensor

an n-dimensional Tensor

mean

the mean of the normal distribution

std

the standard deviation of the normal distribution

a

the minimum cutoff value

b

the maximum cutoff value

- +
+
nn_init_trunc_normal_(tensor, mean = 0, std = 1, a = -2, b = 2)
+
-

Examples

-
if (torch_is_installed()) {
-w <- torch_empty(3, 5)
-nn_init_trunc_normal_(w)
-
-}
-#> torch_tensor
-#>  0.3472 -0.1520  1.8191 -0.3626 -0.0984
-#> -0.4118 -0.1650  0.6247 -0.4865 -0.4083
-#> -1.6809  1.4343 -1.8766  0.1507  0.3511
-#> [ CPUFloatType{3,5} ]
-
+
+

Arguments

+
tensor
+

an n-dimensional Tensor

+
mean
+

the mean of the normal distribution

+
std
+

the standard deviation of the normal distribution

+
a
+

the minimum cutoff value

+
b
+

the maximum cutoff value

+
+ +
+

Examples

+
if (torch_is_installed()) {
+w <- torch_empty(3, 5)
+nn_init_trunc_normal_(w)
+
+}
+#> torch_tensor
+#>  0.5455 -0.1162  0.5018  0.6756 -0.4415
+#> -0.4394  1.0757  1.3277  0.1873  0.4977
+#> -1.1916 -0.2625  0.1538  1.1972  1.8154
+#> [ CPUFloatType{3,5} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/nn_init_uniform_.html b/dev/reference/nn_init_uniform_.html index 165d565d8..3dd89073b 100644 --- a/dev/reference/nn_init_uniform_.html +++ b/dev/reference/nn_init_uniform_.html @@ -1,79 +1,18 @@ - - - - - - - -Uniform initialization — nn_init_uniform_ • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Uniform initialization — nn_init_uniform_ • torch - - - - - - + + - - -
-
- -
- -
+
@@ -189,63 +111,55 @@

Fills the input Tensor with values drawn from the uniform distribution

-
nn_init_uniform_(tensor, a = 0, b = 1)
- -

Arguments

- - - - - - - - - - - - - - -
tensor

an n-dimensional Tensor

a

the lower bound of the uniform distribution

b

the upper bound of the uniform distribution

- - -

Examples

-
if (torch_is_installed()) {
-w <- torch_empty(3, 5)
-nn_init_uniform_(w)
-
-}
-#> torch_tensor
-#>  0.3068  0.9416  0.9948  0.5596  0.7974
-#>  0.4951  0.9223  0.1013  0.2746  0.8222
-#>  0.4814  0.3279  0.4280  0.3882  0.9761
-#> [ CPUFloatType{3,5} ]
-
+
+
nn_init_uniform_(tensor, a = 0, b = 1)
+
+ +
+

Arguments

+
tensor
+

an n-dimensional Tensor

+
a
+

the lower bound of the uniform distribution

+
b
+

the upper bound of the uniform distribution

+
+ +
+

Examples

+
if (torch_is_installed()) {
+w <- torch_empty(3, 5)
+nn_init_uniform_(w)
+
+}
+#> torch_tensor
+#>  0.6769  0.6400  0.3228  0.9061  0.4819
+#>  0.0917  0.8477  0.8595  0.6387  0.1965
+#>  0.0443  0.7941  0.2130  0.8781  0.4385
+#> [ CPUFloatType{3,5} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/nn_init_xavier_normal_.html b/dev/reference/nn_init_xavier_normal_.html index 82ed4fc8c..b7ecf6fbd 100644 --- a/dev/reference/nn_init_xavier_normal_.html +++ b/dev/reference/nn_init_xavier_normal_.html @@ -1,81 +1,20 @@ - - - - - - - -Xavier normal initialization — nn_init_xavier_normal_ • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Xavier normal initialization — nn_init_xavier_normal_ • torch - - - - - - - - - - - - - - - + + - - -
-
- -
- -
+
@@ -193,59 +115,53 @@ described in Understanding the difficulty of training deep feedforward neu distribution.

-
nn_init_xavier_normal_(tensor, gain = 1)
- -

Arguments

- - - - - - - - - - -
tensor

an n-dimensional Tensor

gain

an optional scaling factor

- - -

Examples

-
if (torch_is_installed()) {
-w <- torch_empty(3, 5)
-nn_init_xavier_normal_(w)
-
-}
-#> torch_tensor
-#> -0.1307  0.2649 -0.7583  0.1676  0.5796
-#>  1.4691 -0.6556  1.0769 -0.1324 -0.3864
-#> -0.7963  0.6202  0.2521  0.2650 -0.7918
-#> [ CPUFloatType{3,5} ]
-
+
+
nn_init_xavier_normal_(tensor, gain = 1)
+
+ +
+

Arguments

+
tensor
+

an n-dimensional Tensor

+
gain
+

an optional scaling factor

+
+ +
+

Examples

+
if (torch_is_installed()) {
+w <- torch_empty(3, 5)
+nn_init_xavier_normal_(w)
+
+}
+#> torch_tensor
+#> -0.3113 -0.3936 -0.6188 -0.6611 -0.0949
+#>  0.3428 -0.6016 -0.0857  0.1810 -0.4266
+#> -0.5410 -0.7038 -0.6446  0.0237 -0.0038
+#> [ CPUFloatType{3,5} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/nn_init_xavier_uniform_.html b/dev/reference/nn_init_xavier_uniform_.html index 785f99b02..1eddc2436 100644 --- a/dev/reference/nn_init_xavier_uniform_.html +++ b/dev/reference/nn_init_xavier_uniform_.html @@ -1,81 +1,20 @@ - - - - - - - -Xavier uniform initialization — nn_init_xavier_uniform_ • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Xavier uniform initialization — nn_init_xavier_uniform_ • torch - - - - - - - - - - - - - - - + + - - -
-
- -
- -
+
@@ -193,59 +115,53 @@ described in Understanding the difficulty of training deep feedforward neu distribution.

-
nn_init_xavier_uniform_(tensor, gain = 1)
- -

Arguments

- - - - - - - - - - -
tensor

an n-dimensional Tensor

gain

an optional scaling factor

- - -

Examples

-
if (torch_is_installed()) {
-w <- torch_empty(3, 5)
-nn_init_xavier_uniform_(w)
-
-}
-#> torch_tensor
-#>  0.5033  0.3168  0.3422 -0.2498  0.3055
-#>  0.5362 -0.7325  0.5433  0.3791 -0.0240
-#> -0.2203 -0.6872  0.7151  0.3301  0.2871
-#> [ CPUFloatType{3,5} ]
-
+
+
nn_init_xavier_uniform_(tensor, gain = 1)
+
+ +
+

Arguments

+
tensor
+

an n-dimensional Tensor

+
gain
+

an optional scaling factor

+
+ +
+

Examples

+
if (torch_is_installed()) {
+w <- torch_empty(3, 5)
+nn_init_xavier_uniform_(w)
+
+}
+#> torch_tensor
+#>  0.7878 -0.7953 -0.4437 -0.4975 -0.8106
+#> -0.7286 -0.8021  0.4725 -0.4185 -0.0301
+#> -0.5941  0.1946  0.5911  0.4893 -0.1208
+#> [ CPUFloatType{3,5} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/nn_init_zeros_.html b/dev/reference/nn_init_zeros_.html index 32b0d29ec..9cae20dba 100644 --- a/dev/reference/nn_init_zeros_.html +++ b/dev/reference/nn_init_zeros_.html @@ -1,79 +1,18 @@ - - - - - - - -Zeros initialization — nn_init_zeros_ • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Zeros initialization — nn_init_zeros_ • torch - - - - - - + + - - -
-
- -
- -
+
@@ -189,55 +111,51 @@

Fills the input Tensor with the scalar value 0

-
nn_init_zeros_(tensor)
- -

Arguments

- - - - - - -
tensor

an n-dimensional tensor

- - -

Examples

-
if (torch_is_installed()) {
-w <- torch_empty(3, 5)
-nn_init_zeros_(w)
-
-}
-#> torch_tensor
-#>  0  0  0  0  0
-#>  0  0  0  0  0
-#>  0  0  0  0  0
-#> [ CPUFloatType{3,5} ]
-
+
+
nn_init_zeros_(tensor)
+
+ +
+

Arguments

+
tensor
+

an n-dimensional tensor

+
+ +
+

Examples

+
if (torch_is_installed()) {
+w <- torch_empty(3, 5)
+nn_init_zeros_(w)
+
+}
+#> torch_tensor
+#>  0  0  0  0  0
+#>  0  0  0  0  0
+#>  0  0  0  0  0
+#> [ CPUFloatType{3,5} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/nn_kl_div_loss.html b/dev/reference/nn_kl_div_loss.html index a3491f40b..3addcd42e 100644 --- a/dev/reference/nn_kl_div_loss.html +++ b/dev/reference/nn_kl_div_loss.html @@ -1,83 +1,22 @@ - - - - - - - -Kullback-Leibler divergence loss — nn_kl_div_loss • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Kullback-Leibler divergence loss — nn_kl_div_loss • torch - - - - - - - - - - - - - - - - - + + -
-
- -
- -
+

The Kullback-Leibler divergence loss measure -Kullback-Leibler divergence +Kullback-Leibler divergence is a useful distance measure for continuous distributions and is often useful when performing direct regression over the space of (discretely sampled) continuous output distributions.

-
nn_kl_div_loss(reduction = "mean")
+
+
nn_kl_div_loss(reduction = "mean")
+
-

Arguments

- - - - - - -
reduction

(string, optional): Specifies the reduction to apply to the output: +

+

Arguments

+
reduction
+

(string, optional): Specifies the reduction to apply to the output: 'none' | 'batchmean' | 'sum' | 'mean'. 'none': no reduction will be applied. 'batchmean': the sum of the output will be divided by batchsize. 'sum': the output will be summed. 'mean': the output will be divided by the number of elements in the output. -Default: 'mean'

- -

Details

- -

As with nn_nll_loss(), the input given is expected to contain +Default: 'mean'

+
+
+

Details

+

As with nn_nll_loss(), the input given is expected to contain log-probabilities and is not restricted to a 2D Tensor.

The targets are interpreted as probabilities by default, but could be considered as log-probabilities with log_target set to TRUE.

@@ -241,51 +161,47 @@ over observations as well as over dimensions. 'batchmean' correct KL divergence where losses are averaged over batch dimension only. 'mean' mode's behavior will be changed to the same as 'batchmean' in the next major release.

-

Note

- +
+
+

Note

reduction = 'mean' doesn't return the true kl divergence value, please use reduction = 'batchmean' which aligns with KL math definition. In the next major release, 'mean' will be changed to be the same as 'batchmean'.

-

Shape

- +
+
+

Shape

-
    -
  • Input: \((N, *)\) where \(*\) means, any number of additional +

    • Input: \((N, *)\) where \(*\) means, any number of additional dimensions

    • Target: \((N, *)\), same shape as the input

    • Output: scalar by default. If reduction is 'none', then \((N, *)\), the same shape as the input

    • -
    - +
+
-
- +
- - + + diff --git a/dev/reference/nn_l1_loss.html b/dev/reference/nn_l1_loss.html index 3cdbcd940..2dbecc87a 100644 --- a/dev/reference/nn_l1_loss.html +++ b/dev/reference/nn_l1_loss.html @@ -1,80 +1,19 @@ - - - - - - - -L1 loss — nn_l1_loss • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -L1 loss — nn_l1_loss • torch - - - - - - - - + + -
-
- -
- -
+
@@ -191,24 +113,22 @@ element in the input \(x\) and target \(y\)." /> element in the input \(x\) and target \(y\).

-
nn_l1_loss(reduction = "mean")
+
+
nn_l1_loss(reduction = "mean")
+
-

Arguments

- - - - - - -
reduction

(string, optional): Specifies the reduction to apply to the output: +

+

Arguments

+
reduction
+

(string, optional): Specifies the reduction to apply to the output: 'none' | 'mean' | 'sum'. 'none': no reduction will be applied, 'mean': the sum of the output will be divided by the number of elements in the output, 'sum': the output will be summed. Note: size_average and reduce are in the process of being deprecated, and in the meantime, -specifying either of those two args will override reduction. Default: 'mean'

- -

Details

- +specifying either of those two args will override reduction. Default: 'mean'

+
+
+

Details

The unreduced (i.e. with reduction set to 'none') loss can be described as:

$$ @@ -228,54 +148,51 @@ $$

of \(n\) elements each.

The sum operation still operates over all the elements, and divides by \(n\). The division by \(n\) can be avoided if one sets reduction = 'sum'.

-

Shape

- +
+
+

Shape

-
    -
  • Input: \((N, *)\) where \(*\) means, any number of additional +

    • Input: \((N, *)\) where \(*\) means, any number of additional dimensions

    • Target: \((N, *)\), same shape as the input

    • Output: scalar. If reduction is 'none', then \((N, *)\), same shape as the input

    • -
    - - -

    Examples

    -
    if (torch_is_installed()) {
    -loss <- nn_l1_loss()
    -input <- torch_randn(3, 5, requires_grad=TRUE)
    -target <- torch_randn(3, 5)
    -output <- loss(input, target)
    -output$backward()
    -
    -}
    -
    +
+ +
+

Examples

+
if (torch_is_installed()) {
+loss <- nn_l1_loss()
+input <- torch_randn(3, 5, requires_grad=TRUE)
+target <- torch_randn(3, 5)
+output <- loss(input, target)
+output$backward()
+
+}
+
+
+
-
- +
- - + + diff --git a/dev/reference/nn_layer_norm.html b/dev/reference/nn_layer_norm.html index 9744dec4f..3cba6ef17 100644 --- a/dev/reference/nn_layer_norm.html +++ b/dev/reference/nn_layer_norm.html @@ -1,80 +1,19 @@ - - - - - - - -Layer normalization — nn_layer_norm • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Layer normalization — nn_layer_norm • torch - - - - - - - - + + -
-
- -
- -
+

Applies Layer Normalization over a mini-batch of inputs as described in -the paper Layer Normalization

+the paper Layer Normalization

-
nn_layer_norm(normalized_shape, eps = 1e-05, elementwise_affine = TRUE)
+
+
nn_layer_norm(normalized_shape, eps = 1e-05, elementwise_affine = TRUE)
+
-

Arguments

- - - - - - - - - - - - - - -
normalized_shape

(int or list): input shape from an expected input +

+

Arguments

+
normalized_shape
+

(int or list): input shape from an expected input of size \([* \times \mbox{normalized\_shape}[0] \times \mbox{normalized\_shape}[1] \times \ldots \times \mbox{normalized\_shape}[-1]]\) If a single integer is used, it is treated as a singleton list, and this module will -normalize over the last dimension which is expected to be of that specific size.

eps

a value added to the denominator for numerical stability. Default: 1e-5

elementwise_affine

a boolean value that when set to TRUE, this module +normalize over the last dimension which is expected to be of that specific size.

+
eps
+

a value added to the denominator for numerical stability. Default: 1e-5

+
elementwise_affine
+

a boolean value that when set to TRUE, this module has learnable per-element affine parameters initialized to ones (for weights) -and zeros (for biases). Default: TRUE.

- -

Details

- +and zeros (for biases). Default: TRUE.

+
+
+

Details

$$ y = \frac{x - \mathrm{E}[x]}{ \sqrt{\mathrm{Var}[x] + \epsilon}} * \gamma + \beta $$

@@ -228,66 +144,64 @@ certain number dimensions which have to be of the shape specified by normalized_shape if elementwise_affine is TRUE.

The standard-deviation is calculated via the biased estimator, equivalent to torch_var(input, unbiased=FALSE).

-

Note

- +
+
+

Note

Unlike Batch Normalization and Instance Normalization, which applies scalar scale and bias for each entire channel/plane with the affine option, Layer Normalization applies per-element scale and bias with elementwise_affine.

This layer uses statistics computed from input data in both training and evaluation modes.

-

Shape

- +
+
+

Shape

-
    -
  • Input: \((N, *)\)

  • +
    • Input: \((N, *)\)

    • Output: \((N, *)\) (same shape as input)

    • -
    - - -

    Examples

    -
    if (torch_is_installed()) {
    -  
    -input <- torch_randn(20, 5, 10, 10)
    -# With Learnable Parameters
    -m <- nn_layer_norm(input$size()[-1])
    -# Without Learnable Parameters
    -m <- nn_layer_norm(input$size()[-1], elementwise_affine=FALSE)
    -# Normalize over last two dimensions
    -m <- nn_layer_norm(c(10, 10))
    -# Normalize over last dimension of size 10
    -m <- nn_layer_norm(10)
    -# Activating the module
    -output <- m(input)
    -
    -}
    -
    +
+ +
+

Examples

+
if (torch_is_installed()) {
+  
+input <- torch_randn(20, 5, 10, 10)
+# With Learnable Parameters
+m <- nn_layer_norm(input$size()[-1])
+# Without Learnable Parameters
+m <- nn_layer_norm(input$size()[-1], elementwise_affine=FALSE)
+# Normalize over last two dimensions
+m <- nn_layer_norm(c(10, 10))
+# Normalize over last dimension of size 10
+m <- nn_layer_norm(10)
+# Activating the module
+output <- m(input)
+
+}
+
+
+
-
- +
- - + + diff --git a/dev/reference/nn_leaky_relu.html b/dev/reference/nn_leaky_relu.html index 81bd55cf6..556940f17 100644 --- a/dev/reference/nn_leaky_relu.html +++ b/dev/reference/nn_leaky_relu.html @@ -1,79 +1,18 @@ - - - - - - - -LeakyReLU module — nn_leaky_relu • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -LeakyReLU module — nn_leaky_relu • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,23 +111,19 @@

Applies the element-wise function:

-
nn_leaky_relu(negative_slope = 0.01, inplace = FALSE)
- -

Arguments

- - - - - - - - - - -
negative_slope

Controls the angle of the negative slope. Default: 1e-2

inplace

can optionally do the operation in-place. Default: FALSE

- -

Details

+
+
nn_leaky_relu(negative_slope = 0.01, inplace = FALSE)
+
+
+

Arguments

+
negative_slope
+

Controls the angle of the negative slope. Default: 1e-2

+
inplace
+

can optionally do the operation in-place. Default: FALSE

+
+
+

Details

$$ \mbox{LeakyReLU}(x) = \max(0, x) + \mbox{negative\_slope} * \min(0, x) $$ @@ -218,50 +136,47 @@ x, & \mbox{ if } x \geq 0 \\ \end{array} \right. $$

-

Shape

- +
+
+

Shape

-
    -
  • Input: \((N, *)\) where * means, any number of additional +

    • Input: \((N, *)\) where * means, any number of additional dimensions

    • Output: \((N, *)\), same shape as the input

    • -
    - - -

    Examples

    -
    if (torch_is_installed()) {
    -m <- nn_leaky_relu(0.1)
    -input <- torch_randn(2)
    -output <- m(input)
    -
    -}
    -
    +
+ +
+

Examples

+
if (torch_is_installed()) {
+m <- nn_leaky_relu(0.1)
+input <- torch_randn(2)
+output <- m(input)
+
+}
+
+
+
-
- +
- - + + diff --git a/dev/reference/nn_linear.html b/dev/reference/nn_linear.html index 4000f5e32..440fa4944 100644 --- a/dev/reference/nn_linear.html +++ b/dev/reference/nn_linear.html @@ -1,79 +1,18 @@ - - - - - - - -Linear module — nn_linear • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Linear module — nn_linear • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,43 +111,34 @@

Applies a linear transformation to the incoming data: y = xA^T + b

-
nn_linear(in_features, out_features, bias = TRUE)
- -

Arguments

- - - - - - - - - - - - - - -
in_features

size of each input sample

out_features

size of each output sample

bias

If set to FALSE, the layer will not learn an additive bias. -Default: TRUE

- -

Shape

+
+
nn_linear(in_features, out_features, bias = TRUE)
+
+
+

Arguments

+
in_features
+

size of each input sample

+
out_features
+

size of each output sample

+
bias
+

If set to FALSE, the layer will not learn an additive bias. +Default: TRUE

+
+
+

Shape

-
    -
  • Input: (N, *, H_in) where * means any number of +

    • Input: (N, *, H_in) where * means any number of additional dimensions and H_in = in_features.

    • Output: (N, *, H_out) where all but the last dimension are the same shape as the input and :math:H_out = out_features.

    • -
    - -

    Attributes

    - +
+
+

Attributes

-
    -
  • weight: the learnable weights of the module of shape +

    • weight: the learnable weights of the module of shape (out_features, in_features). The values are initialized from \(U(-\sqrt{k}, \sqrt{k})\)s, where \(k = \frac{1}{\mbox{in\_features}}\)

    • @@ -233,44 +146,41 @@ initialized from \(U(-\sqrt{k}, \sqrt{k})\)s, where If bias is TRUE, the values are initialized from \(\mathcal{U}(-\sqrt{k}, \sqrt{k})\) where \(k = \frac{1}{\mbox{in\_features}}\)

      -
    - - -

    Examples

    -
    if (torch_is_installed()) {
    -m <- nn_linear(20, 30)
    -input <- torch_randn(128, 20)
    -output <- m(input)
    -print(output$size())
    -
    -}
    -#> [1] 128  30
    -
    +
+ +
+

Examples

+
if (torch_is_installed()) {
+m <- nn_linear(20, 30)
+input <- torch_randn(128, 20)
+output <- m(input)
+print(output$size())
+
+}
+#> [1] 128  30
+
+
+
-
- +
- - + + diff --git a/dev/reference/nn_log_sigmoid.html b/dev/reference/nn_log_sigmoid.html index 8af1d5074..93608c004 100644 --- a/dev/reference/nn_log_sigmoid.html +++ b/dev/reference/nn_log_sigmoid.html @@ -1,82 +1,21 @@ - - - - - - - -LogSigmoid module — nn_log_sigmoid • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -LogSigmoid module — nn_log_sigmoid • torch - - - - - - - - - - - - - - - - - + + -
-
- -
- -
+
@@ -195,53 +117,50 @@ $$ $$

-
nn_log_sigmoid()
- - -

Shape

+
+
nn_log_sigmoid()
+
+
+

Shape

-
    -
  • Input: \((N, *)\) where * means, any number of additional +

    • Input: \((N, *)\) where * means, any number of additional dimensions

    • Output: \((N, *)\), same shape as the input

    • -
    - - -

    Examples

    -
    if (torch_is_installed()) {
    -m <- nn_log_sigmoid()
    -input <- torch_randn(2)
    -output <- m(input)
    -
    -}
    -
    +
+ +
+

Examples

+
if (torch_is_installed()) {
+m <- nn_log_sigmoid()
+input <- torch_randn(2)
+output <- m(input)
+
+}
+
+
+
-
- +
- - + + diff --git a/dev/reference/nn_log_softmax.html b/dev/reference/nn_log_softmax.html index 086abd34f..1aa4f563b 100644 --- a/dev/reference/nn_log_softmax.html +++ b/dev/reference/nn_log_softmax.html @@ -1,80 +1,19 @@ - - - - - - - -LogSoftmax module — nn_log_softmax • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -LogSoftmax module — nn_log_softmax • torch - - - - - - - - + + -
-
- -
- -
+
@@ -191,70 +113,66 @@ input Tensor. The LogSoftmax formulation can be simplified as:" /> input Tensor. The LogSoftmax formulation can be simplified as:

-
nn_log_softmax(dim)
- -

Arguments

- - - - - - -
dim

(int): A dimension along which LogSoftmax will be computed.

- -

Value

+
+
nn_log_softmax(dim)
+
+
+

Arguments

+
dim
+

(int): A dimension along which LogSoftmax will be computed.

+
+
+

Value

a Tensor of the same dimension and shape as the input with values in the range [-inf, 0)

-

Details

- +
+
+

Details

$$ \mbox{LogSoftmax}(x_{i}) = \log\left(\frac{\exp(x_i) }{ \sum_j \exp(x_j)} \right) $$

-

Shape

- +
+
+

Shape

-
    -
  • Input: \((*)\) where * means, any number of additional +

    • Input: \((*)\) where * means, any number of additional dimensions

    • Output: \((*)\), same shape as the input

    • -
    - - -

    Examples

    -
    if (torch_is_installed()) {
    -m <- nn_log_softmax(1)
    -input <- torch_randn(2, 3)
    -output <- m(input)
    -
    -}
    -
    +
+ +
+

Examples

+
if (torch_is_installed()) {
+m <- nn_log_softmax(1)
+input <- torch_randn(2, 3)
+output <- m(input)
+
+}
+
+
+
-
- +
- - + + diff --git a/dev/reference/nn_lp_pool1d.html b/dev/reference/nn_lp_pool1d.html index 5ce8d1a67..60bf77345 100644 --- a/dev/reference/nn_lp_pool1d.html +++ b/dev/reference/nn_lp_pool1d.html @@ -1,84 +1,23 @@ - - - - - - - -Applies a 1D power-average pooling over an input signal composed of several input -planes. — nn_lp_pool1d • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Applies a 1D power-average pooling over an input signal composed of several input +planes. — nn_lp_pool1d • torch - - - - - - - - - - - - - - - - - + + -
-
- -
- -
+
@@ -198,89 +120,76 @@ planes. $$

-
nn_lp_pool1d(norm_type, kernel_size, stride = NULL, ceil_mode = FALSE)
- -

Arguments

- - - - - - - - - - - - - - - - - - -
norm_type

if inf than one gets max pooling if 0 you get sum pooling ( -proportional to the avg pooling)

kernel_size

a single int, the size of the window

stride

a single int, the stride of the window. Default value is kernel_size

ceil_mode

when TRUE, will use ceil instead of floor to compute the output shape

- -

Details

+
+
nn_lp_pool1d(norm_type, kernel_size, stride = NULL, ceil_mode = FALSE)
+
+
+

Arguments

+
norm_type
+

if inf than one gets max pooling if 0 you get sum pooling ( +proportional to the avg pooling)

+
kernel_size
+

a single int, the size of the window

+
stride
+

a single int, the stride of the window. Default value is kernel_size

+
ceil_mode
+

when TRUE, will use ceil instead of floor to compute the output shape

+
+
+

Details

-
    -
  • At p = \(\infty\), one gets Max Pooling

  • +
    • At p = \(\infty\), one gets Max Pooling

    • At p = 1, one gets Sum Pooling (which is proportional to Average Pooling)

    • -
    - -

    Note

    - +
+
+

Note

If the sum to the power of p is zero, the gradient of this function is not defined. This implementation will set the gradient to zero in this case.

-

Shape

- +
+
+

Shape

-
    -
  • Input: \((N, C, L_{in})\)

  • +
    • Input: \((N, C, L_{in})\)

    • Output: \((N, C, L_{out})\), where

    • -
    - -

    $$ +

$$ L_{out} = \left\lfloor\frac{L_{in} - \mbox{kernel\_size}}{\mbox{stride}} + 1\right\rfloor $$

+
-

Examples

-
if (torch_is_installed()) {
-# power-2 pool of window of length 3, with stride 2.
-m <- nn_lp_pool1d(2, 3, stride=2)
-input <- torch_randn(20, 16, 50)
-output <- m(input)
-
-}
-
+
+

Examples

+
if (torch_is_installed()) {
+# power-2 pool of window of length 3, with stride 2.
+m <- nn_lp_pool1d(2, 3, stride=2)
+input <- torch_randn(20, 16, 50)
+output <- m(input)
+
+}
+
+
+
-
- +
- - + + diff --git a/dev/reference/nn_lp_pool2d.html b/dev/reference/nn_lp_pool2d.html index 97b6664db..cad41f744 100644 --- a/dev/reference/nn_lp_pool2d.html +++ b/dev/reference/nn_lp_pool2d.html @@ -1,84 +1,23 @@ - - - - - - - -Applies a 2D power-average pooling over an input signal composed of several input -planes. — nn_lp_pool2d • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Applies a 2D power-average pooling over an input signal composed of several input +planes. — nn_lp_pool2d • torch - - - - - - - - - - - - - - - - - + + -
-
- -
- -
+
@@ -198,101 +120,85 @@ planes. $$

-
nn_lp_pool2d(norm_type, kernel_size, stride = NULL, ceil_mode = FALSE)
- -

Arguments

- - - - - - - - - - - - - - - - - - -
norm_type

if inf than one gets max pooling if 0 you get sum pooling ( -proportional to the avg pooling)

kernel_size

the size of the window

stride

the stride of the window. Default value is kernel_size

ceil_mode

when TRUE, will use ceil instead of floor to compute the output shape

- -

Details

+
+
nn_lp_pool2d(norm_type, kernel_size, stride = NULL, ceil_mode = FALSE)
+
+
+

Arguments

+
norm_type
+

if inf than one gets max pooling if 0 you get sum pooling ( +proportional to the avg pooling)

+
kernel_size
+

the size of the window

+
stride
+

the stride of the window. Default value is kernel_size

+
ceil_mode
+

when TRUE, will use ceil instead of floor to compute the output shape

+
+
+

Details

-
    -
  • At p = \(\infty\), one gets Max Pooling

  • +
    • At p = \(\infty\), one gets Max Pooling

    • At p = 1, one gets Sum Pooling (which is proportional to average pooling)

    • -
    - -

    The parameters kernel_size, stride can either be:

      -
    • a single int -- in which case the same value is used for the height and width dimension

    • +

    The parameters kernel_size, stride can either be:

    • a single int -- in which case the same value is used for the height and width dimension

    • a tuple of two ints -- in which case, the first int is used for the height dimension, and the second int for the width dimension

    • -
    - -

    Note

    - +
+
+

Note

If the sum to the power of p is zero, the gradient of this function is not defined. This implementation will set the gradient to zero in this case.

-

Shape

- +
+
+

Shape

-
    -
  • Input: \((N, C, H_{in}, W_{in})\)

  • +
    • Input: \((N, C, H_{in}, W_{in})\)

    • Output: \((N, C, H_{out}, W_{out})\), where

    • -
    - -

    $$ +

$$ H_{out} = \left\lfloor\frac{H_{in} - \mbox{kernel\_size}[0]}{\mbox{stride}[0]} + 1\right\rfloor $$ $$ W_{out} = \left\lfloor\frac{W_{in} - \mbox{kernel\_size}[1]}{\mbox{stride}[1]} + 1\right\rfloor $$

+
-

Examples

-
if (torch_is_installed()) {
-  
-# power-2 pool of square window of size=3, stride=2
-m <- nn_lp_pool2d(2, 3, stride=2)
-# pool of non-square window of power 1.2
-m <- nn_lp_pool2d(1.2, c(3, 2), stride=c(2, 1))
-input <- torch_randn(20, 16, 50, 32)
-output <- m(input)
-
-}
-
+
+

Examples

+
if (torch_is_installed()) {
+  
+# power-2 pool of square window of size=3, stride=2
+m <- nn_lp_pool2d(2, 3, stride=2)
+# pool of non-square window of power 1.2
+m <- nn_lp_pool2d(1.2, c(3, 2), stride=c(2, 1))
+input <- torch_randn(20, 16, 50, 32)
+output <- m(input)
+
+}
+
+
+
-
- +
- - + + diff --git a/dev/reference/nn_lstm.html b/dev/reference/nn_lstm.html index 9cb12e36d..bd203acb7 100644 --- a/dev/reference/nn_lstm.html +++ b/dev/reference/nn_lstm.html @@ -1,82 +1,21 @@ - - - - - - - -Applies a multi-layer long short-term memory (LSTM) RNN to an input -sequence. — nn_lstm • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Applies a multi-layer long short-term memory (LSTM) RNN to an input +sequence. — nn_lstm • torch - - - - - - - - + + -
-
- -
- -
+
@@ -194,63 +116,47 @@ sequence. function:

-
nn_lstm(
-  input_size,
-  hidden_size,
-  num_layers = 1,
-  bias = TRUE,
-  batch_first = FALSE,
-  dropout = 0,
-  bidirectional = FALSE,
-  ...
-)
+
+
nn_lstm(
+  input_size,
+  hidden_size,
+  num_layers = 1,
+  bias = TRUE,
+  batch_first = FALSE,
+  dropout = 0,
+  bidirectional = FALSE,
+  ...
+)
+
-

Arguments

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
input_size

The number of expected features in the input x

hidden_size

The number of features in the hidden state h

num_layers

Number of recurrent layers. E.g., setting num_layers=2 +

+

Arguments

+
input_size
+

The number of expected features in the input x

+
hidden_size
+

The number of features in the hidden state h

+
num_layers
+

Number of recurrent layers. E.g., setting num_layers=2 would mean stacking two LSTMs together to form a stacked LSTM, with the second LSTM taking in outputs of the first LSTM and -computing the final results. Default: 1

bias

If FALSE, then the layer does not use bias weights b_ih and b_hh. -Default: TRUE

batch_first

If TRUE, then the input and output tensors are provided -as (batch, seq, feature). Default: FALSE

dropout

If non-zero, introduces a Dropout layer on the outputs of each +computing the final results. Default: 1

+
bias
+

If FALSE, then the layer does not use bias weights b_ih and b_hh. +Default: TRUE

+
batch_first
+

If TRUE, then the input and output tensors are provided +as (batch, seq, feature). Default: FALSE

+
dropout
+

If non-zero, introduces a Dropout layer on the outputs of each LSTM layer except the last layer, with dropout probability equal to -dropout. Default: 0

bidirectional

If TRUE, becomes a bidirectional LSTM. Default: FALSE

...

currently unused.

- -

Details

- +dropout. Default: 0

+
bidirectional
+

If TRUE, becomes a bidirectional LSTM. Default: FALSE

+
...
+

currently unused.

+
+
+

Details

$$ \begin{array}{ll} \\ i_t = \sigma(W_{ii} x_t + b_{ii} + W_{hi} h_{(t-1)} + b_{hi}) \\ @@ -267,35 +173,34 @@ is the hidden state of the previous layer at time t-1 or the initia state at time 0, and \(i_t\), \(f_t\), \(g_t\), \(o_t\) are the input, forget, cell, and output gates, respectively. \(\sigma\) is the sigmoid function.

-

Note

- +
+
+

Note

All the weights and biases are initialized from \(\mathcal{U}(-\sqrt{k}, \sqrt{k})\) where \(k = \frac{1}{\mbox{hidden\_size}}\)

-

Inputs

- +
+
+

Inputs

-

Inputs: input, (h_0, c_0)

    -
  • input of shape (seq_len, batch, input_size): tensor containing the features +

    Inputs: input, (h_0, c_0)

    - -

    If (h_0, c_0) is not provided, both h_0 and c_0 default to zero.

    -

    Outputs

    - +

If (h_0, c_0) is not provided, both h_0 and c_0 default to zero.

+
+
+

Outputs

-

Outputs: output, (h_n, c_n)

    -
  • output of shape (seq_len, batch, num_directions * hidden_size): tensor +

    Outputs: output, (h_n, c_n)

    • output of shape (seq_len, batch, num_directions * hidden_size): tensor containing the output features (h_t) from the last layer of the LSTM, for each t. If a torch_nn.utils.rnn.PackedSequence has been given as the input, the output will also be a packed sequence. @@ -309,14 +214,12 @@ Like output, the layers can be separated using h_n$view(c(num_layers, num_directions, batch, hidden_size)) and similarly for c_n.

    • c_n (num_layers * num_directions, batch, hidden_size): tensor containing the cell state for t = seq_len

    • -
    - -

    Attributes

    - +
+
+

Attributes

-
    -
  • weight_ih_l[k] : the learnable input-hidden weights of the \(\mbox{k}^{th}\) layer +

    • weight_ih_l[k] : the learnable input-hidden weights of the \(\mbox{k}^{th}\) layer (W_ii|W_if|W_ig|W_io), of shape (4*hidden_size x input_size)

    • weight_hh_l[k] : the learnable hidden-hidden weights of the \(\mbox{k}^{th}\) layer (W_hi|W_hf|W_hg|W_ho), of shape (4*hidden_size x hidden_size)

    • @@ -324,44 +227,41 @@ containing the cell state for t = seq_len

      (b_ii|b_if|b_ig|b_io), of shape (4*hidden_size)

    • bias_hh_l[k] : the learnable hidden-hidden bias of the \(\mbox{k}^{th}\) layer (b_hi|b_hf|b_hg|b_ho), of shape (4*hidden_size)

    • -
    - - -

    Examples

    -
    if (torch_is_installed()) {
    -rnn <- nn_lstm(10, 20, 2)
    -input <- torch_randn(5, 3, 10)
    -h0 <- torch_randn(2, 3, 20)
    -c0 <- torch_randn(2, 3, 20)
    -output <- rnn(input, list(h0, c0))
    -
    -}
    -
    +
+ +
+

Examples

+
if (torch_is_installed()) {
+rnn <- nn_lstm(10, 20, 2)
+input <- torch_randn(5, 3, 10)
+h0 <- torch_randn(2, 3, 20)
+c0 <- torch_randn(2, 3, 20)
+output <- rnn(input, list(h0, c0))
+
+}
+
+
+
-
- +
- - + + diff --git a/dev/reference/nn_margin_ranking_loss.html b/dev/reference/nn_margin_ranking_loss.html index 3d53e1130..c7f2247e6 100644 --- a/dev/reference/nn_margin_ranking_loss.html +++ b/dev/reference/nn_margin_ranking_loss.html @@ -1,83 +1,22 @@ - - - - - - - -Margin ranking loss — nn_margin_ranking_loss • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Margin ranking loss — nn_margin_ranking_loss • torch - - - - - - - - - - - - - - - - - + + -
-
- -
- -
+
@@ -197,80 +119,73 @@ If \(y = 1\) then it assumed the first input should be ranked higher (have a larger value) than the second input, and vice-versa for \(y = -1\).

-
nn_margin_ranking_loss(margin = 0, reduction = "mean")
+
+
nn_margin_ranking_loss(margin = 0, reduction = "mean")
+
-

Arguments

- - - - - - - - - - -
margin

(float, optional): Has a default value of \(0\).

reduction

(string, optional): Specifies the reduction to apply to the output: +

+

Arguments

+
margin
+

(float, optional): Has a default value of \(0\).

+
reduction
+

(string, optional): Specifies the reduction to apply to the output: 'none' | 'mean' | 'sum'. 'none': no reduction will be applied, 'mean': the sum of the output will be divided by the number of elements in the output, 'sum': the output will be summed. Note: size_average and reduce are in the process of being deprecated, and in the meantime, -specifying either of those two args will override reduction. Default: 'mean'

- -

Details

- +specifying either of those two args will override reduction. Default: 'mean'

+
+
+

Details

The loss function for each pair of samples in the mini-batch is:

$$ \mbox{loss}(x1, x2, y) = \max(0, -y * (x1 - x2) + \mbox{margin}) $$

-

Shape

- +
+
+

Shape

-
    -
  • Input1: \((N)\) where N is the batch size.

  • +
    • Input1: \((N)\) where N is the batch size.

    • Input2: \((N)\), same shape as the Input1.

    • Target: \((N)\), same shape as the inputs.

    • Output: scalar. If reduction is 'none', then \((N)\).

    • -
    - - -

    Examples

    -
    if (torch_is_installed()) {
    -loss <- nn_margin_ranking_loss()
    -input1 <- torch_randn(3, requires_grad=TRUE)
    -input2 <- torch_randn(3, requires_grad=TRUE)
    -target <- torch_randn(3)$sign()
    -output <- loss(input1, input2, target)
    -output$backward()
    -
    -}
    -
    +
+ +
+

Examples

+
if (torch_is_installed()) {
+loss <- nn_margin_ranking_loss()
+input1 <- torch_randn(3, requires_grad=TRUE)
+input2 <- torch_randn(3, requires_grad=TRUE)
+target <- torch_randn(3)$sign()
+output <- loss(input1, input2, target)
+output$backward()
+
+}
+
+
+
-
- +
- - + + diff --git a/dev/reference/nn_max_pool1d.html b/dev/reference/nn_max_pool1d.html index 3dd43f0c8..9378fa70c 100644 --- a/dev/reference/nn_max_pool1d.html +++ b/dev/reference/nn_max_pool1d.html @@ -1,80 +1,19 @@ - - - - - - - -MaxPool1D module — nn_max_pool1d • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -MaxPool1D module — nn_max_pool1d • torch - - - - - - - - + + -
-
- -
- -
+
@@ -191,47 +113,35 @@ planes." /> planes.

-
nn_max_pool1d(
-  kernel_size,
-  stride = NULL,
-  padding = 0,
-  dilation = 1,
-  return_indices = FALSE,
-  ceil_mode = FALSE
-)
- -

Arguments

- - - - - - - - - - - - - - - - - - - - - - - - - - -
kernel_size

the size of the window to take a max over

stride

the stride of the window. Default value is kernel_size

padding

implicit zero padding to be added on both sides

dilation

a parameter that controls the stride of elements in the window

return_indices

if TRUE, will return the max indices along with the outputs. -Useful for nn_max_unpool1d() later.

ceil_mode

when TRUE, will use ceil instead of floor to compute the output shape

- -

Details

+
+
nn_max_pool1d(
+  kernel_size,
+  stride = NULL,
+  padding = 0,
+  dilation = 1,
+  return_indices = FALSE,
+  ceil_mode = FALSE
+)
+
+
+

Arguments

+
kernel_size
+

the size of the window to take a max over

+
stride
+

the stride of the window. Default value is kernel_size

+
padding
+

implicit zero padding to be added on both sides

+
dilation
+

a parameter that controls the stride of elements in the window

+
return_indices
+

if TRUE, will return the max indices along with the outputs. +Useful for nn_max_unpool1d() later.

+
ceil_mode
+

when TRUE, will use ceil instead of floor to compute the output shape

+
+
+

Details

In the simplest case, the output value of the layer with input size \((N, C, L)\) and output \((N, C, L_{out})\) can be precisely described as:

$$ @@ -240,56 +150,53 @@ input(N_i, C_j, stride \times k + m) $$

If padding is non-zero, then the input is implicitly zero-padded on both sides for padding number of points. dilation controls the spacing between the kernel points. -It is harder to describe, but this link +It is harder to describe, but this link has a nice visualization of what dilation does.

-

Shape

- +
+
+

Shape

-
    -
  • Input: \((N, C, L_{in})\)

  • +
    • Input: \((N, C, L_{in})\)

    • Output: \((N, C, L_{out})\), where

    • -
    - -

    $$ +

$$ L_{out} = \left\lfloor \frac{L_{in} + 2 \times \mbox{padding} - \mbox{dilation} \times (\mbox{kernel\_size} - 1) - 1}{\mbox{stride}} + 1\right\rfloor $$

+
-

Examples

-
if (torch_is_installed()) {
-# pool of size=3, stride=2
-m <- nn_max_pool1d(3, stride=2)
-input <- torch_randn(20, 16, 50)
-output <- m(input)
-
-}
-
+
+

Examples

+
if (torch_is_installed()) {
+# pool of size=3, stride=2
+m <- nn_max_pool1d(3, stride=2)
+input <- torch_randn(20, 16, 50)
+output <- m(input)
+
+}
+
+
+
-
- +
- - + + diff --git a/dev/reference/nn_max_pool2d.html b/dev/reference/nn_max_pool2d.html index fc7462e07..76d274176 100644 --- a/dev/reference/nn_max_pool2d.html +++ b/dev/reference/nn_max_pool2d.html @@ -1,80 +1,19 @@ - - - - - - - -MaxPool2D module — nn_max_pool2d • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -MaxPool2D module — nn_max_pool2d • torch - - - - - - - - + + -
-
- -
- -
+
@@ -191,47 +113,35 @@ planes." /> planes.

-
nn_max_pool2d(
-  kernel_size,
-  stride = NULL,
-  padding = 0,
-  dilation = 1,
-  return_indices = FALSE,
-  ceil_mode = FALSE
-)
- -

Arguments

- - - - - - - - - - - - - - - - - - - - - - - - - - -
kernel_size

the size of the window to take a max over

stride

the stride of the window. Default value is kernel_size

padding

implicit zero padding to be added on both sides

dilation

a parameter that controls the stride of elements in the window

return_indices

if TRUE, will return the max indices along with the outputs. -Useful for nn_max_unpool2d() later.

ceil_mode

when TRUE, will use ceil instead of floor to compute the output shape

- -

Details

+
+
nn_max_pool2d(
+  kernel_size,
+  stride = NULL,
+  padding = 0,
+  dilation = 1,
+  return_indices = FALSE,
+  ceil_mode = FALSE
+)
+
+
+

Arguments

+
kernel_size
+

the size of the window to take a max over

+
stride
+

the stride of the window. Default value is kernel_size

+
padding
+

implicit zero padding to be added on both sides

+
dilation
+

a parameter that controls the stride of elements in the window

+
return_indices
+

if TRUE, will return the max indices along with the outputs. +Useful for nn_max_unpool2d() later.

+
ceil_mode
+

when TRUE, will use ceil instead of floor to compute the output shape

+
+
+

Details

In the simplest case, the output value of the layer with input size \((N, C, H, W)\), output \((N, C, H_{out}, W_{out})\) and kernel_size \((kH, kW)\) can be precisely described as:

@@ -245,22 +155,17 @@ $$

If padding is non-zero, then the input is implicitly zero-padded on both sides for padding number of points. dilation controls the spacing between the kernel points. It is harder to describe, but this link has a nice visualization of what dilation does.

-

The parameters kernel_size, stride, padding, dilation can either be:

    -
  • a single int -- in which case the same value is used for the height and width dimension

  • +

    The parameters kernel_size, stride, padding, dilation can either be:

    • a single int -- in which case the same value is used for the height and width dimension

    • a tuple of two ints -- in which case, the first int is used for the height dimension, and the second int for the width dimension

    • -
    - -

    Shape

    - +
+
+

Shape

-
    -
  • Input: \((N, C, H_{in}, W_{in})\)

  • +
    • Input: \((N, C, H_{in}, W_{in})\)

    • Output: \((N, C, H_{out}, W_{out})\), where

    • -
    - -

    $$ +

$$ H_{out} = \left\lfloor\frac{H_{in} + 2 * \mbox{padding[0]} - \mbox{dilation[0]} \times (\mbox{kernel\_size[0]} - 1) - 1}{\mbox{stride[0]}} + 1\right\rfloor $$

@@ -268,43 +173,42 @@ $$

W_{out} = \left\lfloor\frac{W_{in} + 2 * \mbox{padding[1]} - \mbox{dilation[1]} \times (\mbox{kernel\_size[1]} - 1) - 1}{\mbox{stride[1]}} + 1\right\rfloor $$

+
-

Examples

-
if (torch_is_installed()) {
-# pool of square window of size=3, stride=2
-m <- nn_max_pool2d(3, stride=2)
-# pool of non-square window
-m <- nn_max_pool2d(c(3, 2), stride=c(2, 1))
-input <- torch_randn(20, 16, 50, 32)
-output <- m(input)
-
-}
-
+
+

Examples

+
if (torch_is_installed()) {
+# pool of square window of size=3, stride=2
+m <- nn_max_pool2d(3, stride=2)
+# pool of non-square window
+m <- nn_max_pool2d(c(3, 2), stride=c(2, 1))
+input <- torch_randn(20, 16, 50, 32)
+output <- m(input)
+
+}
+
+
+
-
- +
- - + + diff --git a/dev/reference/nn_max_pool3d.html b/dev/reference/nn_max_pool3d.html index 370da4b54..1cb8c61aa 100644 --- a/dev/reference/nn_max_pool3d.html +++ b/dev/reference/nn_max_pool3d.html @@ -1,83 +1,22 @@ - - - - - - - -Applies a 3D max pooling over an input signal composed of several input -planes. — nn_max_pool3d • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Applies a 3D max pooling over an input signal composed of several input +planes. — nn_max_pool3d • torch - - - - - - - - - - - - - - - - - + + -
-
- -
- -
+
@@ -196,47 +118,35 @@ output \((N, C, D_{out}, H_{out}, W_{out})\) and kernel_size \((kD, can be precisely described as:

-
nn_max_pool3d(
-  kernel_size,
-  stride = NULL,
-  padding = 0,
-  dilation = 1,
-  return_indices = FALSE,
-  ceil_mode = FALSE
-)
- -

Arguments

- - - - - - - - - - - - - - - - - - - - - - - - - - -
kernel_size

the size of the window to take a max over

stride

the stride of the window. Default value is kernel_size

padding

implicit zero padding to be added on all three sides

dilation

a parameter that controls the stride of elements in the window

return_indices

if TRUE, will return the max indices along with the outputs. -Useful for torch_nn.MaxUnpool3d later

ceil_mode

when TRUE, will use ceil instead of floor to compute the output shape

- -

Details

+
+
nn_max_pool3d(
+  kernel_size,
+  stride = NULL,
+  padding = 0,
+  dilation = 1,
+  return_indices = FALSE,
+  ceil_mode = FALSE
+)
+
+
+

Arguments

+
kernel_size
+

the size of the window to take a max over

+
stride
+

the stride of the window. Default value is kernel_size

+
padding
+

implicit zero padding to be added on all three sides

+
dilation
+

a parameter that controls the stride of elements in the window

+
return_indices
+

if TRUE, will return the max indices along with the outputs. +Useful for torch_nn.MaxUnpool3d later

+
ceil_mode
+

when TRUE, will use ceil instead of floor to compute the output shape

+
+
+

Details

$$ \begin{array}{ll} \mbox{out}(N_i, C_j, d, h, w) = & \max_{k=0, \ldots, kD-1} \max_{m=0, \ldots, kH-1} \max_{n=0, \ldots, kW-1} \\ @@ -246,26 +156,21 @@ $$

If padding is non-zero, then the input is implicitly zero-padded on both sides for padding number of points. dilation controls the spacing between the kernel points. It is harder to describe, but this link_ has a nice visualization of what dilation does. -The parameters kernel_size, stride, padding, dilation can either be:

    -
  • a single int -- in which case the same value is used for the depth, height and width dimension

  • +The parameters kernel_size, stride, padding, dilation can either be:

    • a single int -- in which case the same value is used for the depth, height and width dimension

    • a tuple of three ints -- in which case, the first int is used for the depth dimension, the second int for the height dimension and the third int for the width dimension

    • -
    - -

    Shape

    - +
+
+

Shape

-
    -
  • Input: \((N, C, D_{in}, H_{in}, W_{in})\)

  • +
    • Input: \((N, C, D_{in}, H_{in}, W_{in})\)

    • Output: \((N, C, D_{out}, H_{out}, W_{out})\), where $$ D_{out} = \left\lfloor\frac{D_{in} + 2 \times \mbox{padding}[0] - \mbox{dilation}[0] \times (\mbox{kernel\_size}[0] - 1) - 1}{\mbox{stride}[0]} + 1\right\rfloor $$

    • -
    - -

    $$ +

$$ H_{out} = \left\lfloor\frac{H_{in} + 2 \times \mbox{padding}[1] - \mbox{dilation}[1] \times (\mbox{kernel\_size}[1] - 1) - 1}{\mbox{stride}[1]} + 1\right\rfloor $$

@@ -273,43 +178,42 @@ $$

W_{out} = \left\lfloor\frac{W_{in} + 2 \times \mbox{padding}[2] - \mbox{dilation}[2] \times (\mbox{kernel\_size}[2] - 1) - 1}{\mbox{stride}[2]} + 1\right\rfloor $$

+
-

Examples

-
if (torch_is_installed()) {
-# pool of square window of size=3, stride=2
-m <- nn_max_pool3d(3, stride=2)
-# pool of non-square window
-m <- nn_max_pool3d(c(3, 2, 2), stride=c(2, 1, 2))
-input <- torch_randn(20, 16, 50,44, 31)
-output <- m(input)
-
-}
-
+
+

Examples

+
if (torch_is_installed()) {
+# pool of square window of size=3, stride=2
+m <- nn_max_pool3d(3, stride=2)
+# pool of non-square window
+m <- nn_max_pool3d(c(3, 2, 2), stride=c(2, 1, 2))
+input <- torch_randn(20, 16, 50,44, 31)
+output <- m(input)
+
+}
+
+
+
-
- +
- - + + diff --git a/dev/reference/nn_max_unpool1d.html b/dev/reference/nn_max_unpool1d.html index 7d93d2d4e..8980c2297 100644 --- a/dev/reference/nn_max_unpool1d.html +++ b/dev/reference/nn_max_unpool1d.html @@ -1,82 +1,21 @@ - - - - - - - -Computes a partial inverse of MaxPool1d. — nn_max_unpool1d • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Computes a partial inverse of MaxPool1d. — nn_max_unpool1d • torch - - - - - - - - - - - - - - - - - + + -
-
- -
- -
+
@@ -195,110 +117,99 @@ including the indices of the maximal values and computes a partial inverse in which all non-maximal values are set to zero.

-
nn_max_unpool1d(kernel_size, stride = NULL, padding = 0)
- -

Arguments

- - - - - - - - - - - - - - -
kernel_size

(int or tuple): Size of the max pooling window.

stride

(int or tuple): Stride of the max pooling window. -It is set to kernel_size by default.

padding

(int or tuple): Padding that was added to the input

- -

Note

+
+
nn_max_unpool1d(kernel_size, stride = NULL, padding = 0)
+
+
+

Arguments

+
kernel_size
+

(int or tuple): Size of the max pooling window.

+
stride
+

(int or tuple): Stride of the max pooling window. +It is set to kernel_size by default.

+
padding
+

(int or tuple): Padding that was added to the input

+
+
+

Note

MaxPool1d can map several input sizes to the same output sizes. Hence, the inversion process can get ambiguous. To accommodate this, you can provide the needed output size as an additional argument output_size in the forward call. See the Inputs and Example below.

-

Inputs

- +
+
+

Inputs

-
    -
  • input: the input Tensor to invert

  • -
  • indices: the indices given out by nn_max_pool1d()

  • +
    • input: the input Tensor to invert

    • +
    • indices: the indices given out by nn_max_pool1d()

    • output_size (optional): the targeted output size

    • -
    - -

    Shape

    - +
+
+

Shape

-
    -
  • Input: \((N, C, H_{in})\)

  • +
    • Input: \((N, C, H_{in})\)

    • Output: \((N, C, H_{out})\), where $$ H_{out} = (H_{in} - 1) \times \mbox{stride}[0] - 2 \times \mbox{padding}[0] + \mbox{kernel\_size}[0] $$ or as given by output_size in the call operator

    • -
    - - -

    Examples

    -
    if (torch_is_installed()) {
    -pool <- nn_max_pool1d(2, stride=2, return_indices=TRUE)
    -unpool <- nn_max_unpool1d(2, stride=2)
    -
    -input <- torch_tensor(array(1:8/1, dim = c(1,1,8)))
    -out <- pool(input)
    -unpool(out[[1]], out[[2]])
    -
    -# Example showcasing the use of output_size
    -input <- torch_tensor(array(1:8/1, dim = c(1,1,8)))
    -out <- pool(input)
    -unpool(out[[1]], out[[2]], output_size=input$size())
    -unpool(out[[1]], out[[2]])
    -
    -}
    -#> torch_tensor
    -#> (1,1,.,.) = 
    -#>   0
    -#>   2
    -#>   0
    -#>   4
    -#>   0
    -#>   6
    -#>   0
    -#>   8
    -#> [ CPUFloatType{1,1,8,1} ]
    -
    +
+ +
+

Examples

+
if (torch_is_installed()) {
+pool <- nn_max_pool1d(2, stride=2, return_indices=TRUE)
+unpool <- nn_max_unpool1d(2, stride=2)
+
+input <- torch_tensor(array(1:8/1, dim = c(1,1,8)))
+out <- pool(input)
+unpool(out[[1]], out[[2]])
+
+# Example showcasing the use of output_size
+input <- torch_tensor(array(1:8/1, dim = c(1,1,8)))
+out <- pool(input)
+unpool(out[[1]], out[[2]], output_size=input$size())
+unpool(out[[1]], out[[2]])
+
+}
+#> torch_tensor
+#> (1,1,.,.) = 
+#>   0
+#>   2
+#>   0
+#>   4
+#>   0
+#>   6
+#>   0
+#>   8
+#> [ CPUFloatType{1,1,8,1} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/nn_max_unpool2d.html b/dev/reference/nn_max_unpool2d.html index ff877c89f..e12dd0fa7 100644 --- a/dev/reference/nn_max_unpool2d.html +++ b/dev/reference/nn_max_unpool2d.html @@ -1,82 +1,21 @@ - - - - - - - -Computes a partial inverse of MaxPool2d. — nn_max_unpool2d • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Computes a partial inverse of MaxPool2d. — nn_max_unpool2d • torch - - - - - - - - - - - - - - - - - + + -
-
- -
- -
+
@@ -195,49 +117,41 @@ including the indices of the maximal values and computes a partial inverse in which all non-maximal values are set to zero.

-
nn_max_unpool2d(kernel_size, stride = NULL, padding = 0)
- -

Arguments

- - - - - - - - - - - - - - -
kernel_size

(int or tuple): Size of the max pooling window.

stride

(int or tuple): Stride of the max pooling window. -It is set to kernel_size by default.

padding

(int or tuple): Padding that was added to the input

- -

Note

+
+
nn_max_unpool2d(kernel_size, stride = NULL, padding = 0)
+
+
+

Arguments

+
kernel_size
+

(int or tuple): Size of the max pooling window.

+
stride
+

(int or tuple): Stride of the max pooling window. +It is set to kernel_size by default.

+
padding
+

(int or tuple): Padding that was added to the input

+
+
+

Note

MaxPool2d can map several input sizes to the same output sizes. Hence, the inversion process can get ambiguous. To accommodate this, you can provide the needed output size as an additional argument output_size in the forward call. See the Inputs and Example below.

-

Inputs

- +
+
+

Inputs

-
    -
  • input: the input Tensor to invert

  • -
  • indices: the indices given out by nn_max_pool2d()

  • +
    • input: the input Tensor to invert

    • +
    • indices: the indices given out by nn_max_pool2d()

    • output_size (optional): the targeted output size

    • -
    - -

    Shape

    - +
+
+

Shape

-
    -
  • Input: \((N, C, H_{in}, W_{in})\)

  • +
    • Input: \((N, C, H_{in}, W_{in})\)

    • Output: \((N, C, H_{out}, W_{out})\), where $$ H_{out} = (H_{in} - 1) \times \mbox{stride[0]} - 2 \times \mbox{padding[0]} + \mbox{kernel\_size[0]} @@ -246,56 +160,53 @@ $$ W_{out} = (W_{in} - 1) \times \mbox{stride[1]} - 2 \times \mbox{padding[1]} + \mbox{kernel\_size[1]} $$ or as given by output_size in the call operator

    • -
    - - -

    Examples

    -
    if (torch_is_installed()) {
    -
    -pool <- nn_max_pool2d(2, stride=2, return_indices=TRUE)
    -unpool <- nn_max_unpool2d(2, stride=2)
    -input <- torch_randn(1,1,4,4)
    -out <- pool(input)
    -unpool(out[[1]], out[[2]])
    -
    -# specify a different output size than input size
    -unpool(out[[1]], out[[2]], output_size=c(1, 1, 5, 5))
    -
    -}
    -#> torch_tensor
    -#> (1,1,.,.) = 
    -#>   0.0000  1.2945  0.0000  0.0000  0.0000
    -#>   0.0000  0.0000  1.3472  1.0731  0.0000
    -#>   0.0000  2.0541  0.0000  0.0000  0.0000
    -#>   0.0000  0.0000  0.0000  0.0000  0.0000
    -#>   0.0000  0.0000  0.0000  0.0000  0.0000
    -#> [ CPUFloatType{1,1,5,5} ]
    -
    +
+ +
+

Examples

+
if (torch_is_installed()) {
+
+pool <- nn_max_pool2d(2, stride=2, return_indices=TRUE)
+unpool <- nn_max_unpool2d(2, stride=2)
+input <- torch_randn(1,1,4,4)
+out <- pool(input)
+unpool(out[[1]], out[[2]])
+
+# specify a different output size than input size
+unpool(out[[1]], out[[2]], output_size=c(1, 1, 5, 5))
+
+}
+#> torch_tensor
+#> (1,1,.,.) = 
+#>   1.4170  0.0000  0.0000  0.0000  0.0000
+#>   0.0000  0.5730  0.0000  0.6062  0.0000
+#>   0.6256  0.0000  0.0000  0.0000  0.0000
+#>   0.0000  0.0000  0.0000  0.0000  0.0000
+#>   0.0000  0.0000  0.0000  0.0000  0.0000
+#> [ CPUFloatType{1,1,5,5} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/nn_max_unpool3d.html b/dev/reference/nn_max_unpool3d.html index 26226f682..bc67a94ab 100644 --- a/dev/reference/nn_max_unpool3d.html +++ b/dev/reference/nn_max_unpool3d.html @@ -1,82 +1,21 @@ - - - - - - - -Computes a partial inverse of MaxPool3d. — nn_max_unpool3d • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Computes a partial inverse of MaxPool3d. — nn_max_unpool3d • torch - - - - - - - - - - - - - - - - - + + -
-
- -
- -
+
@@ -195,53 +117,43 @@ including the indices of the maximal values and computes a partial inverse in which all non-maximal values are set to zero.

-
nn_max_unpool3d(kernel_size, stride = NULL, padding = 0)
- -

Arguments

- - - - - - - - - - - - - - -
kernel_size

(int or tuple): Size of the max pooling window.

stride

(int or tuple): Stride of the max pooling window. -It is set to kernel_size by default.

padding

(int or tuple): Padding that was added to the input

- -

Note

+
+
nn_max_unpool3d(kernel_size, stride = NULL, padding = 0)
+
+
+

Arguments

+
kernel_size
+

(int or tuple): Size of the max pooling window.

+
stride
+

(int or tuple): Stride of the max pooling window. +It is set to kernel_size by default.

+
padding
+

(int or tuple): Padding that was added to the input

+
+
+

Note

MaxPool3d can map several input sizes to the same output sizes. Hence, the inversion process can get ambiguous. To accommodate this, you can provide the needed output size as an additional argument output_size in the forward call. See the Inputs section below.

-

Inputs

- +
+
+

Inputs

-
    -
  • input: the input Tensor to invert

  • -
  • indices: the indices given out by nn_max_pool3d()

  • +
    • input: the input Tensor to invert

    • +
    • indices: the indices given out by nn_max_pool3d()

    • output_size (optional): the targeted output size

    • -
    - -

    Shape

    - +
+
+

Shape

-
    -
  • Input: \((N, C, D_{in}, H_{in}, W_{in})\)

  • +
    • Input: \((N, C, D_{in}, H_{in}, W_{in})\)

    • Output: \((N, C, D_{out}, H_{out}, W_{out})\), where

    • -
    - -

    $$ +

$$ D_{out} = (D_{in} - 1) \times \mbox{stride[0]} - 2 \times \mbox{padding[0]} + \mbox{kernel\_size[0]} $$ $$ @@ -251,45 +163,44 @@ $$ W_{out} = (W_{in} - 1) \times \mbox{stride[2]} - 2 \times \mbox{padding[2]} + \mbox{kernel\_size[2]} $$

or as given by output_size in the call operator

+
-

Examples

-
if (torch_is_installed()) {
-  
-# pool of square window of size=3, stride=2
-pool <- nn_max_pool3d(3, stride=2, return_indices=TRUE)
-unpool <- nn_max_unpool3d(3, stride=2)
-out <- pool(torch_randn(20, 16, 51, 33, 15))
-unpooled_output <- unpool(out[[1]], out[[2]])
-unpooled_output$size()
-
-}
-#> [1] 20 16 51 33 15
-
+
+

Examples

+
if (torch_is_installed()) {
+  
+# pool of square window of size=3, stride=2
+pool <- nn_max_pool3d(3, stride=2, return_indices=TRUE)
+unpool <- nn_max_unpool3d(3, stride=2)
+out <- pool(torch_randn(20, 16, 51, 33, 15))
+unpooled_output <- unpool(out[[1]], out[[2]])
+unpooled_output$size()
+
+}
+#> [1] 20 16 51 33 15
+
+
+
-
- +
- - + + diff --git a/dev/reference/nn_module.html b/dev/reference/nn_module.html index 5d40ce719..46317d4d2 100644 --- a/dev/reference/nn_module.html +++ b/dev/reference/nn_module.html @@ -1,79 +1,18 @@ - - - - - - - -Base class for all neural network modules. — nn_module • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Base class for all neural network modules. — nn_module • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,133 +111,120 @@

Your models should also subclass this class.

-
nn_module(
-  classname = NULL,
-  inherit = nn_Module,
-  ...,
-  private = NULL,
-  active = NULL,
-  parent_env = parent.frame()
-)
- -

Arguments

- - - - - - - - - - - - - - - - - - - - - - - - - - -
classname

an optional name for the module

inherit

an optional module to inherit from

...

methods implementation

private

passed to R6::R6Class().

active

passed to R6::R6Class().

parent_env

passed to R6::R6Class().

- -

Details

+
+
nn_module(
+  classname = NULL,
+  inherit = nn_Module,
+  ...,
+  private = NULL,
+  active = NULL,
+  parent_env = parent.frame()
+)
+
+
+

Arguments

+
classname
+

an optional name for the module

+
inherit
+

an optional module to inherit from

+
...
+

methods implementation

+
private
+

passed to R6::R6Class().

+
active
+

passed to R6::R6Class().

+
parent_env
+

passed to R6::R6Class().

+
+
+

Details

Modules can also contain other Modules, allowing to nest them in a tree structure. You can assign the submodules as regular attributes.

You are expected to implement the initialize and the forward to create a new nn_module.

-

Initialize

- +
+
+

Initialize

The initialize function will be called whenever a new instance of the nn_module is created. We use the initialize functions to define submodules and parameters -of the module. For example:

initialize = function(input_size, output_size) {
-   self$conv1 <- nn_conv2d(input_size, output_size, 5)
-   self$conv2 <- nn_conv2d(output_size, output_size, 5)
-}
-
+of the module. For example:

initialize = function(input_size, output_size) {
+   self$conv1 <- nn_conv2d(input_size, output_size, 5)
+   self$conv2 <- nn_conv2d(output_size, output_size, 5)
+}

The initialize function can have any number of parameters. All objects assigned to self$ will be available for other methods that you implement. -Tensors wrapped with nn_parameter() or nn_buffer() and submodules are +Tensors wrapped with nn_parameter() or nn_buffer() and submodules are automatically tracked when assigned to self$.

The initialize function is optional if the module you are defining doesn't have weights, submodules or buffers.

-

Forward

- +
+
+

Forward

The forward method is called whenever an instance of nn_module is called. This is usually used to implement the computation that the module does with the weights ad submodules defined in the initialize function.

-

For example:

forward = function(input) {
-   input <- self$conv1(input)
-   input <- nnf_relu(input)
-   input <- self$conv2(input)
-   input <- nnf_relu(input)
-   input
- }
-
+

For example:

forward = function(input) {
+   input <- self$conv1(input)
+   input <- nnf_relu(input)
+   input <- self$conv2(input)
+   input <- nnf_relu(input)
+   input
+ }

The forward function can use the self$training attribute to make different computations depending wether the model is training or not, for example if you were implementing the dropout module.

+
-

Examples

-
if (torch_is_installed()) {
-model <- nn_module(
- initialize = function() {
-   self$conv1 <- nn_conv2d(1, 20, 5)
-   self$conv2 <- nn_conv2d(20, 20, 5)
- },
- forward = function(input) {
-   input <- self$conv1(input)
-   input <- nnf_relu(input)
-   input <- self$conv2(input)
-   input <- nnf_relu(input)
-   input
- }
-)
-
-}
-
+
+

Examples

+
if (torch_is_installed()) {
+model <- nn_module(
+ initialize = function() {
+   self$conv1 <- nn_conv2d(1, 20, 5)
+   self$conv2 <- nn_conv2d(20, 20, 5)
+ },
+ forward = function(input) {
+   input <- self$conv1(input)
+   input <- nnf_relu(input)
+   input <- self$conv2(input)
+   input <- nnf_relu(input)
+   input
+ }
+)
+
+}
+
+
+
-
- +
- - + + diff --git a/dev/reference/nn_module_list.html b/dev/reference/nn_module_list.html index 67c3f41d1..5e0962d82 100644 --- a/dev/reference/nn_module_list.html +++ b/dev/reference/nn_module_list.html @@ -1,81 +1,20 @@ - - - - - - - -Holds submodules in a list. — nn_module_list • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Holds submodules in a list. — nn_module_list • torch - - - - - - - - - - - - - - - + + - - -
-
- -
- -
+
@@ -193,59 +115,55 @@ modules it contains are properly registered, and will be visible by all nn_module methods.

-
nn_module_list(modules = list())
- -

Arguments

- - - - - - -
modules

a list of modules to add

- - -

Examples

-
if (torch_is_installed()) {
-
-my_module <- nn_module(
- initialize = function() {
-   self$linears <- nn_module_list(lapply(1:10, function(x) nn_linear(10, 10)))
- },
- forward = function(x) {
-  for (i in 1:length(self$linears))
-    x <- self$linears[[i]](x)
-  x
- }
-)
-
-}
-
+
+
nn_module_list(modules = list())
+
+ +
+

Arguments

+
modules
+

a list of modules to add

+
+ +
+

Examples

+
if (torch_is_installed()) {
+
+my_module <- nn_module(
+ initialize = function() {
+   self$linears <- nn_module_list(lapply(1:10, function(x) nn_linear(10, 10)))
+ },
+ forward = function(x) {
+  for (i in 1:length(self$linears))
+    x <- self$linears[[i]](x)
+  x
+ }
+)
+
+}
+
+
+
-
- +
- - + + diff --git a/dev/reference/nn_mse_loss.html b/dev/reference/nn_mse_loss.html index a6ecab208..4fdf34513 100644 --- a/dev/reference/nn_mse_loss.html +++ b/dev/reference/nn_mse_loss.html @@ -1,82 +1,21 @@ - - - - - - - -MSE loss — nn_mse_loss • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -MSE loss — nn_mse_loss • torch - - - - - - - - - - - - - - - - - + + -
-
- -
- -
+
@@ -195,24 +117,22 @@ The unreduced (i.e. with reduction set to 'none') loss as:

-
nn_mse_loss(reduction = "mean")
+
+
nn_mse_loss(reduction = "mean")
+
-

Arguments

- - - - - - -
reduction

(string, optional): Specifies the reduction to apply to the output: +

+

Arguments

+
reduction
+

(string, optional): Specifies the reduction to apply to the output: 'none' | 'mean' | 'sum'. 'none': no reduction will be applied, 'mean': the sum of the output will be divided by the number of elements in the output, 'sum': the output will be summed. Note: size_average and reduce are in the process of being deprecated, and in the meantime, -specifying either of those two args will override reduction. Default: 'mean'

- -

Details

- +specifying either of those two args will override reduction. Default: 'mean'

+
+
+

Details

$$ \ell(x, y) = L = \{l_1,\dots,l_N\}^\top, \quad l_n = \left( x_n - y_n \right)^2, @@ -230,52 +150,49 @@ $$

of \(n\) elements each.

The mean operation still operates over all the elements, and divides by \(n\). The division by \(n\) can be avoided if one sets reduction = 'sum'.

-

Shape

- +
+
+

Shape

-
    -
  • Input: \((N, *)\) where \(*\) means, any number of additional +

    • Input: \((N, *)\) where \(*\) means, any number of additional dimensions

    • Target: \((N, *)\), same shape as the input

    • -
    - - -

    Examples

    -
    if (torch_is_installed()) {
    -loss <- nn_mse_loss()
    -input <- torch_randn(3, 5, requires_grad=TRUE)
    -target <- torch_randn(3, 5)
    -output <- loss(input, target)
    -output$backward()
    -
    -}
    -
    +
+ +
+

Examples

+
if (torch_is_installed()) {
+loss <- nn_mse_loss()
+input <- torch_randn(3, 5, requires_grad=TRUE)
+target <- torch_randn(3, 5)
+output <- loss(input, target)
+output$backward()
+
+}
+
+
+
-
- +
- - + + diff --git a/dev/reference/nn_multi_margin_loss.html b/dev/reference/nn_multi_margin_loss.html index c3cc0a1ef..2b63decb4 100644 --- a/dev/reference/nn_multi_margin_loss.html +++ b/dev/reference/nn_multi_margin_loss.html @@ -1,82 +1,21 @@ - - - - - - - -Multi margin loss — nn_multi_margin_loss • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Multi margin loss — nn_multi_margin_loss • torch - - - - - - - - - - - - - - - - - + + -
-
- -
- -
+
@@ -195,39 +117,31 @@ output \(y\) (which is a 1D tensor of target class indices, \(0 \leq y \leq \mbox{x.size}(1)-1\)):

-
nn_multi_margin_loss(p = 1, margin = 1, weight = NULL, reduction = "mean")
+
+
nn_multi_margin_loss(p = 1, margin = 1, weight = NULL, reduction = "mean")
+
-

Arguments

- - - - - - - - - - - - - - - - - - -
p

(int, optional): Has a default value of \(1\). \(1\) and \(2\) -are the only supported values.

margin

(float, optional): Has a default value of \(1\).

weight

(Tensor, optional): a manual rescaling weight given to each +

+

Arguments

+
p
+

(int, optional): Has a default value of \(1\). \(1\) and \(2\) +are the only supported values.

+
margin
+

(float, optional): Has a default value of \(1\).

+
weight
+

(Tensor, optional): a manual rescaling weight given to each class. If given, it has to be a Tensor of size C. Otherwise, it is -treated as if having all ones.

reduction

(string, optional): Specifies the reduction to apply to the output: +treated as if having all ones.

+
reduction
+

(string, optional): Specifies the reduction to apply to the output: 'none' | 'mean' | 'sum'. 'none': no reduction will be applied, 'mean': the sum of the output will be divided by the number of elements in the output, 'sum': the output will be summed. Note: size_average and reduce are in the process of being deprecated, and in the meantime, -specifying either of those two args will override reduction. Default: 'mean'

- -

Details

- +specifying either of those two args will override reduction. Default: 'mean'

+
+
+

Details

For each mini-batch sample, the loss in terms of the 1D input \(x\) and scalar output \(y\) is: $$ @@ -241,32 +155,29 @@ The loss function then becomes:

$$ \mbox{loss}(x, y) = \frac{\sum_i \max(0, w[y] * (\mbox{margin} - x[y] + x[i]))^p)}{\mbox{x.size}(0)} $$

+
+
-
- +
- - + + diff --git a/dev/reference/nn_multihead_attention.html b/dev/reference/nn_multihead_attention.html index 44121be03..b9f85e245 100644 --- a/dev/reference/nn_multihead_attention.html +++ b/dev/reference/nn_multihead_attention.html @@ -1,81 +1,20 @@ - - - - - - - -MultiHead attention — nn_multihead_attention • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -MultiHead attention — nn_multihead_attention • torch - - - - - - - - - - - - - - - - - + + -
-
- -
- -
+
@@ -193,70 +115,54 @@ from different representation subspaces. See reference: Attention Is All You Need

-
nn_multihead_attention(
-  embed_dim,
-  num_heads,
-  dropout = 0,
-  bias = TRUE,
-  add_bias_kv = FALSE,
-  add_zero_attn = FALSE,
-  kdim = NULL,
-  vdim = NULL
-)
+
+
nn_multihead_attention(
+  embed_dim,
+  num_heads,
+  dropout = 0,
+  bias = TRUE,
+  add_bias_kv = FALSE,
+  add_zero_attn = FALSE,
+  kdim = NULL,
+  vdim = NULL
+)
+
-

Arguments

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
embed_dim

total dimension of the model.

num_heads

parallel attention heads.

dropout

a Dropout layer on attn_output_weights. Default: 0.0.

bias

add bias as module parameter. Default: True.

add_bias_kv

add bias to the key and value sequences at dim=0.

add_zero_attn

add a new batch of zeros to the key and -value sequences at dim=1.

kdim

total number of features in key. Default: NULL

vdim

total number of features in value. Default: NULL. +

+

Arguments

+
embed_dim
+

total dimension of the model.

+
num_heads
+

parallel attention heads.

+
dropout
+

a Dropout layer on attn_output_weights. Default: 0.0.

+
bias
+

add bias as module parameter. Default: True.

+
add_bias_kv
+

add bias to the key and value sequences at dim=0.

+
add_zero_attn
+

add a new batch of zeros to the key and +value sequences at dim=1.

+
kdim
+

total number of features in key. Default: NULL

+
vdim
+

total number of features in value. Default: NULL. Note: if kdim and vdim are NULL, they will be set to embed_dim such that -query, key, and value have the same number of features.

- -

Details

- +query, key, and value have the same number of features.

+
+
+

Details

$$ \mbox{MultiHead}(Q, K, V) = \mbox{Concat}(head_1,\dots,head_h)W^O \mbox{where} head_i = \mbox{Attention}(QW_i^Q, KW_i^K, VW_i^V) $$

-

Shape

- +
+
+

Shape

-

Inputs:

    -
  • query: \((L, N, E)\) where L is the target sequence length, N is the batch size, E is +

    Inputs:

    • query: \((L, N, E)\) where L is the target sequence length, N is the batch size, E is the embedding dimension.

    • key: \((S, N, E)\), where S is the source sequence length, N is the batch size, E is the embedding dimension.

    • @@ -273,13 +179,9 @@ positions. If a ByteTensor is provided, the non-zero positions are not allowed t while the zero positions will be unchanged. If a BoolTensor is provided, positions with True is not allowed to attend while False values will be unchanged. If a FloatTensor is provided, it will be added to the attention weight.

      -
    - -

    Outputs:

      -
    • attn_output: \((L, N, E)\) where L is the target sequence length, N is +

    Outputs:

    • attn_output: \((L, N, E)\) where L is the target sequence length, N is the batch size, E is the embedding dimension.

    • -
    • attn_output_weights:

        -
      • if avg_weights is TRUE (the default), the output attention +

      • attn_output_weights:

        • if avg_weights is TRUE (the default), the output attention weights are averaged over the attention heads, giving a tensor of shape \((N, L, S)\) where N is the batch size, L is the target sequence length, S is the source sequence length.

        • @@ -287,45 +189,42 @@ length, S is the source sequence length.

          as-is, with shape \((N, H, L, S)\), where H is the number of attention heads.

      • -
      - - -

      Examples

      -
      if (torch_is_installed()) {
      -if (FALSE) {
      -multihead_attn = nn_multihead_attention(embed_dim, num_heads)
      -out <- multihead_attn(query, key, value)
      -attn_output <- out[[1]]
      -attn_output_weights <- out[[2]]
      -}
      -
      -}
      -
      +
+ +
+

Examples

+
if (torch_is_installed()) {
+if (FALSE) {
+multihead_attn = nn_multihead_attention(embed_dim, num_heads)
+out <- multihead_attn(query, key, value)
+attn_output <- out[[1]]
+attn_output_weights <- out[[2]]
+}
+
+}
+
+
+
-
- +
- - + + diff --git a/dev/reference/nn_multilabel_margin_loss.html b/dev/reference/nn_multilabel_margin_loss.html index a807a71c5..afb6e3ebd 100644 --- a/dev/reference/nn_multilabel_margin_loss.html +++ b/dev/reference/nn_multilabel_margin_loss.html @@ -1,82 +1,21 @@ - - - - - - - -Multilabel margin loss — nn_multilabel_margin_loss • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Multilabel margin loss — nn_multilabel_margin_loss • torch - - - - - - - - - - - - - - - - - + + -
-
- -
- -
+
@@ -195,24 +117,22 @@ and output \(y\) (which is a 2D Tensor of target class indices). For each sample in the mini-batch:

-
nn_multilabel_margin_loss(reduction = "mean")
+
+
nn_multilabel_margin_loss(reduction = "mean")
+
-

Arguments

- - - - - - -
reduction

(string, optional): Specifies the reduction to apply to the output: +

+

Arguments

+
reduction
+

(string, optional): Specifies the reduction to apply to the output: 'none' | 'mean' | 'sum'. 'none': no reduction will be applied, 'mean': the sum of the output will be divided by the number of elements in the output, 'sum': the output will be summed. Note: size_average and reduce are in the process of being deprecated, and in the meantime, -specifying either of those two args will override reduction. Default: 'mean'

- -

Details

- +specifying either of those two args will override reduction. Default: 'mean'

+
+
+

Details

$$ \mbox{loss}(x, y) = \sum_{ij}\frac{\max(0, 1 - (x[y[j]] - x[i]))}{\mbox{x.size}(0)} $$

@@ -224,56 +144,53 @@ and \(i \neq y[j]\) for all \(i\) and \(j\).

The criterion only considers a contiguous block of non-negative targets that starts at the front. This allows for different samples to have variable amounts of target classes.

-

Shape

- +
+
+

Shape

-
    -
  • Input: \((C)\) or \((N, C)\) where N is the batch size and C +

    • Input: \((C)\) or \((N, C)\) where N is the batch size and C is the number of classes.

    • Target: \((C)\) or \((N, C)\), label targets padded by -1 ensuring same shape as the input.

    • Output: scalar. If reduction is 'none', then \((N)\).

    • -
    - - -

    Examples

    -
    if (torch_is_installed()) {
    -loss <- nn_multilabel_margin_loss()
    -x <- torch_tensor(c(0.1, 0.2, 0.4, 0.8))$view(c(1,4))
    -# for target y, only consider labels 4 and 1, not after label -1
    -y <- torch_tensor(c(4, 1, -1, 2), dtype = torch_long())$view(c(1,4))
    -loss(x, y)
    -
    -}
    -#> torch_tensor
    -#> 0.85
    -#> [ CPUFloatType{} ]
    -
    +
+ +
+

Examples

+
if (torch_is_installed()) {
+loss <- nn_multilabel_margin_loss()
+x <- torch_tensor(c(0.1, 0.2, 0.4, 0.8))$view(c(1,4))
+# for target y, only consider labels 4 and 1, not after label -1
+y <- torch_tensor(c(4, 1, -1, 2), dtype = torch_long())$view(c(1,4))
+loss(x, y)
+
+}
+#> torch_tensor
+#> 0.85
+#> [ CPUFloatType{} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/nn_multilabel_soft_margin_loss.html b/dev/reference/nn_multilabel_soft_margin_loss.html index a37ccba6a..cac0d48d7 100644 --- a/dev/reference/nn_multilabel_soft_margin_loss.html +++ b/dev/reference/nn_multilabel_soft_margin_loss.html @@ -1,81 +1,20 @@ - - - - - - - -Multi label soft margin loss — nn_multilabel_soft_margin_loss • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Multi label soft margin loss — nn_multilabel_soft_margin_loss • torch - - - - - - - - - - - - - - - - - + + -
-
- -
- -
+
@@ -193,30 +115,26 @@ loss based on max-entropy, between input \(x\) and target \(y\) of size \((N, C)\).

-
nn_multilabel_soft_margin_loss(weight = NULL, reduction = "mean")
+
+
nn_multilabel_soft_margin_loss(weight = NULL, reduction = "mean")
+
-

Arguments

- - - - - - - - - - -
weight

(Tensor, optional): a manual rescaling weight given to each +

+

Arguments

+
weight
+

(Tensor, optional): a manual rescaling weight given to each class. If given, it has to be a Tensor of size C. Otherwise, it is -treated as if having all ones.

reduction

(string, optional): Specifies the reduction to apply to the output: +treated as if having all ones.

+
reduction
+

(string, optional): Specifies the reduction to apply to the output: 'none' | 'mean' | 'sum'. 'none': no reduction will be applied, 'mean': the sum of the output will be divided by the number of elements in the output, 'sum': the output will be summed. Note: size_average and reduce are in the process of being deprecated, and in the meantime, -specifying either of those two args will override reduction. Default: 'mean'

- -

Details

- +specifying either of those two args will override reduction. Default: 'mean'

+
+
+

Details

For each sample in the minibatch:

$$ loss(x, y) = - \frac{1}{C} * \sum_i y[i] * \log((1 + \exp(-x[i]))^{-1}) @@ -224,42 +142,37 @@ specifying either of those two args will override reduction. Defaul $$

where \(i \in \left\{0, \; \cdots , \; \mbox{x.nElement}() - 1\right\}\), \(y[i] \in \left\{0, \; 1\right\}\).

-

Shape

- +
+
+

Shape

-
    -
  • Input: \((N, C)\) where N is the batch size and C is the number of classes.

  • +
    • Input: \((N, C)\) where N is the batch size and C is the number of classes.

    • Target: \((N, C)\), label targets padded by -1 ensuring same shape as the input.

    • Output: scalar. If reduction is 'none', then \((N)\).

    • -
    - +
+
-
- +
- - + + diff --git a/dev/reference/nn_nll_loss.html b/dev/reference/nn_nll_loss.html index 2430b615a..5a054ad46 100644 --- a/dev/reference/nn_nll_loss.html +++ b/dev/reference/nn_nll_loss.html @@ -1,80 +1,19 @@ - - - - - - - -Nll loss — nn_nll_loss • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Nll loss — nn_nll_loss • torch - - - - - - - - + + -
-
- -
- -
+
@@ -191,36 +113,30 @@ problem with C classes." /> problem with C classes.

-
nn_nll_loss(weight = NULL, ignore_index = -100, reduction = "mean")
+
+
nn_nll_loss(weight = NULL, ignore_index = -100, reduction = "mean")
+
-

Arguments

- - - - - - - - - - - - - - -
weight

(Tensor, optional): a manual rescaling weight given to each +

+

Arguments

+
weight
+

(Tensor, optional): a manual rescaling weight given to each class. If given, it has to be a Tensor of size C. Otherwise, it is -treated as if having all ones.

ignore_index

(int, optional): Specifies a target value that is ignored -and does not contribute to the input gradient.

reduction

(string, optional): Specifies the reduction to apply to the output: +treated as if having all ones.

+
ignore_index
+

(int, optional): Specifies a target value that is ignored +and does not contribute to the input gradient.

+
reduction
+

(string, optional): Specifies the reduction to apply to the output: 'none' | 'mean' | 'sum'. 'none': no reduction will be applied, 'mean': the weighted mean of the output is taken, 'sum': the output will be summed. Note: size_average and reduce are in the process of being deprecated, and in the meantime, specifying either of those two args will override -reduction. Default: 'mean'

- -

Details

- +reduction. Default: 'mean'

+
+
+

Details

If provided, the optional argument weight should be a 1D Tensor assigning weight to each of the classes. This is particularly useful when you have an unbalanced training set.

@@ -256,75 +172,72 @@ $$

an input of size \((minibatch, C, d_1, d_2, ..., d_K)\) with \(K \geq 1\), where \(K\) is the number of dimensions, and a target of appropriate shape (see below). In the case of images, it computes NLL loss per-pixel.

-

Shape

- +
+
+

Shape

-
    -
  • Input: \((N, C)\) where C = number of classes, or +

    • Input: \((N, C)\) where C = number of classes, or \((N, C, d_1, d_2, ..., d_K)\) with \(K \geq 1\) in the case of K-dimensional loss.

    • Target: \((N)\) where each value is \(0 \leq \mbox{targets}[i] \leq C-1\), or \((N, d_1, d_2, ..., d_K)\) with \(K \geq 1\) in the case of K-dimensional loss.

    • Output: scalar.

    • -
    - -

    If reduction is 'none', then the same size as the target: \((N)\), or +

If reduction is 'none', then the same size as the target: \((N)\), or \((N, d_1, d_2, ..., d_K)\) with \(K \geq 1\) in the case of K-dimensional loss.

+
-

Examples

-
if (torch_is_installed()) {
-m <- nn_log_softmax(dim=2)
-loss <- nn_nll_loss()
-# input is of size N x C = 3 x 5
-input <- torch_randn(3, 5, requires_grad=TRUE)
-# each element in target has to have 0 <= value < C
-target <- torch_tensor(c(2, 1, 5), dtype = torch_long())
-output <- loss(m(input), target)
-output$backward()
-
-# 2D loss example (used, for example, with image inputs)
-N <- 5
-C <- 4
-loss <- nn_nll_loss()
-# input is of size N x C x height x width
-data <- torch_randn(N, 16, 10, 10)
-conv <- nn_conv2d(16, C, c(3, 3))
-m <- nn_log_softmax(dim=1)
-# each element in target has to have 0 <= value < C
-target <- torch_empty(N, 8, 8, dtype=torch_long())$random_(1, C)
-output <- loss(m(conv(data)), target)
-output$backward()
-
-}
-
+
+

Examples

+
if (torch_is_installed()) {
+m <- nn_log_softmax(dim=2)
+loss <- nn_nll_loss()
+# input is of size N x C = 3 x 5
+input <- torch_randn(3, 5, requires_grad=TRUE)
+# each element in target has to have 0 <= value < C
+target <- torch_tensor(c(2, 1, 5), dtype = torch_long())
+output <- loss(m(input), target)
+output$backward()
+
+# 2D loss example (used, for example, with image inputs)
+N <- 5
+C <- 4
+loss <- nn_nll_loss()
+# input is of size N x C x height x width
+data <- torch_randn(N, 16, 10, 10)
+conv <- nn_conv2d(16, C, c(3, 3))
+m <- nn_log_softmax(dim=1)
+# each element in target has to have 0 <= value < C
+target <- torch_empty(N, 8, 8, dtype=torch_long())$random_(1, C)
+output <- loss(m(conv(data)), target)
+output$backward()
+
+}
+
+
+
-
- +
- - + + diff --git a/dev/reference/nn_pairwise_distance.html b/dev/reference/nn_pairwise_distance.html index 01b94a611..b3b7e6f98 100644 --- a/dev/reference/nn_pairwise_distance.html +++ b/dev/reference/nn_pairwise_distance.html @@ -1,80 +1,19 @@ - - - - - - - -Pairwise distance — nn_pairwise_distance • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Pairwise distance — nn_pairwise_distance • torch - - - - - - - - + + -
-
- -
- -
+
@@ -191,77 +113,68 @@ using the p-norm:" /> using the p-norm:

-
nn_pairwise_distance(p = 2, eps = 1e-06, keepdim = FALSE)
- -

Arguments

- - - - - - - - - - - - - - -
p

(real): the norm degree. Default: 2

eps

(float, optional): Small value to avoid division by zero. -Default: 1e-6

keepdim

(bool, optional): Determines whether or not to keep the vector dimension. -Default: FALSE

- -

Details

+
+
nn_pairwise_distance(p = 2, eps = 1e-06, keepdim = FALSE)
+
+
+

Arguments

+
p
+

(real): the norm degree. Default: 2

+
eps
+

(float, optional): Small value to avoid division by zero. +Default: 1e-6

+
keepdim
+

(bool, optional): Determines whether or not to keep the vector dimension. +Default: FALSE

+
+
+

Details

$$ \Vert x \Vert _p = \left( \sum_{i=1}^n \vert x_i \vert ^ p \right) ^ {1/p}. $$

-

Shape

- +
+
+

Shape

-
    -
  • Input1: \((N, D)\) where D = vector dimension

  • +
    • Input1: \((N, D)\) where D = vector dimension

    • Input2: \((N, D)\), same shape as the Input1

    • Output: \((N)\). If keepdim is TRUE, then \((N, 1)\).

    • -
    - - -

    Examples

    -
    if (torch_is_installed()) {
    -pdist <- nn_pairwise_distance(p=2)
    -input1 <- torch_randn(100, 128)
    -input2 <- torch_randn(100, 128)
    -output <- pdist(input1, input2)
    -
    -}
    -
    +
+ +
+

Examples

+
if (torch_is_installed()) {
+pdist <- nn_pairwise_distance(p=2)
+input1 <- torch_randn(100, 128)
+input2 <- torch_randn(100, 128)
+output <- pdist(input1, input2)
+
+}
+
+
+
-
- +
- - + + diff --git a/dev/reference/nn_parameter.html b/dev/reference/nn_parameter.html index 5f4020f5b..0a7f6aa11 100644 --- a/dev/reference/nn_parameter.html +++ b/dev/reference/nn_parameter.html @@ -1,79 +1,18 @@ - - - - - - - -Creates an nn_parameter — nn_parameter • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Creates an nn_parameter — nn_parameter • torch - - - - - - + + - - -
-
- -
- -
+
@@ -189,48 +111,40 @@

Indicates to nn_module that x is a parameter

-
nn_parameter(x, requires_grad = TRUE)
- -

Arguments

- - - - - - - - - - -
x

the tensor that you want to indicate as parameter

requires_grad

whether this parameter should have -requires_grad = TRUE

+
+
nn_parameter(x, requires_grad = TRUE)
+
+
+

Arguments

+
x
+

the tensor that you want to indicate as parameter

+
requires_grad
+

whether this parameter should have +requires_grad = TRUE

+
+
-
- +
- - + + diff --git a/dev/reference/nn_poisson_nll_loss.html b/dev/reference/nn_poisson_nll_loss.html index 09e2bdea2..1762423e8 100644 --- a/dev/reference/nn_poisson_nll_loss.html +++ b/dev/reference/nn_poisson_nll_loss.html @@ -1,80 +1,19 @@ - - - - - - - -Poisson NLL loss — nn_poisson_nll_loss • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Poisson NLL loss — nn_poisson_nll_loss • torch - - - - - - - - + + -
-
- -
- -
+
@@ -191,46 +113,38 @@ The loss can be described as:" /> The loss can be described as:

-
nn_poisson_nll_loss(
-  log_input = TRUE,
-  full = FALSE,
-  eps = 1e-08,
-  reduction = "mean"
-)
+
+
nn_poisson_nll_loss(
+  log_input = TRUE,
+  full = FALSE,
+  eps = 1e-08,
+  reduction = "mean"
+)
+
-

Arguments

- - - - - - - - - - - - - - - - - - -
log_input

(bool, optional): if TRUE the loss is computed as +

+

Arguments

+
log_input
+

(bool, optional): if TRUE the loss is computed as \(\exp(\mbox{input}) - \mbox{target}*\mbox{input}\), if FALSE the loss is -\(\mbox{input} - \mbox{target}*\log(\mbox{input}+\mbox{eps})\).

full

(bool, optional): whether to compute full loss, i. e. to add the +\(\mbox{input} - \mbox{target}*\log(\mbox{input}+\mbox{eps})\).

+
full
+

(bool, optional): whether to compute full loss, i. e. to add the Stirling approximation term -\(\mbox{target}*\log(\mbox{target}) - \mbox{target} + 0.5 * \log(2\pi\mbox{target})\).

eps

(float, optional): Small value to avoid evaluation of \(\log(0)\) when -log_input = FALSE. Default: 1e-8

reduction

(string, optional): Specifies the reduction to apply to the output: +\(\mbox{target}*\log(\mbox{target}) - \mbox{target} + 0.5 * \log(2\pi\mbox{target})\).

+
eps
+

(float, optional): Small value to avoid evaluation of \(\log(0)\) when +log_input = FALSE. Default: 1e-8

+
reduction
+

(string, optional): Specifies the reduction to apply to the output: 'none' | 'mean' | 'sum'. 'none': no reduction will be applied, 'mean': the sum of the output will be divided by the number of elements in the output, 'sum': the output will be summed. Note: size_average and reduce are in the process of being deprecated, and in the meantime, -specifying either of those two args will override reduction. Default: 'mean'

- -

Details

- +specifying either of those two args will override reduction. Default: 'mean'

+
+
+

Details

$$ \mbox{target} \sim \mathrm{Poisson}(\mbox{input}) \mbox{loss}(\mbox{input}, \mbox{target}) = \mbox{input} - \mbox{target} * \log(\mbox{input}) @@ -239,54 +153,51 @@ $$

The last term can be omitted or approximated with Stirling formula. The approximation is used for target values more than 1. For targets less or equal to 1 zeros are added to the loss.

-

Shape

- +
+
+

Shape

-
    -
  • Input: \((N, *)\) where \(*\) means, any number of additional +

    • Input: \((N, *)\) where \(*\) means, any number of additional dimensions

    • Target: \((N, *)\), same shape as the input

    • Output: scalar by default. If reduction is 'none', then \((N, *)\), the same shape as the input

    • -
    - - -

    Examples

    -
    if (torch_is_installed()) {
    -loss <- nn_poisson_nll_loss()
    -log_input <- torch_randn(5, 2, requires_grad=TRUE)
    -target <- torch_randn(5, 2)
    -output <- loss(log_input, target)
    -output$backward()
    -
    -}
    -
    +
+ +
+

Examples

+
if (torch_is_installed()) {
+loss <- nn_poisson_nll_loss()
+log_input <- torch_randn(5, 2, requires_grad=TRUE)
+target <- torch_randn(5, 2)
+output <- loss(log_input, target)
+output$backward()
+
+}
+
+
+
-
- +
- - + + diff --git a/dev/reference/nn_prelu.html b/dev/reference/nn_prelu.html index 05c1abd78..f4251003d 100644 --- a/dev/reference/nn_prelu.html +++ b/dev/reference/nn_prelu.html @@ -1,48 +1,5 @@ - - - - - - - -PReLU module — nn_prelu • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -PReLU module — nn_prelu • torch - - - - - - - - - - - - - - - - - + + -
-
- -
- -
+
@@ -213,85 +135,77 @@ ax, & \mbox{ otherwise } $$

-
nn_prelu(num_parameters = 1, init = 0.25)
+
+
nn_prelu(num_parameters = 1, init = 0.25)
+
-

Arguments

- - - - - - - - - - -
num_parameters

(int): number of \(a\) to learn. +

+

Arguments

+
num_parameters
+

(int): number of \(a\) to learn. Although it takes an int as input, there is only two values are legitimate: -1, or the number of channels at input. Default: 1

init

(float): the initial value of \(a\). Default: 0.25

- -

Details

- +1, or the number of channels at input. Default: 1

+
init
+

(float): the initial value of \(a\). Default: 0.25

+
+
+

Details

Here \(a\) is a learnable parameter. When called without arguments, nn.prelu() uses a single parameter \(a\) across all input channels. If called with nn_prelu(nChannels), a separate \(a\) is used for each input channel.

-

Note

- +
+
+

Note

weight decay should not be used when learning \(a\) for good performance.

Channel dim is the 2nd dim of input. When input has dims < 2, then there is no channel dim and the number of channels = 1.

-

Shape

- +
+
+

Shape

-
    -
  • Input: \((N, *)\) where * means, any number of additional +

    • Input: \((N, *)\) where * means, any number of additional dimensions

    • Output: \((N, *)\), same shape as the input

    • -
    - -

    Attributes

    - +
+
+

Attributes

-
    -
  • weight (Tensor): the learnable weights of shape (num_parameters).

  • -
- - -

Examples

-
if (torch_is_installed()) {
-m <- nn_prelu()
-input <- torch_randn(2)
-output <- m(input)
-
-}
-
+
  • weight (Tensor): the learnable weights of shape (num_parameters).

  • +
+ +
+

Examples

+
if (torch_is_installed()) {
+m <- nn_prelu()
+input <- torch_randn(2)
+output <- m(input)
+
+}
+
+
+
-
- +
- - + + diff --git a/dev/reference/nn_relu.html b/dev/reference/nn_relu.html index 93595beb2..f89cb9839 100644 --- a/dev/reference/nn_relu.html +++ b/dev/reference/nn_relu.html @@ -1,80 +1,19 @@ - - - - - - - -ReLU module — nn_relu • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -ReLU module — nn_relu • torch - - - - - - - - + + -
-
- -
- -
+
@@ -191,65 +113,59 @@ $$\mbox{ReLU}(x) = (x)^+ = \max(0, x)$$" /> $$\mbox{ReLU}(x) = (x)^+ = \max(0, x)$$

-
nn_relu(inplace = FALSE)
- -

Arguments

- - - - - - -
inplace

can optionally do the operation in-place. Default: FALSE

- -

Shape

+
+
nn_relu(inplace = FALSE)
+
+
+

Arguments

+
inplace
+

can optionally do the operation in-place. Default: FALSE

+
+
+

Shape

-
    -
  • Input: \((N, *)\) where * means, any number of additional +

    • Input: \((N, *)\) where * means, any number of additional dimensions

    • Output: \((N, *)\), same shape as the input

    • -
    - - -

    Examples

    -
    if (torch_is_installed()) {
    -m <- nn_relu()
    -input <- torch_randn(2)
    -m(input)
    -
    -}
    -#> torch_tensor
    -#>  1.0428
    -#>  0.0000
    -#> [ CPUFloatType{2} ]
    -
    +
+ +
+

Examples

+
if (torch_is_installed()) {
+m <- nn_relu()
+input <- torch_randn(2)
+m(input)
+
+}
+#> torch_tensor
+#>  0
+#>  0
+#> [ CPUFloatType{2} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/nn_relu6.html b/dev/reference/nn_relu6.html index be5c0ed34..6ea3b1927 100644 --- a/dev/reference/nn_relu6.html +++ b/dev/reference/nn_relu6.html @@ -1,79 +1,18 @@ - - - - - - - -ReLu6 module — nn_relu6 • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -ReLu6 module — nn_relu6 • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,66 +111,61 @@

Applies the element-wise function:

-
nn_relu6(inplace = FALSE)
- -

Arguments

- - - - - - -
inplace

can optionally do the operation in-place. Default: FALSE

- -

Details

+
+
nn_relu6(inplace = FALSE)
+
+
+

Arguments

+
inplace
+

can optionally do the operation in-place. Default: FALSE

+
+
+

Details

$$ \mbox{ReLU6}(x) = \min(\max(0,x), 6) $$

-

Shape

- +
+
+

Shape

-
    -
  • Input: \((N, *)\) where * means, any number of additional +

    • Input: \((N, *)\) where * means, any number of additional dimensions

    • Output: \((N, *)\), same shape as the input

    • -
    - - -

    Examples

    -
    if (torch_is_installed()) {
    -m <- nn_relu6()
    -input <- torch_randn(2)
    -output <- m(input)
    -
    -}
    -
    +
+ +
+

Examples

+
if (torch_is_installed()) {
+m <- nn_relu6()
+input <- torch_randn(2)
+output <- m(input)
+
+}
+
+
+
-
- +
- - + + diff --git a/dev/reference/nn_rnn.html b/dev/reference/nn_rnn.html index 20bbee410..6051104be 100644 --- a/dev/reference/nn_rnn.html +++ b/dev/reference/nn_rnn.html @@ -1,80 +1,19 @@ - - - - - - - -RNN module — nn_rnn • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -RNN module — nn_rnn • torch - - - - - - - - + + -
-
- -
- -
+
@@ -191,69 +113,51 @@ to an input sequence." /> to an input sequence.

-
nn_rnn(
-  input_size,
-  hidden_size,
-  num_layers = 1,
-  nonlinearity = NULL,
-  bias = TRUE,
-  batch_first = FALSE,
-  dropout = 0,
-  bidirectional = FALSE,
-  ...
-)
+
+
nn_rnn(
+  input_size,
+  hidden_size,
+  num_layers = 1,
+  nonlinearity = NULL,
+  bias = TRUE,
+  batch_first = FALSE,
+  dropout = 0,
+  bidirectional = FALSE,
+  ...
+)
+
-

Arguments

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
input_size

The number of expected features in the input x

hidden_size

The number of features in the hidden state h

num_layers

Number of recurrent layers. E.g., setting num_layers=2 +

+

Arguments

+
input_size
+

The number of expected features in the input x

+
hidden_size
+

The number of features in the hidden state h

+
num_layers
+

Number of recurrent layers. E.g., setting num_layers=2 would mean stacking two RNNs together to form a stacked RNN, with the second RNN taking in outputs of the first RNN and -computing the final results. Default: 1

nonlinearity

The non-linearity to use. Can be either 'tanh' or -'relu'. Default: 'tanh'

bias

If FALSE, then the layer does not use bias weights b_ih and -b_hh. Default: TRUE

batch_first

If TRUE, then the input and output tensors are provided -as (batch, seq, feature). Default: FALSE

dropout

If non-zero, introduces a Dropout layer on the outputs of each +computing the final results. Default: 1

+
nonlinearity
+

The non-linearity to use. Can be either 'tanh' or +'relu'. Default: 'tanh'

+
bias
+

If FALSE, then the layer does not use bias weights b_ih and +b_hh. Default: TRUE

+
batch_first
+

If TRUE, then the input and output tensors are provided +as (batch, seq, feature). Default: FALSE

+
dropout
+

If non-zero, introduces a Dropout layer on the outputs of each RNN layer except the last layer, with dropout probability equal to -dropout. Default: 0

bidirectional

If TRUE, becomes a bidirectional RNN. Default: FALSE

...

other arguments that can be passed to the super class.

- -

Details

- +dropout. Default: 0

+
bidirectional
+

If TRUE, becomes a bidirectional RNN. Default: FALSE

+
...
+

other arguments that can be passed to the super class.

+
+
+

Details

For each element in the input sequence, each layer computes the following function:

$$ @@ -264,26 +168,24 @@ the input at time t, and \(h_{(t-1)}\) is the hidden state of the previous layer at time t-1 or the initial hidden state at time 0. If nonlinearity is 'relu', then \(\mbox{ReLU}\) is used instead of \(\tanh\).

-

Inputs

- +
+
+

Inputs

-
    -
  • input of shape (seq_len, batch, input_size): tensor containing the features +

    • input of shape (seq_len, batch, input_size): tensor containing the features of the input sequence. The input can also be a packed variable length sequence.

    • h_0 of shape (num_layers * num_directions, batch, hidden_size): tensor containing the initial hidden state for each element in the batch. Defaults to zero if not provided. If the RNN is bidirectional, num_directions should be 2, else it should be 1.

    • -
    - -

    Outputs

    - +
+
+

Outputs

-
    -
  • output of shape (seq_len, batch, num_directions * hidden_size): tensor +

    • output of shape (seq_len, batch, num_directions * hidden_size): tensor containing the output features (h_t) from the last layer of the RNN, for each t. If a :class:nn_packed_sequence has been given as the input, the output will also be a packed sequence. @@ -295,14 +197,12 @@ Similarly, the directions can be separated in the packed case.

    • containing the hidden state for t = seq_len. Like output, the layers can be separated using h_n$view(num_layers, num_directions, batch, hidden_size).

      -
    - -

    Shape

    - +
+
+

Shape

-
    -
  • Input1: \((L, N, H_{in})\) tensor containing input features where +

    • Input1: \((L, N, H_{in})\) tensor containing input features where \(H_{in}=\mbox{input\_size}\) and L represents a sequence length.

    • Input2: \((S, N, H_{out})\) tensor containing the initial hidden state for each element in the batch. @@ -312,14 +212,12 @@ If the RNN is bidirectional, num_directions should be 2, else it should be 1.

      Output1: \((L, N, H_{all})\) where \(H_{all}=\mbox{num\_directions} * \mbox{hidden\_size}\)

    • Output2: \((S, N, H_{out})\) tensor containing the next hidden state for each element in the batch

    • -
    - -

    Attributes

    - +
+
+

Attributes

-
    -
  • weight_ih_l[k]: the learnable input-hidden weights of the k-th layer, +

    • weight_ih_l[k]: the learnable input-hidden weights of the k-th layer, of shape (hidden_size, input_size) for k = 0. Otherwise, the shape is (hidden_size, num_directions * hidden_size)

    • weight_hh_l[k]: the learnable hidden-hidden weights of the k-th layer, @@ -328,114 +226,112 @@ of shape (hidden_size, hidden_size)

    • of shape (hidden_size)

    • bias_hh_l[k]: the learnable hidden-hidden bias of the k-th layer, of shape (hidden_size)

    • -
    - -

    Note

    - +
+
+

Note

All the weights and biases are initialized from \(\mathcal{U}(-\sqrt{k}, \sqrt{k})\) where \(k = \frac{1}{\mbox{hidden\_size}}\)

+
-

Examples

-
if (torch_is_installed()) {
-rnn <- nn_rnn(10, 20, 2)
-input <- torch_randn(5, 3, 10)
-h0 <- torch_randn(2, 3, 20)
-rnn(input, h0)
-
-}
-#> [[1]]
-#> torch_tensor
-#> (1,.,.) = 
-#>  Columns 1 to 9  0.4745 -0.1859  0.1777 -0.1858  0.5894  0.2637 -0.6385 -0.7097 -0.7912
-#>   0.4220  0.6160 -0.5404  0.7711  0.4409  0.9132 -0.4366  0.4381 -0.0477
-#>   0.4044 -0.0396 -0.1762 -0.0959  0.3090  0.5827 -0.2244  0.5444 -0.2442
-#> 
-#> Columns 10 to 18  0.6514  0.0520 -0.7184 -0.0654  0.4755  0.1592 -0.3316 -0.0359 -0.0747
-#>  -0.5912 -0.6414  0.5730 -0.5611  0.3446  0.3079  0.4660 -0.5513 -0.7317
-#>  -0.4048 -0.4203  0.0843  0.0599  0.5302 -0.1320  0.7580  0.5875  0.6088
-#> 
-#> Columns 19 to 20 -0.0469  0.7087
-#>   0.5845 -0.0100
-#>  -0.6411 -0.8461
-#> 
-#> (2,.,.) = 
-#>  Columns 1 to 9  0.4009  0.2581 -0.0894 -0.1635  0.4117 -0.2862 -0.3065  0.4298 -0.1099
-#>  -0.1908  0.7495  0.2457  0.2087  0.5420 -0.3270 -0.6689  0.2622  0.7032
-#>   0.3058  0.4054 -0.2991 -0.2056  0.0978  0.0599 -0.5669  0.2577  0.3610
-#> 
-#> Columns 10 to 18 -0.2357  0.0171  0.1912 -0.0659 -0.2354  0.0344 -0.4921 -0.7601 -0.3682
-#>  -0.3424  0.4032 -0.0949 -0.3796  0.7319 -0.5674 -0.1728  0.2599 -0.0181
-#>  -0.4019  0.2927  0.2896 -0.6814  0.6901  0.4075  0.0290  0.4181  0.2707
-#> 
-#> Columns 19 to 20  0.7225  0.2856
-#>  -0.2969 -0.0214
-#>  -0.6084 -0.0990
-#> 
-#> (3,.,.) = 
-#>  Columns 1 to 9  0.1321 -0.0842  0.0630  0.0963  0.6189  0.4216 -0.1391  0.1832  0.0561
-#>   0.2111  0.4532 -0.3053  0.1982  0.5539  0.3073 -0.7156  0.4295 -0.1437
-#>   0.1695  0.1270 -0.0628 -0.4363  0.6908  0.2328 -0.4889  0.4444 -0.0808
-#> ... [the output was truncated (use n=-1 to disable)]
-#> [ CPUFloatType{5,3,20} ][ grad_fn = <StackBackward> ]
-#> 
-#> [[2]]
-#> torch_tensor
-#> (1,.,.) = 
-#>  Columns 1 to 9 -0.1138 -0.2225  0.0216 -0.0199  0.0298  0.0759 -0.4418  0.1248  0.3882
-#>  -0.3342  0.0456  0.1421  0.2609  0.3095 -0.1813  0.0032  0.2931  0.0233
-#>  -0.2491 -0.0110  0.1530  0.1752 -0.5961  0.4376  0.7177 -0.6412 -0.4838
-#> 
-#> Columns 10 to 18  0.1736 -0.0666 -0.2277 -0.7187 -0.5891  0.4111 -0.1654 -0.1506 -0.1801
-#>  -0.6499 -0.7127  0.6249  0.0295  0.4223  0.6072  0.0140 -0.2525 -0.6280
-#>  -0.1540  0.4431 -0.8291 -0.8185 -0.5821 -0.3455 -0.0026 -0.2175 -0.2324
-#> 
-#> Columns 19 to 20  0.6187 -0.0353
-#>  -0.5784  0.3641
-#>   0.0805 -0.6822
-#> 
-#> (2,.,.) = 
-#>  Columns 1 to 9  0.2262  0.1554 -0.0319 -0.2820  0.7412  0.6688 -0.3427  0.3909 -0.1387
-#>   0.2347  0.1486  0.2258 -0.1337  0.6556 -0.3578 -0.5898  0.3473 -0.4774
-#>   0.1207  0.4732 -0.1367  0.1095  0.5994  0.3849 -0.5638 -0.0245  0.3990
-#> 
-#> Columns 10 to 18  0.1378 -0.0556 -0.1344 -0.0664  0.3107 -0.1199  0.0441 -0.1585 -0.3549
-#>  -0.4922  0.1313 -0.1017 -0.1081  0.5549 -0.3796 -0.1600  0.1735 -0.7019
-#>  -0.0577  0.1594 -0.1253 -0.2464  0.5878  0.1730 -0.1709 -0.2612  0.0503
-#> 
-#> Columns 19 to 20  0.4534 -0.3872
-#>   0.2702 -0.3147
-#>   0.1245 -0.1123
-#> [ CPUFloatType{2,3,20} ][ grad_fn = <StackBackward> ]
-#> 
-
+
+

Examples

+
if (torch_is_installed()) {
+rnn <- nn_rnn(10, 20, 2)
+input <- torch_randn(5, 3, 10)
+h0 <- torch_randn(2, 3, 20)
+rnn(input, h0)
+
+}
+#> [[1]]
+#> torch_tensor
+#> (1,.,.) = 
+#>  Columns 1 to 9  0.8151 -0.9126  0.7925  0.4162  0.8779  0.4135  0.6306  0.2790 -0.0684
+#>  -0.2975 -0.6975  0.0221  0.6586  0.1209  0.1307  0.3097 -0.0856  0.6346
+#>  -0.4389  0.4784 -0.5604 -0.5076 -0.1134 -0.7180 -0.3771  0.0440 -0.1945
+#> 
+#> Columns 10 to 18 -0.3559  0.7532  0.1535 -0.1897 -0.0318  0.0660 -0.4554 -0.7305 -0.4830
+#>   0.3291  0.5938 -0.1580 -0.0256  0.7757  0.5597  0.2496 -0.8533 -0.6728
+#>   0.3867  0.3826  0.6037  0.2194 -0.8727 -0.2273 -0.0487  0.4780  0.0478
+#> 
+#> Columns 19 to 20  0.1453  0.3385
+#>   0.4557  0.2498
+#>  -0.8115 -0.7927
+#> 
+#> (2,.,.) = 
+#>  Columns 1 to 9 -0.3547  0.3358 -0.7325  0.0840 -0.1946  0.0746 -0.0018 -0.1379  0.6122
+#>  -0.3111  0.0079 -0.3550  0.3159  0.0701 -0.3570 -0.0675 -0.3477 -0.1488
+#>  -0.1756  0.0801  0.4807  0.4962  0.1773 -0.4569 -0.3086  0.8569  0.1023
+#> 
+#> Columns 10 to 18  0.5539  0.4786  0.6005 -0.0331 -0.3642  0.7405  0.2720 -0.4793 -0.1393
+#>   0.5237  0.6290  0.3903  0.4339 -0.0550 -0.1318  0.3963 -0.2887 -0.2035
+#>  -0.0897  0.6944 -0.4864 -0.5382 -0.2428  0.3736 -0.3641 -0.3070 -0.3879
+#> 
+#> Columns 19 to 20 -0.0526 -0.5596
+#>   0.0423 -0.6651
+#>  -0.3033  0.5023
+#> 
+#> (3,.,.) = 
+#>  Columns 1 to 9 -0.5135 -0.5440  0.1840 -0.3275  0.5917  0.1246 -0.2307  0.2042  0.2278
+#>  -0.2464 -0.0492  0.1699  0.4248  0.0244 -0.3513 -0.3097  0.4564  0.6540
+#>  -0.6782  0.1460 -0.5084  0.1322  0.2505 -0.2866 -0.1240 -0.1537  0.0573
+#> ... [the output was truncated (use n=-1 to disable)]
+#> [ CPUFloatType{5,3,20} ][ grad_fn = <StackBackward> ]
+#> 
+#> [[2]]
+#> torch_tensor
+#> (1,.,.) = 
+#>  Columns 1 to 9  0.1670 -0.4890  0.5699 -0.3973 -0.4142  0.3482  0.0137 -0.0430  0.1137
+#>  -0.6782 -0.7114 -0.5058  0.0504 -0.2827  0.3313 -0.4248  0.6271 -0.4972
+#>  -0.2978  0.0077  0.7071  0.2982 -0.6884  0.2393 -0.1173 -0.0212 -0.4838
+#> 
+#> Columns 10 to 18  0.1074 -0.2342  0.3958 -0.0304 -0.4835 -0.3942 -0.4408  0.5227  0.3777
+#>   0.3242 -0.0638  0.6458  0.4217 -0.0239  0.5016  0.1291 -0.0518 -0.2399
+#>   0.2497 -0.3841  0.1687  0.0261  0.0378  0.2633  0.6329 -0.0934 -0.3909
+#> 
+#> Columns 19 to 20  0.2282  0.1931
+#>  -0.2832  0.0805
+#>  -0.4288 -0.3152
+#> 
+#> (2,.,.) = 
+#>  Columns 1 to 9 -0.1940 -0.0990  0.3328 -0.1539  0.3886 -0.3395 -0.1728  0.4307  0.2911
+#>  -0.4875 -0.2433 -0.0134 -0.0179  0.3017 -0.1317 -0.3105 -0.0153  0.0239
+#>  -0.1129  0.1023 -0.4527  0.4459  0.0685 -0.1138 -0.0374 -0.0025 -0.1651
+#> 
+#> Columns 10 to 18 -0.1252  0.3388  0.0032  0.2867 -0.0074 -0.0060 -0.4365 -0.1213 -0.4371
+#>   0.0588  0.3093  0.3018 -0.2821 -0.3577  0.1485 -0.0840 -0.3334 -0.3366
+#>   0.3933  0.4992  0.2778 -0.5162 -0.0348  0.5516  0.1173 -0.1657 -0.3380
+#> 
+#> Columns 19 to 20 -0.1512  0.1389
+#>   0.1232  0.1467
+#>  -0.1274 -0.1682
+#> [ CPUFloatType{2,3,20} ][ grad_fn = <StackBackward> ]
+#> 
+
+
+
-
- +
- - + + diff --git a/dev/reference/nn_rrelu.html b/dev/reference/nn_rrelu.html index 0df4d7777..79caf42e0 100644 --- a/dev/reference/nn_rrelu.html +++ b/dev/reference/nn_rrelu.html @@ -1,80 +1,19 @@ - - - - - - - -RReLU module — nn_rrelu • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -RReLU module — nn_rrelu • torch - - - - - - - - + + -
-
- -
- -
+
@@ -191,27 +113,21 @@ as described in the paper:" /> as described in the paper:

-
nn_rrelu(lower = 1/8, upper = 1/3, inplace = FALSE)
- -

Arguments

- - - - - - - - - - - - - - -
lower

lower bound of the uniform distribution. Default: \(\frac{1}{8}\)

upper

upper bound of the uniform distribution. Default: \(\frac{1}{3}\)

inplace

can optionally do the operation in-place. Default: FALSE

- -

Details

+
+
nn_rrelu(lower = 1/8, upper = 1/3, inplace = FALSE)
+
+
+

Arguments

+
lower
+

lower bound of the uniform distribution. Default: \(\frac{1}{8}\)

+
upper
+

upper bound of the uniform distribution. Default: \(\frac{1}{3}\)

+
inplace
+

can optionally do the operation in-place. Default: FALSE

+
+
+

Details

Empirical Evaluation of Rectified Activations in Convolutional Network.

The function is defined as:

$$ @@ -225,54 +141,52 @@ $$

where \(a\) is randomly sampled from uniform distribution \(\mathcal{U}(\mbox{lower}, \mbox{upper})\). See: https://arxiv.org/pdf/1505.00853.pdf

-

Shape

- +
+
+

Shape

-
    -
  • Input: \((N, *)\) where * means, any number of additional +

    • Input: \((N, *)\) where * means, any number of additional dimensions

    • Output: \((N, *)\), same shape as the input

    • -
    - - -

    Examples

    -
    if (torch_is_installed()) {
    -m <- nn_rrelu(0.1, 0.3)
    -input <- torch_randn(2)
    -m(input)
    -
    -}
    -#> torch_tensor
    -#> -0.2211
    -#> -0.1064
    -#> [ CPUFloatType{2} ]
    -
    +
+ +
+

Examples

+
if (torch_is_installed()) {
+m <- nn_rrelu(0.1, 0.3)
+input <- torch_randn(2)
+m(input)
+
+}
+#> torch_tensor
+#> 0.01 *
+#> -6.3835
+#> -0.7508
+#> [ CPUFloatType{2} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/nn_selu.html b/dev/reference/nn_selu.html index b533fdfce..ead42c6b2 100644 --- a/dev/reference/nn_selu.html +++ b/dev/reference/nn_selu.html @@ -1,79 +1,18 @@ - - - - - - - -SELU module — nn_selu • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -SELU module — nn_selu • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,70 +111,65 @@

Applied element-wise, as:

-
nn_selu(inplace = FALSE)
- -

Arguments

- - - - - - -
inplace

(bool, optional): can optionally do the operation in-place. Default: FALSE

- -

Details

+
+
nn_selu(inplace = FALSE)
+
+
+

Arguments

+
inplace
+

(bool, optional): can optionally do the operation in-place. Default: FALSE

+
+
+

Details

$$ \mbox{SELU}(x) = \mbox{scale} * (\max(0,x) + \min(0, \alpha * (\exp(x) - 1))) $$

with \(\alpha = 1.6732632423543772848170429916717\) and \(\mbox{scale} = 1.0507009873554804934193349852946\).

More details can be found in the paper -Self-Normalizing Neural Networks.

-

Shape

- +Self-Normalizing Neural Networks.

+
+
+

Shape

-
    -
  • Input: \((N, *)\) where * means, any number of additional +

    • Input: \((N, *)\) where * means, any number of additional dimensions

    • Output: \((N, *)\), same shape as the input

    • -
    - - -

    Examples

    -
    if (torch_is_installed()) {
    -m <- nn_selu()
    -input <- torch_randn(2)
    -output <- m(input)
    -
    -}
    -
    +
+ +
+

Examples

+
if (torch_is_installed()) {
+m <- nn_selu()
+input <- torch_randn(2)
+output <- m(input)
+
+}
+
+
+
-
- +
- - + + diff --git a/dev/reference/nn_sequential.html b/dev/reference/nn_sequential.html index 894bafeee..9b9f63995 100644 --- a/dev/reference/nn_sequential.html +++ b/dev/reference/nn_sequential.html @@ -1,81 +1,20 @@ - - - - - - - -A sequential container — nn_sequential • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -A sequential container — nn_sequential • torch - - - - - - - - - - - - - - - + + - - -
-
- -
- -
+
@@ -193,57 +115,53 @@ Modules will be added to it in the order they are passed in the constructor. See examples.

-
nn_sequential(...)
- -

Arguments

- - - - - - -
...

sequence of modules to be added

- - -

Examples

-
if (torch_is_installed()) {
-
-model <- nn_sequential(
-  nn_conv2d(1, 20, 5),
-  nn_relu(),
-  nn_conv2d(20, 64, 5),
-  nn_relu()
-)
-input <- torch_randn(32, 1, 28, 28)
-output <- model(input)
-
-}
-
+
+
nn_sequential(...)
+
+ +
+

Arguments

+
...
+

sequence of modules to be added

+
+ +
+

Examples

+
if (torch_is_installed()) {
+
+model <- nn_sequential(
+  nn_conv2d(1, 20, 5),
+  nn_relu(),
+  nn_conv2d(20, 64, 5),
+  nn_relu()
+)
+input <- torch_randn(32, 1, 28, 28)
+output <- model(input)
+
+}
+
+
+
-
- +
- - + + diff --git a/dev/reference/nn_sigmoid.html b/dev/reference/nn_sigmoid.html index 925ca1d28..558486d4c 100644 --- a/dev/reference/nn_sigmoid.html +++ b/dev/reference/nn_sigmoid.html @@ -1,79 +1,18 @@ - - - - - - - -Sigmoid module — nn_sigmoid • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Sigmoid module — nn_sigmoid • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,58 +111,56 @@

Applies the element-wise function:

-
nn_sigmoid()
- - -

Details

+
+
nn_sigmoid()
+
+
+

Details

$$ \mbox{Sigmoid}(x) = \sigma(x) = \frac{1}{1 + \exp(-x)} $$

-

Shape

- +
+
+

Shape

-
    -
  • Input: \((N, *)\) where * means, any number of additional +

    • Input: \((N, *)\) where * means, any number of additional dimensions

    • Output: \((N, *)\), same shape as the input

    • -
    - - -

    Examples

    -
    if (torch_is_installed()) {
    -m <- nn_sigmoid()
    -input <- torch_randn(2)
    -output <- m(input)
    -
    -}
    -
    +
+ +
+

Examples

+
if (torch_is_installed()) {
+m <- nn_sigmoid()
+input <- torch_randn(2)
+output <- m(input)
+
+}
+
+
+
-
- +
- - + + diff --git a/dev/reference/nn_smooth_l1_loss.html b/dev/reference/nn_smooth_l1_loss.html index 212c10520..be4d06d68 100644 --- a/dev/reference/nn_smooth_l1_loss.html +++ b/dev/reference/nn_smooth_l1_loss.html @@ -1,83 +1,22 @@ - - - - - - - -Smooth L1 loss — nn_smooth_l1_loss • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Smooth L1 loss — nn_smooth_l1_loss • torch - - - - - - - - - - - - - - - - - + + -
-
- -
- -
+
@@ -197,24 +119,22 @@ prevents exploding gradients (e.g. see Fast R-CNN paper by Ross Gir Also known as the Huber loss:

-
nn_smooth_l1_loss(reduction = "mean")
+
+
nn_smooth_l1_loss(reduction = "mean")
+
-

Arguments

- - - - - - -
reduction

(string, optional): Specifies the reduction to apply to the output: +

+

Arguments

+
reduction
+

(string, optional): Specifies the reduction to apply to the output: 'none' | 'mean' | 'sum'. 'none': no reduction will be applied, 'mean': the sum of the output will be divided by the number of elements in the output, 'sum': the output will be summed. Note: size_average and reduce are in the process of being deprecated, and in the meantime, -specifying either of those two args will override reduction. Default: 'mean'

- -

Details

- +specifying either of those two args will override reduction. Default: 'mean'

+
+
+

Details

$$ \mbox{loss}(x, y) = \frac{1}{n} \sum_{i} z_{i} $$

@@ -229,44 +149,39 @@ $$

\(x\) and \(y\) arbitrary shapes with a total of \(n\) elements each the sum operation still operates over all the elements, and divides by \(n\). The division by \(n\) can be avoided if sets reduction = 'sum'.

-

Shape

- +
+
+

Shape

-
    -
  • Input: \((N, *)\) where \(*\) means, any number of additional +

    • Input: \((N, *)\) where \(*\) means, any number of additional dimensions

    • Target: \((N, *)\), same shape as the input

    • Output: scalar. If reduction is 'none', then \((N, *)\), same shape as the input

    • -
    - +
+
-
- +
- - + + diff --git a/dev/reference/nn_soft_margin_loss.html b/dev/reference/nn_soft_margin_loss.html index c968d85ed..892eaadd3 100644 --- a/dev/reference/nn_soft_margin_loss.html +++ b/dev/reference/nn_soft_margin_loss.html @@ -1,81 +1,20 @@ - - - - - - - -Soft margin loss — nn_soft_margin_loss • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Soft margin loss — nn_soft_margin_loss • torch - - - - - - - - - - - - - - - - - + + -
-
- -
- -
+
@@ -193,64 +115,57 @@ logistic loss between input tensor \(x\) and target tensor \(y\) (containing 1 or -1).

-
nn_soft_margin_loss(reduction = "mean")
+
+
nn_soft_margin_loss(reduction = "mean")
+
-

Arguments

- - - - - - -
reduction

(string, optional): Specifies the reduction to apply to the output: +

+

Arguments

+
reduction
+

(string, optional): Specifies the reduction to apply to the output: 'none' | 'mean' | 'sum'. 'none': no reduction will be applied, 'mean': the sum of the output will be divided by the number of elements in the output, 'sum': the output will be summed. Note: size_average and reduce are in the process of being deprecated, and in the meantime, -specifying either of those two args will override reduction. Default: 'mean'

- -

Details

- +specifying either of those two args will override reduction. Default: 'mean'

+
+
+

Details

$$ \mbox{loss}(x, y) = \sum_i \frac{\log(1 + \exp(-y[i]*x[i]))}{\mbox{x.nelement}()} $$

-

Shape

- +
+
+

Shape

-
    -
  • Input: \((*)\) where \(*\) means, any number of additional +

    • Input: \((*)\) where \(*\) means, any number of additional dimensions

    • Target: \((*)\), same shape as the input

    • Output: scalar. If reduction is 'none', then same shape as the input

    • -
    - +
+
-
- +
- - + + diff --git a/dev/reference/nn_softmax.html b/dev/reference/nn_softmax.html index 03e690435..8a4b8b8a8 100644 --- a/dev/reference/nn_softmax.html +++ b/dev/reference/nn_softmax.html @@ -1,82 +1,21 @@ - - - - - - - -Softmax module — nn_softmax • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Softmax module — nn_softmax • torch - - - - - - - - - - - - - - - - - + + -
-
- -
- -
+
@@ -195,79 +117,76 @@ lie in the range [0,1] and sum to 1. Softmax is defined as:

-
nn_softmax(dim)
- -

Arguments

- - - - - - -
dim

(int): A dimension along which Softmax will be computed (so every slice -along dim will sum to 1).

- -

Value

+
+
nn_softmax(dim)
+
+
+

Arguments

+
dim
+

(int): A dimension along which Softmax will be computed (so every slice +along dim will sum to 1).

+
+
+

Value

: a Tensor of the same dimension and shape as the input with values in the range [0, 1]

-

Details

- +
+
+

Details

$$ \mbox{Softmax}(x_{i}) = \frac{\exp(x_i)}{\sum_j \exp(x_j)} $$

When the input Tensor is a sparse tensor then the unspecifed values are treated as -Inf.

-

Note

- +
+
+

Note

This module doesn't work directly with NLLLoss, which expects the Log to be computed between the Softmax and itself. Use LogSoftmax instead (it's faster and has better numerical properties).

-

Shape

- +
+
+

Shape

-
    -
  • Input: \((*)\) where * means, any number of additional +

    • Input: \((*)\) where * means, any number of additional dimensions

    • Output: \((*)\), same shape as the input

    • -
    - - -

    Examples

    -
    if (torch_is_installed()) {
    -m <- nn_softmax(1)
    -input <- torch_randn(2, 3)
    -output <- m(input)
    -
    -}
    -
    +
+ +
+

Examples

+
if (torch_is_installed()) {
+m <- nn_softmax(1)
+input <- torch_randn(2, 3)
+output <- m(input)
+
+}
+
+
+
-
- +
- - + + diff --git a/dev/reference/nn_softmax2d.html b/dev/reference/nn_softmax2d.html index 340f2f4fd..615481e30 100644 --- a/dev/reference/nn_softmax2d.html +++ b/dev/reference/nn_softmax2d.html @@ -1,81 +1,20 @@ - - - - - - - -Softmax2d module — nn_softmax2d • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Softmax2d module — nn_softmax2d • torch - - - - - - - - - - - - - - - - - + + -
-
- -
- -
+
@@ -193,56 +115,54 @@ When given an image of Channels x Height x Width, it will apply Softmax to each location \((Channels, h_i, w_j)\)

-
nn_softmax2d()
- - -

Value

+
+
nn_softmax2d()
+
+
+

Value

a Tensor of the same dimension and shape as the input with values in the range [0, 1]

-

Shape

- +
+
+

Shape

-
    -
  • Input: \((N, C, H, W)\)

  • +
    • Input: \((N, C, H, W)\)

    • Output: \((N, C, H, W)\) (same shape as input)

    • -
    - - -

    Examples

    -
    if (torch_is_installed()) {
    -m <- nn_softmax2d()
    -input <- torch_randn(2, 3, 12, 13)
    -output <- m(input)
    -
    -}
    -
    +
+ +
+

Examples

+
if (torch_is_installed()) {
+m <- nn_softmax2d()
+input <- torch_randn(2, 3, 12, 13)
+output <- m(input)
+
+}
+
+
+
-
- +
- - + + diff --git a/dev/reference/nn_softmin.html b/dev/reference/nn_softmin.html index ce9c241d9..6c0f1cf84 100644 --- a/dev/reference/nn_softmin.html +++ b/dev/reference/nn_softmin.html @@ -1,82 +1,21 @@ - - - - - - - -Softmin — nn_softmin • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Softmin — nn_softmin • torch - - - - - - - - - - - - - - - - - + + -
-
- -
- -
+
@@ -195,71 +117,67 @@ lie in the range [0, 1] and sum to 1. Softmin is defined as:

-
nn_softmin(dim)
- -

Arguments

- - - - - - -
dim

(int): A dimension along which Softmin will be computed (so every slice -along dim will sum to 1).

- -

Value

+
+
nn_softmin(dim)
+
+
+

Arguments

+
dim
+

(int): A dimension along which Softmin will be computed (so every slice +along dim will sum to 1).

+
+
+

Value

a Tensor of the same dimension and shape as the input, with values in the range [0, 1].

-

Details

- +
+
+

Details

$$ \mbox{Softmin}(x_{i}) = \frac{\exp(-x_i)}{\sum_j \exp(-x_j)} $$

-

Shape

- +
+
+

Shape

-
    -
  • Input: \((*)\) where * means, any number of additional +

    • Input: \((*)\) where * means, any number of additional dimensions

    • Output: \((*)\), same shape as the input

    • -
    - - -

    Examples

    -
    if (torch_is_installed()) {
    -m <- nn_softmin(dim = 1)
    -input <- torch_randn(2, 2)
    -output <- m(input)
    -
    -}
    -
    +
+ +
+

Examples

+
if (torch_is_installed()) {
+m <- nn_softmin(dim = 1)
+input <- torch_randn(2, 2)
+output <- m(input)
+
+}
+
+
+
-
- +
- - + + diff --git a/dev/reference/nn_softplus.html b/dev/reference/nn_softplus.html index a1c99c944..f63ce1424 100644 --- a/dev/reference/nn_softplus.html +++ b/dev/reference/nn_softplus.html @@ -1,82 +1,21 @@ - - - - - - - -Softplus module — nn_softplus • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Softplus module — nn_softplus • torch - - - - - - - - - - - - - - - - - + + -
-
- -
- -
+
@@ -195,71 +117,64 @@ $$ $$

-
nn_softplus(beta = 1, threshold = 20)
- -

Arguments

- - - - - - - - - - -
beta

the \(\beta\) value for the Softplus formulation. Default: 1

threshold

values above this revert to a linear function. Default: 20

- -

Details

+
+
nn_softplus(beta = 1, threshold = 20)
+
+
+

Arguments

+
beta
+

the \(\beta\) value for the Softplus formulation. Default: 1

+
threshold
+

values above this revert to a linear function. Default: 20

+
+
+

Details

SoftPlus is a smooth approximation to the ReLU function and can be used to constrain the output of a machine to always be positive. For numerical stability the implementation reverts to the linear function when \(input \times \beta > threshold\).

-

Shape

- +
+
+

Shape

-
    -
  • Input: \((N, *)\) where * means, any number of additional +

    • Input: \((N, *)\) where * means, any number of additional dimensions

    • Output: \((N, *)\), same shape as the input

    • -
    - - -

    Examples

    -
    if (torch_is_installed()) {
    -m <- nn_softplus()
    -input <- torch_randn(2)
    -output <- m(input)
    -
    -}
    -
    +
+ +
+

Examples

+
if (torch_is_installed()) {
+m <- nn_softplus()
+input <- torch_randn(2)
+output <- m(input)
+
+}
+
+
+
-
- +
- - + + diff --git a/dev/reference/nn_softshrink.html b/dev/reference/nn_softshrink.html index 7f781b924..42c47bf26 100644 --- a/dev/reference/nn_softshrink.html +++ b/dev/reference/nn_softshrink.html @@ -1,79 +1,18 @@ - - - - - - - -Softshrink module — nn_softshrink • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Softshrink module — nn_softshrink • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,19 +111,17 @@

Applies the soft shrinkage function elementwise:

-
nn_softshrink(lambd = 0.5)
- -

Arguments

- - - - - - -
lambd

the \(\lambda\) (must be no less than zero) value for the Softshrink formulation. Default: 0.5

- -

Details

+
+
nn_softshrink(lambd = 0.5)
+
+
+

Arguments

+
lambd
+

the \(\lambda\) (must be no less than zero) value for the Softshrink formulation. Default: 0.5

+
+
+

Details

$$ \mbox{SoftShrinkage}(x) = \left\{ \begin{array}{ll} @@ -211,50 +131,47 @@ x + \lambda, & \mbox{ if } x < -\lambda \\ \end{array} \right. $$

-

Shape

- +
+
+

Shape

-
    -
  • Input: \((N, *)\) where * means, any number of additional +

    • Input: \((N, *)\) where * means, any number of additional dimensions

    • Output: \((N, *)\), same shape as the input

    • -
    - - -

    Examples

    -
    if (torch_is_installed()) {
    -m <- nn_softshrink()
    -input <- torch_randn(2)
    -output <- m(input)
    -
    -}
    -
    +
+ +
+

Examples

+
if (torch_is_installed()) {
+m <- nn_softshrink()
+input <- torch_randn(2)
+output <- m(input)
+
+}
+
+
+
-
- +
- - + + diff --git a/dev/reference/nn_softsign.html b/dev/reference/nn_softsign.html index a7a9eed98..a06453549 100644 --- a/dev/reference/nn_softsign.html +++ b/dev/reference/nn_softsign.html @@ -1,82 +1,21 @@ - - - - - - - -Softsign module — nn_softsign • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Softsign module — nn_softsign • torch - - - - - - - - - - - - - - - - - + + -
-
- -
- -
+
@@ -195,53 +117,50 @@ $$ $$

-
nn_softsign()
- - -

Shape

+
+
nn_softsign()
+
+
+

Shape

-
    -
  • Input: \((N, *)\) where * means, any number of additional +

    • Input: \((N, *)\) where * means, any number of additional dimensions

    • Output: \((N, *)\), same shape as the input

    • -
    - - -

    Examples

    -
    if (torch_is_installed()) {
    -m <- nn_softsign()
    -input <- torch_randn(2)
    -output <- m(input)
    -
    -}
    -
    +
+ +
+

Examples

+
if (torch_is_installed()) {
+m <- nn_softsign()
+input <- torch_randn(2)
+output <- m(input)
+
+}
+
+
+
-
- +
- - + + diff --git a/dev/reference/nn_tanh.html b/dev/reference/nn_tanh.html index 34a037779..0901fe27d 100644 --- a/dev/reference/nn_tanh.html +++ b/dev/reference/nn_tanh.html @@ -1,79 +1,18 @@ - - - - - - - -Tanh module — nn_tanh • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Tanh module — nn_tanh • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,58 +111,56 @@

Applies the element-wise function:

-
nn_tanh()
- - -

Details

+
+
nn_tanh()
+
+
+

Details

$$ \mbox{Tanh}(x) = \tanh(x) = \frac{\exp(x) - \exp(-x)} {\exp(x) + \exp(-x)} $$

-

Shape

- +
+
+

Shape

-
    -
  • Input: \((N, *)\) where * means, any number of additional +

    • Input: \((N, *)\) where * means, any number of additional dimensions

    • Output: \((N, *)\), same shape as the input

    • -
    - - -

    Examples

    -
    if (torch_is_installed()) {
    -m <- nn_tanh()
    -input <- torch_randn(2)
    -output <- m(input)
    -
    -}
    -
    +
+ +
+

Examples

+
if (torch_is_installed()) {
+m <- nn_tanh()
+input <- torch_randn(2)
+output <- m(input)
+
+}
+
+
+
-
- +
- - + + diff --git a/dev/reference/nn_tanhshrink.html b/dev/reference/nn_tanhshrink.html index 8fc690cd4..55322ad69 100644 --- a/dev/reference/nn_tanhshrink.html +++ b/dev/reference/nn_tanhshrink.html @@ -1,79 +1,18 @@ - - - - - - - -Tanhshrink module — nn_tanhshrink • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Tanhshrink module — nn_tanhshrink • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,58 +111,56 @@

Applies the element-wise function:

-
nn_tanhshrink()
- - -

Details

+
+
nn_tanhshrink()
+
+
+

Details

$$ \mbox{Tanhshrink}(x) = x - \tanh(x) $$

-

Shape

- +
+
+

Shape

-
    -
  • Input: \((N, *)\) where * means, any number of additional +

    • Input: \((N, *)\) where * means, any number of additional dimensions

    • Output: \((N, *)\), same shape as the input

    • -
    - - -

    Examples

    -
    if (torch_is_installed()) {
    -m <- nn_tanhshrink()
    -input <- torch_randn(2)
    -output <- m(input)
    -
    -}
    -
    +
+ +
+

Examples

+
if (torch_is_installed()) {
+m <- nn_tanhshrink()
+input <- torch_randn(2)
+output <- m(input)
+
+}
+
+
+
-
- +
- - + + diff --git a/dev/reference/nn_threshold.html b/dev/reference/nn_threshold.html index 1331bc8af..7c7c4977e 100644 --- a/dev/reference/nn_threshold.html +++ b/dev/reference/nn_threshold.html @@ -1,79 +1,18 @@ - - - - - - - -Threshoold module — nn_threshold • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Threshoold module — nn_threshold • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,27 +111,21 @@

Thresholds each element of the input Tensor.

-
nn_threshold(threshold, value, inplace = FALSE)
- -

Arguments

- - - - - - - - - - - - - - -
threshold

The value to threshold at

value

The value to replace with

inplace

can optionally do the operation in-place. Default: FALSE

- -

Details

+
+
nn_threshold(threshold, value, inplace = FALSE)
+
+
+

Arguments

+
threshold
+

The value to threshold at

+
value
+

The value to replace with

+
inplace
+

can optionally do the operation in-place. Default: FALSE

+
+
+

Details

Threshold is defined as: $$ y = @@ -219,50 +135,47 @@ $$ \end{array} \right. $$

-

Shape

- +
+
+

Shape

-
    -
  • Input: \((N, *)\) where * means, any number of additional +

    • Input: \((N, *)\) where * means, any number of additional dimensions

    • Output: \((N, *)\), same shape as the input

    • -
    - - -

    Examples

    -
    if (torch_is_installed()) {
    -m <- nn_threshold(0.1, 20)
    -input <- torch_randn(2)
    -output <- m(input)
    -
    -}
    -
    +
+ +
+

Examples

+
if (torch_is_installed()) {
+m <- nn_threshold(0.1, 20)
+input <- torch_randn(2)
+output <- m(input)
+
+}
+
+
+
-
- +
- - + + diff --git a/dev/reference/nn_triplet_margin_loss.html b/dev/reference/nn_triplet_margin_loss.html index 827a757b2..3e8261b9c 100644 --- a/dev/reference/nn_triplet_margin_loss.html +++ b/dev/reference/nn_triplet_margin_loss.html @@ -1,83 +1,22 @@ - - - - - - - -Triplet margin loss — nn_triplet_margin_loss • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Triplet margin loss — nn_triplet_margin_loss • torch - - - - - - - - - - - - - - - - - + + -
-
- -
- -
+
@@ -197,50 +119,40 @@ is composed by a, p and n (i.e., an \((N, D)\).

-
nn_triplet_margin_loss(
-  margin = 1,
-  p = 2,
-  eps = 1e-06,
-  swap = FALSE,
-  reduction = "mean"
-)
+
+
nn_triplet_margin_loss(
+  margin = 1,
+  p = 2,
+  eps = 1e-06,
+  swap = FALSE,
+  reduction = "mean"
+)
+
-

Arguments

- - - - - - - - - - - - - - - - - - - - - - -
margin

(float, optional): Default: \(1\).

p

(int, optional): The norm degree for pairwise distance. Default: \(2\).

eps

constant to avoid NaN's

swap

(bool, optional): The distance swap is described in detail in the paper -Learning shallow convolutional feature descriptors with triplet losses by -V. Balntas, E. Riba et al. Default: FALSE.

reduction

(string, optional): Specifies the reduction to apply to the output: +

+

Arguments

+
margin
+

(float, optional): Default: \(1\).

+
p
+

(int, optional): The norm degree for pairwise distance. Default: \(2\).

+
eps
+

constant to avoid NaN's

+
swap
+

(bool, optional): The distance swap is described in detail in the paper +Learning shallow convolutional feature descriptors with triplet losses by +V. Balntas, E. Riba et al. Default: FALSE.

+
reduction
+

(string, optional): Specifies the reduction to apply to the output: 'none' | 'mean' | 'sum'. 'none': no reduction will be applied, 'mean': the sum of the output will be divided by the number of elements in the output, 'sum': the output will be summed. Note: size_average and reduce are in the process of being deprecated, and in the meantime, -specifying either of those two args will override reduction. Default: 'mean'

- -

Details

- +specifying either of those two args will override reduction. Default: 'mean'

+
+
+

Details

The distance swap is described in detail in the paper -Learning shallow convolutional feature descriptors with triplet losses by +Learning shallow convolutional feature descriptors with triplet losses by V. Balntas, E. Riba et al.

The loss function for each sample in the mini-batch is:

$$ @@ -250,55 +162,52 @@ $$

$$ d(x_i, y_i) = | {\bf x}_i - {\bf y}_i |_p $$

-

See also nn_triplet_margin_with_distance_loss(), which computes the +

See also nn_triplet_margin_with_distance_loss(), which computes the triplet margin loss for input tensors using a custom distance function.

-

Shape

- +
+
+

Shape

-
    -
  • Input: \((N, D)\) where \(D\) is the vector dimension.

  • +
    • Input: \((N, D)\) where \(D\) is the vector dimension.

    • Output: A Tensor of shape \((N)\) if reduction is 'none', or a scalar otherwise.

    • -
    - - -

    Examples

    -
    if (torch_is_installed()) {
    -triplet_loss <- nn_triplet_margin_loss(margin = 1, p = 2)
    -anchor <- torch_randn(100, 128, requires_grad=TRUE)
    -positive <- torch_randn(100, 128, requires_grad=TRUE)
    -negative <- torch_randn(100, 128, requires_grad=TRUE)
    -output <- triplet_loss(anchor, positive, negative)
    -output$backward()
    -
    -}
    -
    +
+ +
+

Examples

+
if (torch_is_installed()) {
+triplet_loss <- nn_triplet_margin_loss(margin = 1, p = 2)
+anchor <- torch_randn(100, 128, requires_grad=TRUE)
+positive <- torch_randn(100, 128, requires_grad=TRUE)
+negative <- torch_randn(100, 128, requires_grad=TRUE)
+output <- triplet_loss(anchor, positive, negative)
+output$backward()
+
+}
+
+
+
-
- +
- - + + diff --git a/dev/reference/nn_triplet_margin_with_distance_loss.html b/dev/reference/nn_triplet_margin_with_distance_loss.html index 9be53514f..2aa025261 100644 --- a/dev/reference/nn_triplet_margin_with_distance_loss.html +++ b/dev/reference/nn_triplet_margin_with_distance_loss.html @@ -1,84 +1,23 @@ - - - - - - - -Triplet margin with distance loss — nn_triplet_margin_with_distance_loss • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Triplet margin with distance loss — nn_triplet_margin_with_distance_loss • torch - - - - - - - - + + -
-
- -
- -
+
@@ -199,48 +121,40 @@ between the anchor and positive example ("positive distance") and the anchor and negative example ("negative distance").

-
nn_triplet_margin_with_distance_loss(
-  distance_function = NULL,
-  margin = 1,
-  swap = FALSE,
-  reduction = "mean"
-)
+
+
nn_triplet_margin_with_distance_loss(
+  distance_function = NULL,
+  margin = 1,
+  swap = FALSE,
+  reduction = "mean"
+)
+
-

Arguments

- - - - - - - - - - - - - - - - - - -
distance_function

(callable, optional): A nonnegative, real-valued function that +

+

Arguments

+
distance_function
+

(callable, optional): A nonnegative, real-valued function that quantifies the closeness of two tensors. If not specified, -nn_pairwise_distance() will be used. Default: None

margin

(float, optional): A non-negative margin representing the minimum difference +nn_pairwise_distance() will be used. Default: None

+
margin
+

(float, optional): A non-negative margin representing the minimum difference between the positive and negative distances required for the loss to be 0. Larger margins penalize cases where the negative examples are not distant enough from the -anchors, relative to the positives. Default: \(1\).

swap

(bool, optional): Whether to use the distance swap described in the paper -Learning shallow convolutional feature descriptors with triplet losses by +anchors, relative to the positives. Default: \(1\).

+
swap
+

(bool, optional): Whether to use the distance swap described in the paper +Learning shallow convolutional feature descriptors with triplet losses by V. Balntas, E. Riba et al. If TRUE, and if the positive example is closer to the negative example than the anchor is, swaps the positive example and the anchor in -the loss computation. Default: FALSE.

reduction

(string, optional): Specifies the (optional) reduction to apply to the output: +the loss computation. Default: FALSE.

+
reduction
+

(string, optional): Specifies the (optional) reduction to apply to the output: 'none' | 'mean' | 'sum'. 'none': no reduction will be applied, 'mean': the sum of the output will be divided by the number of -elements in the output, 'sum': the output will be summed. Default: 'mean'

- -

Details

- +elements in the output, 'sum': the output will be summed. Default: 'mean'

+
+
+

Details

The unreduced loss (i.e., with reduction set to 'none') can be described as:

$$ @@ -262,83 +176,80 @@ If reduction is not 'none' \mbox{sum}(L), & \mbox{if reduction} = \mbox{`sum'.} \end{array} $$

-

See also nn_triplet_margin_loss(), which computes the triplet +

See also nn_triplet_margin_loss(), which computes the triplet loss for input tensors using the \(l_p\) distance as the distance function.

-

Shape

- +
+
+

Shape

-
    -
  • Input: \((N, *)\) where \(*\) represents any number of additional dimensions +

    • Input: \((N, *)\) where \(*\) represents any number of additional dimensions as supported by the distance function.

    • Output: A Tensor of shape \((N)\) if reduction is 'none', or a scalar otherwise.

    • -
    - - -

    Examples

    -
    if (torch_is_installed()) {
    -# Initialize embeddings
    -embedding <- nn_embedding(1000, 128)
    -anchor_ids <- torch_randint(1, 1000, 1, dtype = torch_long())
    -positive_ids <- torch_randint(1, 1000, 1, dtype = torch_long())
    -negative_ids <- torch_randint(1, 1000, 1, dtype = torch_long())
    -anchor <- embedding(anchor_ids)
    -positive <- embedding(positive_ids)
    -negative <- embedding(negative_ids)
    -
    -# Built-in Distance Function
    -triplet_loss <- nn_triplet_margin_with_distance_loss(
    -  distance_function=nn_pairwise_distance()
    -)
    -output <- triplet_loss(anchor, positive, negative)
    -
    -# Custom Distance Function
    -l_infinity <- function(x1, x2) {
    -  torch_max(torch_abs(x1 - x2), dim = 1)[[1]]
    -}
    -
    -triplet_loss <- nn_triplet_margin_with_distance_loss(
    -  distance_function=l_infinity, margin=1.5
    -)
    -output <- triplet_loss(anchor, positive, negative)
    -
    -# Custom Distance Function (Lambda)
    -triplet_loss <- nn_triplet_margin_with_distance_loss(
    -  distance_function = function(x, y) {
    -    1 - nnf_cosine_similarity(x, y)
    -  }
    -)
    -
    -output <- triplet_loss(anchor, positive, negative)
    -
    -}
    -
    +
+ +
+

Examples

+
if (torch_is_installed()) {
+# Initialize embeddings
+embedding <- nn_embedding(1000, 128)
+anchor_ids <- torch_randint(1, 1000, 1, dtype = torch_long())
+positive_ids <- torch_randint(1, 1000, 1, dtype = torch_long())
+negative_ids <- torch_randint(1, 1000, 1, dtype = torch_long())
+anchor <- embedding(anchor_ids)
+positive <- embedding(positive_ids)
+negative <- embedding(negative_ids)
+
+# Built-in Distance Function
+triplet_loss <- nn_triplet_margin_with_distance_loss(
+  distance_function=nn_pairwise_distance()
+)
+output <- triplet_loss(anchor, positive, negative)
+
+# Custom Distance Function
+l_infinity <- function(x1, x2) {
+  torch_max(torch_abs(x1 - x2), dim = 1)[[1]]
+}
+
+triplet_loss <- nn_triplet_margin_with_distance_loss(
+  distance_function=l_infinity, margin=1.5
+)
+output <- triplet_loss(anchor, positive, negative)
+
+# Custom Distance Function (Lambda)
+triplet_loss <- nn_triplet_margin_with_distance_loss(
+  distance_function = function(x, y) {
+    1 - nnf_cosine_similarity(x, y)
+  }
+)
+
+output <- triplet_loss(anchor, positive, negative)
+
+}
+
+
+
-
- +
- - + + diff --git a/dev/reference/nn_utils_clip_grad_norm_.html b/dev/reference/nn_utils_clip_grad_norm_.html index 71ae310d7..ed751d881 100644 --- a/dev/reference/nn_utils_clip_grad_norm_.html +++ b/dev/reference/nn_utils_clip_grad_norm_.html @@ -1,80 +1,19 @@ - - - - - - - -Clips gradient norm of an iterable of parameters. — nn_utils_clip_grad_norm_ • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Clips gradient norm of an iterable of parameters. — nn_utils_clip_grad_norm_ • torch - - - - - - + + - - -
-
- -
- -
+
@@ -191,56 +113,47 @@ concatenated into a single vector. Gradients are modified in-place." /> concatenated into a single vector. Gradients are modified in-place.

-
nn_utils_clip_grad_norm_(parameters, max_norm, norm_type = 2)
- -

Arguments

- - - - - - - - - - - - - - -
parameters

(IterableTensor or Tensor): an iterable of Tensors or a -single Tensor that will have gradients normalized

max_norm

(float or int): max norm of the gradients

norm_type

(float or int): type of the used p-norm. Can be Inf for -infinity norm.

- -

Value

+
+
nn_utils_clip_grad_norm_(parameters, max_norm, norm_type = 2)
+
+
+

Arguments

+
parameters
+

(IterableTensor or Tensor): an iterable of Tensors or a +single Tensor that will have gradients normalized

+
max_norm
+

(float or int): max norm of the gradients

+
norm_type
+

(float or int): type of the used p-norm. Can be Inf for +infinity norm.

+
+
+

Value

Total norm of the parameters (viewed as a single vector).

+
+
-
- +
- - + + diff --git a/dev/reference/nn_utils_clip_grad_value_.html b/dev/reference/nn_utils_clip_grad_value_.html index e06c76638..01de7d220 100644 --- a/dev/reference/nn_utils_clip_grad_value_.html +++ b/dev/reference/nn_utils_clip_grad_value_.html @@ -1,79 +1,18 @@ - - - - - - - -Clips gradient of an iterable of parameters at specified value. — nn_utils_clip_grad_value_ • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Clips gradient of an iterable of parameters at specified value. — nn_utils_clip_grad_value_ • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,52 +111,45 @@

Gradients are modified in-place.

-
nn_utils_clip_grad_value_(parameters, clip_value)
- -

Arguments

- - - - - - - - - - -
parameters

(Iterable(Tensor) or Tensor): an iterable of Tensors or a -single Tensor that will have gradients normalized

clip_value

(float or int): maximum allowed value of the gradients.

- -

Details

+
+
nn_utils_clip_grad_value_(parameters, clip_value)
+
+
+

Arguments

+
parameters
+

(Iterable(Tensor) or Tensor): an iterable of Tensors or a +single Tensor that will have gradients normalized

+
clip_value
+

(float or int): maximum allowed value of the gradients.

+
+
+

Details

The gradients are clipped in the range \(\left[\mbox{-clip\_value}, \mbox{clip\_value}\right]\)

+
+
-
- +
- - + + diff --git a/dev/reference/nn_utils_rnn_pack_padded_sequence.html b/dev/reference/nn_utils_rnn_pack_padded_sequence.html index 8d8d04c87..01fc1dcb9 100644 --- a/dev/reference/nn_utils_rnn_pack_padded_sequence.html +++ b/dev/reference/nn_utils_rnn_pack_padded_sequence.html @@ -1,82 +1,21 @@ - - - - - - - -Packs a Tensor containing padded sequences of variable length. — nn_utils_rnn_pack_padded_sequence • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Packs a Tensor containing padded sequences of variable length. — nn_utils_rnn_pack_padded_sequence • torch - - - - - - - - - - - - - - - + + - - -
-
- -
- -
+
@@ -195,78 +117,69 @@ longest sequence (equal to lengths[1]), B is the batch TRUE, B x T x * input is expected.

-
nn_utils_rnn_pack_padded_sequence(
-  input,
-  lengths,
-  batch_first = FALSE,
-  enforce_sorted = TRUE
-)
+
+
nn_utils_rnn_pack_padded_sequence(
+  input,
+  lengths,
+  batch_first = FALSE,
+  enforce_sorted = TRUE
+)
+
-

Arguments

- - - - - - - - - - - - - - - - - - -
input

(Tensor): padded batch of variable length sequences.

lengths

(Tensor): list of sequences lengths of each batch element.

batch_first

(bool, optional): if TRUE, the input is expected in B x T x * -format.

enforce_sorted

(bool, optional): if TRUE, the input is expected to +

+

Arguments

+
input
+

(Tensor): padded batch of variable length sequences.

+
lengths
+

(Tensor): list of sequences lengths of each batch element.

+
batch_first
+

(bool, optional): if TRUE, the input is expected in B x T x * +format.

+
enforce_sorted
+

(bool, optional): if TRUE, the input is expected to contain sequences sorted by length in a decreasing order. If -FALSE, the input will get sorted unconditionally. Default: TRUE.

- -

Value

- +FALSE, the input will get sorted unconditionally. Default: TRUE.

+
+
+

Value

a PackedSequence object

-

Details

- +
+
+

Details

For unsorted sequences, use enforce_sorted = FALSE. If enforce_sorted is TRUE, the sequences should be sorted by length in a decreasing order, i.e. input[,1] should be the longest sequence, and input[,B] the shortest one. enforce_sorted = TRUE is only necessary for ONNX export.

-

Note

- +
+
+

Note

This function accepts any input that has at least two dimensions. You can apply it to pack the labels, and use the output of the RNN with them to compute the loss directly. A Tensor can be retrieved from a PackedSequence object by accessing its .data attribute.

+
+
-
- +
- - + + diff --git a/dev/reference/nn_utils_rnn_pack_sequence.html b/dev/reference/nn_utils_rnn_pack_sequence.html index b24841f80..ab5f40b00 100644 --- a/dev/reference/nn_utils_rnn_pack_sequence.html +++ b/dev/reference/nn_utils_rnn_pack_sequence.html @@ -1,81 +1,20 @@ - - - - - - - -Packs a list of variable length Tensors — nn_utils_rnn_pack_sequence • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Packs a list of variable length Tensors — nn_utils_rnn_pack_sequence • torch - - - - - - - - - - - - - - + + - - - -
-
- -
- -
+
@@ -193,67 +115,63 @@ the length of a sequence and * is any number of trailing dimensions including zero.

-
nn_utils_rnn_pack_sequence(sequences, enforce_sorted = TRUE)
+
+
nn_utils_rnn_pack_sequence(sequences, enforce_sorted = TRUE)
+
-

Arguments

- - - - - - - - - - -
sequences

(list[Tensor]): A list of sequences of decreasing length.

enforce_sorted

(bool, optional): if TRUE, checks that the input +

+

Arguments

+
sequences
+

(list[Tensor]): A list of sequences of decreasing length.

+
enforce_sorted
+

(bool, optional): if TRUE, checks that the input contains sequences sorted by length in a decreasing order. If -FALSE, this condition is not checked. Default: TRUE.

- -

Value

- +FALSE, this condition is not checked. Default: TRUE.

+
+
+

Value

a PackedSequence object

-

Details

- +
+
+

Details

For unsorted sequences, use enforce_sorted = FALSE. If enforce_sorted is TRUE, the sequences should be sorted in the order of decreasing length. enforce_sorted = TRUE is only necessary for ONNX export.

+
-

Examples

-
if (torch_is_installed()) {
-x <- torch_tensor(c(1,2,3), dtype = torch_long())
-y <- torch_tensor(c(4, 5), dtype = torch_long())
-z <- torch_tensor(c(6), dtype = torch_long())
-
-p <- nn_utils_rnn_pack_sequence(list(x, y, z))
-
-}
-
+
+

Examples

+
if (torch_is_installed()) {
+x <- torch_tensor(c(1,2,3), dtype = torch_long())
+y <- torch_tensor(c(4, 5), dtype = torch_long())
+z <- torch_tensor(c(6), dtype = torch_long())
+
+p <- nn_utils_rnn_pack_sequence(list(x, y, z))
+
+}
+
+
+
-
- +
- - + + diff --git a/dev/reference/nn_utils_rnn_pad_packed_sequence.html b/dev/reference/nn_utils_rnn_pad_packed_sequence.html index f4f17c3c0..1b916cef4 100644 --- a/dev/reference/nn_utils_rnn_pad_packed_sequence.html +++ b/dev/reference/nn_utils_rnn_pad_packed_sequence.html @@ -1,79 +1,18 @@ - - - - - - - -Pads a packed batch of variable length sequences. — nn_utils_rnn_pad_packed_sequence • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Pads a packed batch of variable length sequences. — nn_utils_rnn_pad_packed_sequence • torch - - - - - - + + - - -
-
- -
- -
+
-

It is an inverse operation to nn_utils_rnn_pack_padded_sequence().

+

It is an inverse operation to nn_utils_rnn_pack_padded_sequence().

-
nn_utils_rnn_pad_packed_sequence(
-  sequence,
-  batch_first = FALSE,
-  padding_value = 0,
-  total_length = NULL
-)
+
+
nn_utils_rnn_pad_packed_sequence(
+  sequence,
+  batch_first = FALSE,
+  padding_value = 0,
+  total_length = NULL
+)
+
-

Arguments

- - - - - - - - - - - - - - - - - - -
sequence

(PackedSequence): batch to pad

batch_first

(bool, optional): if True, the output will be in ``B x T x *` -format.

padding_value

(float, optional): values for padded elements.

total_length

(int, optional): if not NULL, the output will be padded to +

+

Arguments

+
sequence
+

(PackedSequence): batch to pad

+
batch_first
+

(bool, optional): if True, the output will be in ``B x T x *` +format.

+
padding_value
+

(float, optional): values for padded elements.

+
total_length
+

(int, optional): if not NULL, the output will be padded to have length total_length. This method will throw ValueError if total_length is less than the max sequence length in -sequence.

- -

Value

- +sequence.

+
+
+

Value

Tuple of Tensor containing the padded sequence, and a Tensor containing the list of lengths of each sequence in the batch. Batch elements will be re-ordered as they were ordered originally when -the batch was passed to nn_utils_rnn_pack_padded_sequence() or -nn_utils_rnn_pack_sequence().

-

Details

- +the batch was passed to nn_utils_rnn_pack_padded_sequence() or +nn_utils_rnn_pack_sequence().

+
+
+

Details

The returned Tensor's data will be of size T x B x *, where T is the length of the longest sequence and B is the batch size. If batch_first is TRUE, the data will be transposed into B x T x * format.

-

Note

- +
+
+

Note

total_length is useful to implement the pack sequence -> recurrent network -> unpack sequence pattern in a nn_module wrapped in ~torch.nn.DataParallel.

+
-

Examples

-
if (torch_is_installed()) {
-seq <- torch_tensor(rbind(c(1,2,0), c(3,0,0), c(4,5,6)))        
-lens <- c(2,1,3)
-packed <- nn_utils_rnn_pack_padded_sequence(seq, lens, batch_first = TRUE,
-                                            enforce_sorted = FALSE)
-packed
-nn_utils_rnn_pad_packed_sequence(packed, batch_first=TRUE)
-
-}
-#> [[1]]
-#> torch_tensor
-#>  1  2  0
-#>  3  0  0
-#>  4  5  6
-#> [ CPUFloatType{3,3} ]
-#> 
-#> [[2]]
-#> torch_tensor
-#>  2
-#>  1
-#>  3
-#> [ CPULongType{3} ]
-#> 
-
+
+

Examples

+
if (torch_is_installed()) {
+seq <- torch_tensor(rbind(c(1,2,0), c(3,0,0), c(4,5,6)))        
+lens <- c(2,1,3)
+packed <- nn_utils_rnn_pack_padded_sequence(seq, lens, batch_first = TRUE,
+                                            enforce_sorted = FALSE)
+packed
+nn_utils_rnn_pad_packed_sequence(packed, batch_first=TRUE)
+
+}
+#> [[1]]
+#> torch_tensor
+#>  1  2  0
+#>  3  0  0
+#>  4  5  6
+#> [ CPUFloatType{3,3} ]
+#> 
+#> [[2]]
+#> torch_tensor
+#>  2
+#>  1
+#>  3
+#> [ CPULongType{3} ]
+#> 
+
+
+
-
- +
- - + + diff --git a/dev/reference/nn_utils_rnn_pad_sequence.html b/dev/reference/nn_utils_rnn_pad_sequence.html index dfa5acb3d..aaf66a8c5 100644 --- a/dev/reference/nn_utils_rnn_pad_sequence.html +++ b/dev/reference/nn_utils_rnn_pad_sequence.html @@ -1,82 +1,21 @@ - - - - - - - -Pad a list of variable length Tensors with padding_value — nn_utils_rnn_pad_sequence • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Pad a list of variable length Tensors with padding_value — nn_utils_rnn_pad_sequence • torch - - - - - - - - - - - - - - - + + - - -
-
- -
- -
+
@@ -195,77 +117,72 @@ sequences with size L x * and if batch_first is False, and T otherwise.

-
nn_utils_rnn_pad_sequence(sequences, batch_first = FALSE, padding_value = 0)
- -

Arguments

- - - - - - - - - - - - - - -
sequences

(list[Tensor]): list of variable length sequences.

batch_first

(bool, optional): output will be in B x T x * if TRUE, -or in T x B x * otherwise

padding_value

(float, optional): value for padded elements. Default: 0.

- -

Value

+
+
nn_utils_rnn_pad_sequence(sequences, batch_first = FALSE, padding_value = 0)
+
+
+

Arguments

+
sequences
+

(list[Tensor]): list of variable length sequences.

+
batch_first
+

(bool, optional): output will be in B x T x * if TRUE, +or in T x B x * otherwise

+
padding_value
+

(float, optional): value for padded elements. Default: 0.

+
+
+

Value

Tensor of size T x B x * if batch_first is FALSE. Tensor of size B x T x * otherwise

-

Details

- +
+
+

Details

B is batch size. It is equal to the number of elements in sequences. T is length of the longest sequence. L is length of the sequence. * is any number of trailing dimensions, including none.

-

Note

- +
+
+

Note

This function returns a Tensor of size T x B x * or B x T x * where T is the length of the longest sequence. This function assumes trailing dimensions and type of all the Tensors in sequences are same.

+
-

Examples

-
if (torch_is_installed()) {
-a <- torch_ones(25, 300)
-b <- torch_ones(22, 300)
-c <- torch_ones(15, 300)
-nn_utils_rnn_pad_sequence(list(a, b, c))$size()
-
-}
-#> [1]  25   3 300
-
+
+

Examples

+
if (torch_is_installed()) {
+a <- torch_ones(25, 300)
+b <- torch_ones(22, 300)
+c <- torch_ones(15, 300)
+nn_utils_rnn_pad_sequence(list(a, b, c))$size()
+
+}
+#> [1]  25   3 300
+
+
+
-
- +
- - + + diff --git a/dev/reference/nnf_adaptive_avg_pool1d.html b/dev/reference/nnf_adaptive_avg_pool1d.html index 2a36dd0b3..d471af992 100644 --- a/dev/reference/nnf_adaptive_avg_pool1d.html +++ b/dev/reference/nnf_adaptive_avg_pool1d.html @@ -1,80 +1,19 @@ - - - - - - - -Adaptive_avg_pool1d — nnf_adaptive_avg_pool1d • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Adaptive_avg_pool1d — nnf_adaptive_avg_pool1d • torch - - - - - - + + - - -
-
- -
- -
+
@@ -191,47 +113,39 @@ several input planes." /> several input planes.

-
nnf_adaptive_avg_pool1d(input, output_size)
- -

Arguments

- - - - - - - - - - -
input

input tensor of shape (minibatch , in_channels , iW)

output_size

the target output size (single integer)

+
+
nnf_adaptive_avg_pool1d(input, output_size)
+
+
+

Arguments

+
input
+

input tensor of shape (minibatch , in_channels , iW)

+
output_size
+

the target output size (single integer)

+
+
-
- +
- - + + diff --git a/dev/reference/nnf_adaptive_avg_pool2d.html b/dev/reference/nnf_adaptive_avg_pool2d.html index 0beedd6e9..531605c22 100644 --- a/dev/reference/nnf_adaptive_avg_pool2d.html +++ b/dev/reference/nnf_adaptive_avg_pool2d.html @@ -1,80 +1,19 @@ - - - - - - - -Adaptive_avg_pool2d — nnf_adaptive_avg_pool2d • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Adaptive_avg_pool2d — nnf_adaptive_avg_pool2d • torch - - - - - - + + - - -
-
- -
- -
+
@@ -191,47 +113,39 @@ several input planes." /> several input planes.

-
nnf_adaptive_avg_pool2d(input, output_size)
- -

Arguments

- - - - - - - - - - -
input

input tensor (minibatch, in_channels , iH , iW)

output_size

the target output size (single integer or double-integer tuple)

+
+
nnf_adaptive_avg_pool2d(input, output_size)
+
+
+

Arguments

+
input
+

input tensor (minibatch, in_channels , iH , iW)

+
output_size
+

the target output size (single integer or double-integer tuple)

+
+
-
- +
- - + + diff --git a/dev/reference/nnf_adaptive_avg_pool3d.html b/dev/reference/nnf_adaptive_avg_pool3d.html index bab2be48c..2d3ca0ef1 100644 --- a/dev/reference/nnf_adaptive_avg_pool3d.html +++ b/dev/reference/nnf_adaptive_avg_pool3d.html @@ -1,80 +1,19 @@ - - - - - - - -Adaptive_avg_pool3d — nnf_adaptive_avg_pool3d • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Adaptive_avg_pool3d — nnf_adaptive_avg_pool3d • torch - - - - - - + + - - -
-
- -
- -
+
@@ -191,47 +113,39 @@ several input planes." /> several input planes.

-
nnf_adaptive_avg_pool3d(input, output_size)
- -

Arguments

- - - - - - - - - - -
input

input tensor (minibatch, in_channels , iT * iH , iW)

output_size

the target output size (single integer or triple-integer tuple)

+
+
nnf_adaptive_avg_pool3d(input, output_size)
+
+
+

Arguments

+
input
+

input tensor (minibatch, in_channels , iT * iH , iW)

+
output_size
+

the target output size (single integer or triple-integer tuple)

+
+
-
- +
- - + + diff --git a/dev/reference/nnf_adaptive_max_pool1d.html b/dev/reference/nnf_adaptive_max_pool1d.html index ecc18c936..5407caed4 100644 --- a/dev/reference/nnf_adaptive_max_pool1d.html +++ b/dev/reference/nnf_adaptive_max_pool1d.html @@ -1,80 +1,19 @@ - - - - - - - -Adaptive_max_pool1d — nnf_adaptive_max_pool1d • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Adaptive_max_pool1d — nnf_adaptive_max_pool1d • torch - - - - - - - - + + -
-
- -
- -
+
@@ -191,51 +113,41 @@ several input planes." /> several input planes.

-
nnf_adaptive_max_pool1d(input, output_size, return_indices = FALSE)
- -

Arguments

- - - - - - - - - - - - - - -
input

input tensor of shape (minibatch , in_channels , iW)

output_size

the target output size (single integer)

return_indices

whether to return pooling indices. Default: FALSE

+
+
nnf_adaptive_max_pool1d(input, output_size, return_indices = FALSE)
+
+
+

Arguments

+
input
+

input tensor of shape (minibatch , in_channels , iW)

+
output_size
+

the target output size (single integer)

+
return_indices
+

whether to return pooling indices. Default: FALSE

+
+
-
- +
- - + + diff --git a/dev/reference/nnf_adaptive_max_pool2d.html b/dev/reference/nnf_adaptive_max_pool2d.html index 97b2a2339..510085564 100644 --- a/dev/reference/nnf_adaptive_max_pool2d.html +++ b/dev/reference/nnf_adaptive_max_pool2d.html @@ -1,80 +1,19 @@ - - - - - - - -Adaptive_max_pool2d — nnf_adaptive_max_pool2d • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Adaptive_max_pool2d — nnf_adaptive_max_pool2d • torch - - - - - - - - + + -
-
- -
- -
+
@@ -191,51 +113,41 @@ several input planes." /> several input planes.

-
nnf_adaptive_max_pool2d(input, output_size, return_indices = FALSE)
- -

Arguments

- - - - - - - - - - - - - - -
input

input tensor (minibatch, in_channels , iH , iW)

output_size

the target output size (single integer or double-integer tuple)

return_indices

whether to return pooling indices. Default: FALSE

+
+
nnf_adaptive_max_pool2d(input, output_size, return_indices = FALSE)
+
+
+

Arguments

+
input
+

input tensor (minibatch, in_channels , iH , iW)

+
output_size
+

the target output size (single integer or double-integer tuple)

+
return_indices
+

whether to return pooling indices. Default: FALSE

+
+
-
- +
- - + + diff --git a/dev/reference/nnf_adaptive_max_pool3d.html b/dev/reference/nnf_adaptive_max_pool3d.html index 9e3d42bac..8d383e877 100644 --- a/dev/reference/nnf_adaptive_max_pool3d.html +++ b/dev/reference/nnf_adaptive_max_pool3d.html @@ -1,80 +1,19 @@ - - - - - - - -Adaptive_max_pool3d — nnf_adaptive_max_pool3d • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Adaptive_max_pool3d — nnf_adaptive_max_pool3d • torch - - - - - - - - + + -
-
- -
- -
+
@@ -191,51 +113,41 @@ several input planes." /> several input planes.

-
nnf_adaptive_max_pool3d(input, output_size, return_indices = FALSE)
- -

Arguments

- - - - - - - - - - - - - - -
input

input tensor (minibatch, in_channels , iT * iH , iW)

output_size

the target output size (single integer or triple-integer tuple)

return_indices

whether to return pooling indices. Default:FALSE

+
+
nnf_adaptive_max_pool3d(input, output_size, return_indices = FALSE)
+
+
+

Arguments

+
input
+

input tensor (minibatch, in_channels , iT * iH , iW)

+
output_size
+

the target output size (single integer or triple-integer tuple)

+
return_indices
+

whether to return pooling indices. Default:FALSE

+
+
-
- +
- - + + diff --git a/dev/reference/nnf_affine_grid.html b/dev/reference/nnf_affine_grid.html index 15fb9ed31..14e06a663 100644 --- a/dev/reference/nnf_affine_grid.html +++ b/dev/reference/nnf_affine_grid.html @@ -1,80 +1,19 @@ - - - - - - - -Affine_grid — nnf_affine_grid • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Affine_grid — nnf_affine_grid • torch - - - - - - - - + + -
-
- -
- -
+
@@ -191,65 +113,56 @@ affine matrices theta." /> affine matrices theta.

-
nnf_affine_grid(theta, size, align_corners = FALSE)
- -

Arguments

- - - - - - - - - - - - - - -
theta

(Tensor) input batch of affine matrices with shape -(\(N \times 2 \times 3\)) for 2D or (\(N \times 3 \times 4\)) for 3D

size

(torch.Size) the target output image size. (\(N \times C \times H \times W\) +

+
nnf_affine_grid(theta, size, align_corners = FALSE)
+
+ +
+

Arguments

+
theta
+

(Tensor) input batch of affine matrices with shape +(\(N \times 2 \times 3\)) for 2D or (\(N \times 3 \times 4\)) for 3D

+
size
+

(torch.Size) the target output image size. (\(N \times C \times H \times W\) for 2D or \(N \times C \times D \times H \times W\) for 3D) -Example: torch.Size((32, 3, 24, 24))

align_corners

(bool, optional) if True, consider -1 and 1 +Example: torch.Size((32, 3, 24, 24))

+
align_corners
+

(bool, optional) if True, consider -1 and 1 to refer to the centers of the corner pixels rather than the image corners. -Refer to nnf_grid_sample() for a more complete description. A grid generated by -nnf_affine_grid() should be passed to nnf_grid_sample() with the same setting for -this option. Default: False

- -

Note

- +Refer to nnf_grid_sample() for a more complete description. A grid generated by +nnf_affine_grid() should be passed to nnf_grid_sample() with the same setting for +this option. Default: False

+
+
+

Note

-

This function is often used in conjunction with nnf_grid_sample() +

This function is often used in conjunction with nnf_grid_sample() to build Spatial Transformer Networks_ .

+
+
-
- +
- - + + diff --git a/dev/reference/nnf_alpha_dropout.html b/dev/reference/nnf_alpha_dropout.html index 185eeb3ef..f3c9c85d4 100644 --- a/dev/reference/nnf_alpha_dropout.html +++ b/dev/reference/nnf_alpha_dropout.html @@ -1,79 +1,18 @@ - - - - - - - -Alpha_dropout — nnf_alpha_dropout • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Alpha_dropout — nnf_alpha_dropout • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,56 +111,44 @@

Applies alpha dropout to the input.

-
nnf_alpha_dropout(input, p = 0.5, training = FALSE, inplace = FALSE)
- -

Arguments

- - - - - - - - - - - - - - - - - - -
input

the input tensor

p

probability of an element to be zeroed. Default: 0.5

training

apply dropout if is TRUE. Default: TRUE

inplace

If set to TRUE, will do this operation in-place. -Default: FALSE

+
+
nnf_alpha_dropout(input, p = 0.5, training = FALSE, inplace = FALSE)
+
+
+

Arguments

+
input
+

the input tensor

+
p
+

probability of an element to be zeroed. Default: 0.5

+
training
+

apply dropout if is TRUE. Default: TRUE

+
inplace
+

If set to TRUE, will do this operation in-place. +Default: FALSE

+
+
-
- +
- - + + diff --git a/dev/reference/nnf_avg_pool1d.html b/dev/reference/nnf_avg_pool1d.html index 39d3a8f45..5ed0da83e 100644 --- a/dev/reference/nnf_avg_pool1d.html +++ b/dev/reference/nnf_avg_pool1d.html @@ -1,80 +1,19 @@ - - - - - - - -Avg_pool1d — nnf_avg_pool1d • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Avg_pool1d — nnf_avg_pool1d • torch - - - - - - + + - - -
-
- -
- -
+
@@ -191,75 +113,59 @@ input planes." /> input planes.

-
nnf_avg_pool1d(
-  input,
-  kernel_size,
-  stride = NULL,
-  padding = 0,
-  ceil_mode = FALSE,
-  count_include_pad = TRUE
-)
- -

Arguments

- - - - - - - - - - - - - - - - - - - - - - - - - - -
input

input tensor of shape (minibatch , in_channels , iW)

kernel_size

the size of the window. Can be a single number or a -tuple (kW,).

stride

the stride of the window. Can be a single number or a tuple -(sW,). Default: kernel_size

padding

implicit zero paddings on both sides of the input. Can be a -single number or a tuple (padW,). Default: 0

ceil_mode

when True, will use ceil instead of floor to compute the -output shape. Default: FALSE

count_include_pad

when True, will include the zero-padding in the -averaging calculation. Default: TRUE

+
+
nnf_avg_pool1d(
+  input,
+  kernel_size,
+  stride = NULL,
+  padding = 0,
+  ceil_mode = FALSE,
+  count_include_pad = TRUE
+)
+
+
+

Arguments

+
input
+

input tensor of shape (minibatch , in_channels , iW)

+
kernel_size
+

the size of the window. Can be a single number or a +tuple (kW,).

+
stride
+

the stride of the window. Can be a single number or a tuple +(sW,). Default: kernel_size

+
padding
+

implicit zero paddings on both sides of the input. Can be a +single number or a tuple (padW,). Default: 0

+
ceil_mode
+

when True, will use ceil instead of floor to compute the +output shape. Default: FALSE

+
count_include_pad
+

when True, will include the zero-padding in the +averaging calculation. Default: TRUE

+
+
-
- +
- - + + diff --git a/dev/reference/nnf_avg_pool2d.html b/dev/reference/nnf_avg_pool2d.html index 6d438ba4e..0ad5fd93e 100644 --- a/dev/reference/nnf_avg_pool2d.html +++ b/dev/reference/nnf_avg_pool2d.html @@ -1,81 +1,20 @@ - - - - - - - -Avg_pool2d — nnf_avg_pool2d • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Avg_pool2d — nnf_avg_pool2d • torch - - - - - - - - - - - - - - - + + - - -
-
- -
- -
+
@@ -193,81 +115,63 @@ input planes." /> input planes.

-
nnf_avg_pool2d(
-  input,
-  kernel_size,
-  stride = NULL,
-  padding = 0,
-  ceil_mode = FALSE,
-  count_include_pad = TRUE,
-  divisor_override = NULL
-)
- -

Arguments

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
input

input tensor (minibatch, in_channels , iH , iW)

kernel_size

size of the pooling region. Can be a single number or a -tuple (kH, kW)

stride

stride of the pooling operation. Can be a single number or a -tuple (sH, sW). Default: kernel_size

padding

implicit zero paddings on both sides of the input. Can be a -single number or a tuple (padH, padW). Default: 0

ceil_mode

when True, will use ceil instead of floor in the formula -to compute the output shape. Default: FALSE

count_include_pad

when True, will include the zero-padding in the -averaging calculation. Default: TRUE

divisor_override

if specified, it will be used as divisor, otherwise -size of the pooling region will be used. Default: NULL

+
+
nnf_avg_pool2d(
+  input,
+  kernel_size,
+  stride = NULL,
+  padding = 0,
+  ceil_mode = FALSE,
+  count_include_pad = TRUE,
+  divisor_override = NULL
+)
+
+
+

Arguments

+
input
+

input tensor (minibatch, in_channels , iH , iW)

+
kernel_size
+

size of the pooling region. Can be a single number or a +tuple (kH, kW)

+
stride
+

stride of the pooling operation. Can be a single number or a +tuple (sH, sW). Default: kernel_size

+
padding
+

implicit zero paddings on both sides of the input. Can be a +single number or a tuple (padH, padW). Default: 0

+
ceil_mode
+

when True, will use ceil instead of floor in the formula +to compute the output shape. Default: FALSE

+
count_include_pad
+

when True, will include the zero-padding in the +averaging calculation. Default: TRUE

+
divisor_override
+

if specified, it will be used as divisor, otherwise +size of the pooling region will be used. Default: NULL

+
+
-
- +
- - + + diff --git a/dev/reference/nnf_avg_pool3d.html b/dev/reference/nnf_avg_pool3d.html index 71e3cd443..07288505c 100644 --- a/dev/reference/nnf_avg_pool3d.html +++ b/dev/reference/nnf_avg_pool3d.html @@ -1,81 +1,20 @@ - - - - - - - -Avg_pool3d — nnf_avg_pool3d • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Avg_pool3d — nnf_avg_pool3d • torch - - - - - - - - - - - - - - - + + - - -
-
- -
- -
+
@@ -193,81 +115,63 @@ size \(sT * sH * sW\) steps. The number of output features is equal to \(\lfloor \frac{ \mbox{input planes} }{sT} \rfloor\).

-
nnf_avg_pool3d(
-  input,
-  kernel_size,
-  stride = NULL,
-  padding = 0,
-  ceil_mode = FALSE,
-  count_include_pad = TRUE,
-  divisor_override = NULL
-)
- -

Arguments

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
input

input tensor (minibatch, in_channels , iT * iH , iW)

kernel_size

size of the pooling region. Can be a single number or a -tuple (kT, kH, kW)

stride

stride of the pooling operation. Can be a single number or a -tuple (sT, sH, sW). Default: kernel_size

padding

implicit zero paddings on both sides of the input. Can be a -single number or a tuple (padT, padH, padW), Default: 0

ceil_mode

when True, will use ceil instead of floor in the formula -to compute the output shape

count_include_pad

when True, will include the zero-padding in the -averaging calculation

divisor_override

NA if specified, it will be used as divisor, otherwise -size of the pooling region will be used. Default: NULL

+
+
nnf_avg_pool3d(
+  input,
+  kernel_size,
+  stride = NULL,
+  padding = 0,
+  ceil_mode = FALSE,
+  count_include_pad = TRUE,
+  divisor_override = NULL
+)
+
+
+

Arguments

+
input
+

input tensor (minibatch, in_channels , iT * iH , iW)

+
kernel_size
+

size of the pooling region. Can be a single number or a +tuple (kT, kH, kW)

+
stride
+

stride of the pooling operation. Can be a single number or a +tuple (sT, sH, sW). Default: kernel_size

+
padding
+

implicit zero paddings on both sides of the input. Can be a +single number or a tuple (padT, padH, padW), Default: 0

+
ceil_mode
+

when True, will use ceil instead of floor in the formula +to compute the output shape

+
count_include_pad
+

when True, will include the zero-padding in the +averaging calculation

+
divisor_override
+

NA if specified, it will be used as divisor, otherwise +size of the pooling region will be used. Default: NULL

+
+
-
- +
- - + + diff --git a/dev/reference/nnf_batch_norm.html b/dev/reference/nnf_batch_norm.html index 841651fb3..cd125ace1 100644 --- a/dev/reference/nnf_batch_norm.html +++ b/dev/reference/nnf_batch_norm.html @@ -1,79 +1,18 @@ - - - - - - - -Batch_norm — nnf_batch_norm • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Batch_norm — nnf_batch_norm • torch - - - - - - + + - - -
-
- -
- -
+
@@ -189,81 +111,61 @@

Applies Batch Normalization for each channel across a batch of data.

-
nnf_batch_norm(
-  input,
-  running_mean,
-  running_var,
-  weight = NULL,
-  bias = NULL,
-  training = FALSE,
-  momentum = 0.1,
-  eps = 1e-05
-)
- -

Arguments

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
input

input tensor

running_mean

the running_mean tensor

running_var

the running_var tensor

weight

the weight tensor

bias

the bias tensor

training

bool wether it's training. Default: FALSE

momentum

the value used for the running_mean and running_var computation. -Can be set to None for cumulative moving average (i.e. simple average). Default: 0.1

eps

a value added to the denominator for numerical stability. Default: 1e-5

+
+
nnf_batch_norm(
+  input,
+  running_mean,
+  running_var,
+  weight = NULL,
+  bias = NULL,
+  training = FALSE,
+  momentum = 0.1,
+  eps = 1e-05
+)
+
+
+

Arguments

+
input
+

input tensor

+
running_mean
+

the running_mean tensor

+
running_var
+

the running_var tensor

+
weight
+

the weight tensor

+
bias
+

the bias tensor

+
training
+

bool wether it's training. Default: FALSE

+
momentum
+

the value used for the running_mean and running_var computation. +Can be set to None for cumulative moving average (i.e. simple average). Default: 0.1

+
eps
+

a value added to the denominator for numerical stability. Default: 1e-5

+
+
-
- +
- - + + diff --git a/dev/reference/nnf_bilinear.html b/dev/reference/nnf_bilinear.html index 876b60949..d3e9610ad 100644 --- a/dev/reference/nnf_bilinear.html +++ b/dev/reference/nnf_bilinear.html @@ -1,80 +1,19 @@ - - - - - - - -Bilinear — nnf_bilinear • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Bilinear — nnf_bilinear • torch - - - - - - + + - - -
-
- -
- -
+
@@ -191,62 +113,50 @@ \(y = x_1 A x_2 + b\)

-
nnf_bilinear(input1, input2, weight, bias = NULL)
+
+
nnf_bilinear(input1, input2, weight, bias = NULL)
+
-

Arguments

- - - - - - - - - - - - - - - - - - -
input1

\((N, *, H_{in1})\) where \(H_{in1}=\mbox{in1\_features}\) +

+

Arguments

+
input1
+

\((N, *, H_{in1})\) where \(H_{in1}=\mbox{in1\_features}\) and \(*\) means any number of additional dimensions. -All but the last dimension of the inputs should be the same.

input2

\((N, *, H_{in2})\) where \(H_{in2}=\mbox{in2\_features}\)

weight

\((\mbox{out\_features}, \mbox{in1\_features}, -\mbox{in2\_features})\)

bias

\((\mbox{out\_features})\)

- -

Value

- -

output \((N, *, H_{out})\) where \(H_{out}=\mbox{out\_features}\) -and all but the last dimension are the same shape as the input.

+All but the last dimension of the inputs should be the same.

+
input2
+

\((N, *, H_{in2})\) where \(H_{in2}=\mbox{in2\_features}\)

+
weight
+

\((\mbox{out\_features}, \mbox{in1\_features}, +\mbox{in2\_features})\)

+
bias
+

\((\mbox{out\_features})\)

+
+
+

Value

+

output \((N, *, H_{out})\) where \(H_{out}=\mbox{out\_features}\)and all but the last dimension are the same shape as the input.

+
+
-
- +
- - + + diff --git a/dev/reference/nnf_binary_cross_entropy.html b/dev/reference/nnf_binary_cross_entropy.html index a6e1be698..6577917f9 100644 --- a/dev/reference/nnf_binary_cross_entropy.html +++ b/dev/reference/nnf_binary_cross_entropy.html @@ -1,80 +1,19 @@ - - - - - - - -Binary_cross_entropy — nnf_binary_cross_entropy • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Binary_cross_entropy — nnf_binary_cross_entropy • torch - - - - - - + + - - -
-
- -
- -
+
@@ -191,63 +113,51 @@ between the target and the output." /> between the target and the output.

-
nnf_binary_cross_entropy(
-  input,
-  target,
-  weight = NULL,
-  reduction = c("mean", "sum", "none")
-)
- -

Arguments

- - - - - - - - - - - - - - - - - - -
input

tensor (N,*) where ** means, any number of additional dimensions

target

tensor (N,*) , same shape as the input

weight

(tensor) weight for each value.

reduction

(string, optional) – Specifies the reduction to apply to the +

+
nnf_binary_cross_entropy(
+  input,
+  target,
+  weight = NULL,
+  reduction = c("mean", "sum", "none")
+)
+
+ +
+

Arguments

+
input
+

tensor (N,*) where ** means, any number of additional dimensions

+
target
+

tensor (N,*) , same shape as the input

+
weight
+

(tensor) weight for each value.

+
reduction
+

(string, optional) – Specifies the reduction to apply to the output: 'none' | 'mean' | 'sum'. 'none': no reduction will be applied, 'mean': the sum of the output will be divided by the number of elements in the output, -'sum': the output will be summed. Default: 'mean'

- +'sum': the output will be summed. Default: 'mean'

+
+
-
- +
- - + + diff --git a/dev/reference/nnf_binary_cross_entropy_with_logits.html b/dev/reference/nnf_binary_cross_entropy_with_logits.html index 24dc29d64..be84f6f58 100644 --- a/dev/reference/nnf_binary_cross_entropy_with_logits.html +++ b/dev/reference/nnf_binary_cross_entropy_with_logits.html @@ -1,80 +1,19 @@ - - - - - - - -Binary_cross_entropy_with_logits — nnf_binary_cross_entropy_with_logits • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Binary_cross_entropy_with_logits — nnf_binary_cross_entropy_with_logits • torch - - - - - - + + - - -
-
- -
- -
+
@@ -191,70 +113,56 @@ logits." /> logits.

-
nnf_binary_cross_entropy_with_logits(
-  input,
-  target,
-  weight = NULL,
-  reduction = c("mean", "sum", "none"),
-  pos_weight = NULL
-)
+
+
nnf_binary_cross_entropy_with_logits(
+  input,
+  target,
+  weight = NULL,
+  reduction = c("mean", "sum", "none"),
+  pos_weight = NULL
+)
+
-

Arguments

- - - - - - - - - - - - - - - - - - - - - - -
input

Tensor of arbitrary shape

target

Tensor of the same shape as input

weight

(Tensor, optional) a manual rescaling weight if provided it's -repeated to match input tensor shape.

reduction

(string, optional) – Specifies the reduction to apply to the +

+

Arguments

+
input
+

Tensor of arbitrary shape

+
target
+

Tensor of the same shape as input

+
weight
+

(Tensor, optional) a manual rescaling weight if provided it's +repeated to match input tensor shape.

+
reduction
+

(string, optional) – Specifies the reduction to apply to the output: 'none' | 'mean' | 'sum'. 'none': no reduction will be applied, 'mean': the sum of the output will be divided by the number of elements in the output, -'sum': the output will be summed. Default: 'mean'

pos_weight

(Tensor, optional) a weight of positive examples. -Must be a vector with length equal to the number of classes.

- +'sum': the output will be summed. Default: 'mean'

+
pos_weight
+

(Tensor, optional) a weight of positive examples. +Must be a vector with length equal to the number of classes.

+
+
-
- +
- - + + diff --git a/dev/reference/nnf_celu.html b/dev/reference/nnf_celu.html index ac91a2d40..7afbaef31 100644 --- a/dev/reference/nnf_celu.html +++ b/dev/reference/nnf_celu.html @@ -1,79 +1,18 @@ - - - - - - - -Celu — nnf_celu • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Celu — nnf_celu • torch - - - - - - + + - - -
-
- -
- -
+
@@ -189,54 +111,44 @@

Applies element-wise, \(CELU(x) = max(0,x) + min(0, \alpha * (exp(x \alpha) - 1))\).

-
nnf_celu(input, alpha = 1, inplace = FALSE)
-
-nnf_celu_(input, alpha = 1)
- -

Arguments

- - - - - - - - - - - - - - -
input

(N,*) tensor, where * means, any number of additional -dimensions

alpha

the alpha value for the CELU formulation. Default: 1.0

inplace

can optionally do the operation in-place. Default: FALSE

+
+
nnf_celu(input, alpha = 1, inplace = FALSE)
 
+nnf_celu_(input, alpha = 1)
+
+ +
+

Arguments

+
input
+

(N,*) tensor, where * means, any number of additional +dimensions

+
alpha
+

the alpha value for the CELU formulation. Default: 1.0

+
inplace
+

can optionally do the operation in-place. Default: FALSE

+
+
-
- +
- - + + diff --git a/dev/reference/nnf_contrib_sparsemax.html b/dev/reference/nnf_contrib_sparsemax.html index a67bd0b8e..99ec67432 100644 --- a/dev/reference/nnf_contrib_sparsemax.html +++ b/dev/reference/nnf_contrib_sparsemax.html @@ -1,79 +1,18 @@ - - - - - - - -Sparsemax — nnf_contrib_sparsemax • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Sparsemax — nnf_contrib_sparsemax • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,52 +111,45 @@

Applies the SparseMax activation.

-
nnf_contrib_sparsemax(input, dim = -1)
- -

Arguments

- - - - - - - - - - -
input

the input tensor

dim

The dimension over which to apply the sparsemax function. (-1)

- -

Details

+
+
nnf_contrib_sparsemax(input, dim = -1)
+
+
+

Arguments

+
input
+

the input tensor

+
dim
+

The dimension over which to apply the sparsemax function. (-1)

+
+
+
-
- +
- - + + diff --git a/dev/reference/nnf_conv1d.html b/dev/reference/nnf_conv1d.html index 965290bf5..2eae698e1 100644 --- a/dev/reference/nnf_conv1d.html +++ b/dev/reference/nnf_conv1d.html @@ -1,80 +1,19 @@ - - - - - - - -Conv1d — nnf_conv1d • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Conv1d — nnf_conv1d • torch - - - - - - + + - - -
-
- -
- -
+
@@ -191,79 +113,61 @@ planes." /> planes.

-
nnf_conv1d(
-  input,
-  weight,
-  bias = NULL,
-  stride = 1,
-  padding = 0,
-  dilation = 1,
-  groups = 1
-)
- -

Arguments

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
input

input tensor of shape (minibatch, in_channels , iW)

weight

filters of shape (out_channels, in_channels/groups , kW)

bias

optional bias of shape (out_channels). Default: NULL

stride

the stride of the convolving kernel. Can be a single number or -a one-element tuple (sW,). Default: 1

padding

implicit paddings on both sides of the input. Can be a -single number or a one-element tuple (padW,). Default: 0

dilation

the spacing between kernel elements. Can be a single number or -a one-element tuple (dW,). Default: 1

groups

split input into groups, in_channels should be divisible by -the number of groups. Default: 1

+
+
nnf_conv1d(
+  input,
+  weight,
+  bias = NULL,
+  stride = 1,
+  padding = 0,
+  dilation = 1,
+  groups = 1
+)
+
+
+

Arguments

+
input
+

input tensor of shape (minibatch, in_channels , iW)

+
weight
+

filters of shape (out_channels, in_channels/groups , kW)

+
bias
+

optional bias of shape (out_channels). Default: NULL

+
stride
+

the stride of the convolving kernel. Can be a single number or +a one-element tuple (sW,). Default: 1

+
padding
+

implicit paddings on both sides of the input. Can be a +single number or a one-element tuple (padW,). Default: 0

+
dilation
+

the spacing between kernel elements. Can be a single number or +a one-element tuple (dW,). Default: 1

+
groups
+

split input into groups, in_channels should be divisible by +the number of groups. Default: 1

+
+
-
- +
- - + + diff --git a/dev/reference/nnf_conv2d.html b/dev/reference/nnf_conv2d.html index 214a90231..a4b2249d8 100644 --- a/dev/reference/nnf_conv2d.html +++ b/dev/reference/nnf_conv2d.html @@ -1,80 +1,19 @@ - - - - - - - -Conv2d — nnf_conv2d • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Conv2d — nnf_conv2d • torch - - - - - - + + - - -
-
- -
- -
+
@@ -191,79 +113,61 @@ planes." /> planes.

-
nnf_conv2d(
-  input,
-  weight,
-  bias = NULL,
-  stride = 1,
-  padding = 0,
-  dilation = 1,
-  groups = 1
-)
- -

Arguments

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
input

input tensor of shape (minibatch, in_channels, iH , iW)

weight

filters of shape (out_channels , in_channels/groups, kH , kW)

bias

optional bias tensor of shape (out_channels). Default: NULL

stride

the stride of the convolving kernel. Can be a single number or a -tuple (sH, sW). Default: 1

padding

implicit paddings on both sides of the input. Can be a -single number or a tuple (padH, padW). Default: 0

dilation

the spacing between kernel elements. Can be a single number or -a tuple (dH, dW). Default: 1

groups

split input into groups, in_channels should be divisible by the -number of groups. Default: 1

+
+
nnf_conv2d(
+  input,
+  weight,
+  bias = NULL,
+  stride = 1,
+  padding = 0,
+  dilation = 1,
+  groups = 1
+)
+
+
+

Arguments

+
input
+

input tensor of shape (minibatch, in_channels, iH , iW)

+
weight
+

filters of shape (out_channels , in_channels/groups, kH , kW)

+
bias
+

optional bias tensor of shape (out_channels). Default: NULL

+
stride
+

the stride of the convolving kernel. Can be a single number or a +tuple (sH, sW). Default: 1

+
padding
+

implicit paddings on both sides of the input. Can be a +single number or a tuple (padH, padW). Default: 0

+
dilation
+

the spacing between kernel elements. Can be a single number or +a tuple (dH, dW). Default: 1

+
groups
+

split input into groups, in_channels should be divisible by the +number of groups. Default: 1

+
+
-
- +
- - + + diff --git a/dev/reference/nnf_conv3d.html b/dev/reference/nnf_conv3d.html index cc3bae9e8..3d338005c 100644 --- a/dev/reference/nnf_conv3d.html +++ b/dev/reference/nnf_conv3d.html @@ -1,80 +1,19 @@ - - - - - - - -Conv3d — nnf_conv3d • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Conv3d — nnf_conv3d • torch - - - - - - + + - - -
-
- -
- -
+
@@ -191,79 +113,61 @@ planes." /> planes.

-
nnf_conv3d(
-  input,
-  weight,
-  bias = NULL,
-  stride = 1,
-  padding = 0,
-  dilation = 1,
-  groups = 1
-)
- -

Arguments

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
input

input tensor of shape (minibatch, in_channels , iT , iH , iW)

weight

filters of shape (out_channels , in_channels/groups, kT , kH , kW)

bias

optional bias tensor of shape (out_channels). Default: NULL

stride

the stride of the convolving kernel. Can be a single number or a -tuple (sT, sH, sW). Default: 1

padding

implicit paddings on both sides of the input. Can be a -single number or a tuple (padT, padH, padW). Default: 0

dilation

the spacing between kernel elements. Can be a single number or -a tuple (dT, dH, dW). Default: 1

groups

split input into groups, in_channels should be divisible by -the number of groups. Default: 1

+
+
nnf_conv3d(
+  input,
+  weight,
+  bias = NULL,
+  stride = 1,
+  padding = 0,
+  dilation = 1,
+  groups = 1
+)
+
+
+

Arguments

+
input
+

input tensor of shape (minibatch, in_channels , iT , iH , iW)

+
weight
+

filters of shape (out_channels , in_channels/groups, kT , kH , kW)

+
bias
+

optional bias tensor of shape (out_channels). Default: NULL

+
stride
+

the stride of the convolving kernel. Can be a single number or a +tuple (sT, sH, sW). Default: 1

+
padding
+

implicit paddings on both sides of the input. Can be a +single number or a tuple (padT, padH, padW). Default: 0

+
dilation
+

the spacing between kernel elements. Can be a single number or +a tuple (dT, dH, dW). Default: 1

+
groups
+

split input into groups, in_channels should be divisible by +the number of groups. Default: 1

+
+
-
- +
- - + + diff --git a/dev/reference/nnf_conv_tbc.html b/dev/reference/nnf_conv_tbc.html index 3ff5f53b3..f90388052 100644 --- a/dev/reference/nnf_conv_tbc.html +++ b/dev/reference/nnf_conv_tbc.html @@ -1,80 +1,19 @@ - - - - - - - -Conv_tbc — nnf_conv_tbc • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Conv_tbc — nnf_conv_tbc • torch - - - - - - - - + + -
-
- -
- -
+
@@ -191,57 +113,45 @@ Input and output dimensions are (Time, Batch, Channels) - hence TBC." /> Input and output dimensions are (Time, Batch, Channels) - hence TBC.

-
nnf_conv_tbc(input, weight, bias, pad = 0)
- -

Arguments

- - - - - - - - - - - - - - - - - - -
input

input tensor of shape \((\mbox{sequence length} \times -batch \times \mbox{in\_channels})\)

weight

filter of shape (\(\mbox{kernel width} \times \mbox{in\_channels} -\times \mbox{out\_channels}\))

bias

bias of shape (\(\mbox{out\_channels}\))

pad

number of timesteps to pad. Default: 0

+
+
nnf_conv_tbc(input, weight, bias, pad = 0)
+
+
+

Arguments

+
input
+

input tensor of shape \((\mbox{sequence length} \times +batch \times \mbox{in\_channels})\)

+
weight
+

filter of shape (\(\mbox{kernel width} \times \mbox{in\_channels} +\times \mbox{out\_channels}\))

+
bias
+

bias of shape (\(\mbox{out\_channels}\))

+
pad
+

number of timesteps to pad. Default: 0

+
+
-
- +
- - + + diff --git a/dev/reference/nnf_conv_transpose1d.html b/dev/reference/nnf_conv_transpose1d.html index e7647400b..94f1b533b 100644 --- a/dev/reference/nnf_conv_transpose1d.html +++ b/dev/reference/nnf_conv_transpose1d.html @@ -1,80 +1,19 @@ - - - - - - - -Conv_transpose1d — nnf_conv_transpose1d • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Conv_transpose1d — nnf_conv_transpose1d • torch - - - - - - + + - - -
-
- -
- -
+
@@ -191,84 +113,64 @@ composed of several input planes, sometimes also called "deconvolution" composed of several input planes, sometimes also called "deconvolution".

-
nnf_conv_transpose1d(
-  input,
-  weight,
-  bias = NULL,
-  stride = 1,
-  padding = 0,
-  output_padding = 0,
-  groups = 1,
-  dilation = 1
-)
- -

Arguments

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
input

input tensor of shape (minibatch, in_channels , iW)

weight

filters of shape (out_channels, in_channels/groups , kW)

bias

optional bias of shape (out_channels). Default: NULL

stride

the stride of the convolving kernel. Can be a single number or -a one-element tuple (sW,). Default: 1

padding

implicit paddings on both sides of the input. Can be a -single number or a one-element tuple (padW,). Default: 0

output_padding

padding applied to the output

groups

split input into groups, in_channels should be divisible by -the number of groups. Default: 1

dilation

the spacing between kernel elements. Can be a single number or -a one-element tuple (dW,). Default: 1

+
+
nnf_conv_transpose1d(
+  input,
+  weight,
+  bias = NULL,
+  stride = 1,
+  padding = 0,
+  output_padding = 0,
+  groups = 1,
+  dilation = 1
+)
+
+
+

Arguments

+
input
+

input tensor of shape (minibatch, in_channels , iW)

+
weight
+

filters of shape (out_channels, in_channels/groups , kW)

+
bias
+

optional bias of shape (out_channels). Default: NULL

+
stride
+

the stride of the convolving kernel. Can be a single number or +a one-element tuple (sW,). Default: 1

+
padding
+

implicit paddings on both sides of the input. Can be a +single number or a one-element tuple (padW,). Default: 0

+
output_padding
+

padding applied to the output

+
groups
+

split input into groups, in_channels should be divisible by +the number of groups. Default: 1

+
dilation
+

the spacing between kernel elements. Can be a single number or +a one-element tuple (dW,). Default: 1

+
+
-
- +
- - + + diff --git a/dev/reference/nnf_conv_transpose2d.html b/dev/reference/nnf_conv_transpose2d.html index df5f9d179..a11a198f2 100644 --- a/dev/reference/nnf_conv_transpose2d.html +++ b/dev/reference/nnf_conv_transpose2d.html @@ -1,80 +1,19 @@ - - - - - - - -Conv_transpose2d — nnf_conv_transpose2d • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Conv_transpose2d — nnf_conv_transpose2d • torch - - - - - - + + - - -
-
- -
- -
+
@@ -191,84 +113,64 @@ composed of several input planes, sometimes also called "deconvolution" composed of several input planes, sometimes also called "deconvolution".

-
nnf_conv_transpose2d(
-  input,
-  weight,
-  bias = NULL,
-  stride = 1,
-  padding = 0,
-  output_padding = 0,
-  groups = 1,
-  dilation = 1
-)
- -

Arguments

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
input

input tensor of shape (minibatch, in_channels, iH , iW)

weight

filters of shape (out_channels , in_channels/groups, kH , kW)

bias

optional bias tensor of shape (out_channels). Default: NULL

stride

the stride of the convolving kernel. Can be a single number or a -tuple (sH, sW). Default: 1

padding

implicit paddings on both sides of the input. Can be a -single number or a tuple (padH, padW). Default: 0

output_padding

padding applied to the output

groups

split input into groups, in_channels should be divisible by the -number of groups. Default: 1

dilation

the spacing between kernel elements. Can be a single number or -a tuple (dH, dW). Default: 1

+
+
nnf_conv_transpose2d(
+  input,
+  weight,
+  bias = NULL,
+  stride = 1,
+  padding = 0,
+  output_padding = 0,
+  groups = 1,
+  dilation = 1
+)
+
+
+

Arguments

+
input
+

input tensor of shape (minibatch, in_channels, iH , iW)

+
weight
+

filters of shape (out_channels , in_channels/groups, kH , kW)

+
bias
+

optional bias tensor of shape (out_channels). Default: NULL

+
stride
+

the stride of the convolving kernel. Can be a single number or a +tuple (sH, sW). Default: 1

+
padding
+

implicit paddings on both sides of the input. Can be a +single number or a tuple (padH, padW). Default: 0

+
output_padding
+

padding applied to the output

+
groups
+

split input into groups, in_channels should be divisible by the +number of groups. Default: 1

+
dilation
+

the spacing between kernel elements. Can be a single number or +a tuple (dH, dW). Default: 1

+
+
-
- +
- - + + diff --git a/dev/reference/nnf_conv_transpose3d.html b/dev/reference/nnf_conv_transpose3d.html index 332ec2d52..e8d1568a3 100644 --- a/dev/reference/nnf_conv_transpose3d.html +++ b/dev/reference/nnf_conv_transpose3d.html @@ -1,80 +1,19 @@ - - - - - - - -Conv_transpose3d — nnf_conv_transpose3d • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Conv_transpose3d — nnf_conv_transpose3d • torch - - - - - - + + - - -
-
- -
- -
+
@@ -191,84 +113,64 @@ composed of several input planes, sometimes also called "deconvolution" composed of several input planes, sometimes also called "deconvolution"

-
nnf_conv_transpose3d(
-  input,
-  weight,
-  bias = NULL,
-  stride = 1,
-  padding = 0,
-  output_padding = 0,
-  groups = 1,
-  dilation = 1
-)
- -

Arguments

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
input

input tensor of shape (minibatch, in_channels , iT , iH , iW)

weight

filters of shape (out_channels , in_channels/groups, kT , kH , kW)

bias

optional bias tensor of shape (out_channels). Default: NULL

stride

the stride of the convolving kernel. Can be a single number or a -tuple (sT, sH, sW). Default: 1

padding

implicit paddings on both sides of the input. Can be a -single number or a tuple (padT, padH, padW). Default: 0

output_padding

padding applied to the output

groups

split input into groups, in_channels should be divisible by -the number of groups. Default: 1

dilation

the spacing between kernel elements. Can be a single number or -a tuple (dT, dH, dW). Default: 1

+
+
nnf_conv_transpose3d(
+  input,
+  weight,
+  bias = NULL,
+  stride = 1,
+  padding = 0,
+  output_padding = 0,
+  groups = 1,
+  dilation = 1
+)
+
+
+

Arguments

+
input
+

input tensor of shape (minibatch, in_channels , iT , iH , iW)

+
weight
+

filters of shape (out_channels , in_channels/groups, kT , kH , kW)

+
bias
+

optional bias tensor of shape (out_channels). Default: NULL

+
stride
+

the stride of the convolving kernel. Can be a single number or a +tuple (sT, sH, sW). Default: 1

+
padding
+

implicit paddings on both sides of the input. Can be a +single number or a tuple (padT, padH, padW). Default: 0

+
output_padding
+

padding applied to the output

+
groups
+

split input into groups, in_channels should be divisible by +the number of groups. Default: 1

+
dilation
+

the spacing between kernel elements. Can be a single number or +a tuple (dT, dH, dW). Default: 1

+
+
-
- +
- - + + diff --git a/dev/reference/nnf_cosine_embedding_loss.html b/dev/reference/nnf_cosine_embedding_loss.html index 141a6d252..d604184b2 100644 --- a/dev/reference/nnf_cosine_embedding_loss.html +++ b/dev/reference/nnf_cosine_embedding_loss.html @@ -1,82 +1,21 @@ - - - - - - - -Cosine_embedding_loss — nnf_cosine_embedding_loss • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Cosine_embedding_loss — nnf_cosine_embedding_loss • torch - - - - - - - - - - - - - - - + + - - -
-
- -
- -
+
@@ -195,69 +117,55 @@ are similar or dissimilar, using the cosine distance, and is typically used for learning nonlinear embeddings or semi-supervised learning.

-
nnf_cosine_embedding_loss(
-  input1,
-  input2,
-  target,
-  margin = 0,
-  reduction = c("mean", "sum", "none")
-)
+
+
nnf_cosine_embedding_loss(
+  input1,
+  input2,
+  target,
+  margin = 0,
+  reduction = c("mean", "sum", "none")
+)
+
-

Arguments

- - - - - - - - - - - - - - - - - - - - - - -
input1

the input x_1 tensor

input2

the input x_2 tensor

target

the target tensor

margin

Should be a number from -1 to 1 , 0 to 0.5 is suggested. If margin -is missing, the default value is 0.

reduction

(string, optional) – Specifies the reduction to apply to the +

+

Arguments

+
input1
+

the input x_1 tensor

+
input2
+

the input x_2 tensor

+
target
+

the target tensor

+
margin
+

Should be a number from -1 to 1 , 0 to 0.5 is suggested. If margin +is missing, the default value is 0.

+
reduction
+

(string, optional) – Specifies the reduction to apply to the output: 'none' | 'mean' | 'sum'. 'none': no reduction will be applied, 'mean': the sum of the output will be divided by the number of elements in the output, -'sum': the output will be summed. Default: 'mean'

- +'sum': the output will be summed. Default: 'mean'

+
+
-
- +
- - + + diff --git a/dev/reference/nnf_cosine_similarity.html b/dev/reference/nnf_cosine_similarity.html index 9ce93dcd1..b0d1c39b6 100644 --- a/dev/reference/nnf_cosine_similarity.html +++ b/dev/reference/nnf_cosine_similarity.html @@ -1,79 +1,18 @@ - - - - - - - -Cosine_similarity — nnf_cosine_similarity • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Cosine_similarity — nnf_cosine_similarity • torch - - - - - - + + - - -
-
- -
- -
+
@@ -189,61 +111,50 @@

Returns cosine similarity between x1 and x2, computed along dim.

-
nnf_cosine_similarity(x1, x2, dim = 1, eps = 1e-08)
- -

Arguments

- - - - - - - - - - - - - - - - - - -
x1

(Tensor) First input.

x2

(Tensor) Second input (of size matching x1).

dim

(int, optional) Dimension of vectors. Default: 1

eps

(float, optional) Small value to avoid division by zero. -Default: 1e-8

- -

Details

+
+
nnf_cosine_similarity(x1, x2, dim = 1, eps = 1e-08)
+
+
+

Arguments

+
x1
+

(Tensor) First input.

+
x2
+

(Tensor) Second input (of size matching x1).

+
dim
+

(int, optional) Dimension of vectors. Default: 1

+
eps
+

(float, optional) Small value to avoid division by zero. +Default: 1e-8

+
+
+

Details

$$ \mbox{similarity} = \frac{x_1 \cdot x_2}{\max(\Vert x_1 \Vert _2 \cdot \Vert x_2 \Vert _2, \epsilon)} $$

+
+
-
- +
- - + + diff --git a/dev/reference/nnf_cross_entropy.html b/dev/reference/nnf_cross_entropy.html index b4315f1a7..5efdc83f8 100644 --- a/dev/reference/nnf_cross_entropy.html +++ b/dev/reference/nnf_cross_entropy.html @@ -1,80 +1,19 @@ - - - - - - - -Cross_entropy — nnf_cross_entropy • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Cross_entropy — nnf_cross_entropy • torch - - - - - - + + - - -
-
- -
- -
+
@@ -191,73 +113,59 @@ function." /> function.

-
nnf_cross_entropy(
-  input,
-  target,
-  weight = NULL,
-  ignore_index = -100,
-  reduction = c("mean", "sum", "none")
-)
+
+
nnf_cross_entropy(
+  input,
+  target,
+  weight = NULL,
+  ignore_index = -100,
+  reduction = c("mean", "sum", "none")
+)
+
-

Arguments

- - - - - - - - - - - - - - - - - - - - - - -
input

(Tensor) \((N, C)\) where C = number of classes or \((N, C, H, W)\) +

+

Arguments

+
input
+

(Tensor) \((N, C)\) where C = number of classes or \((N, C, H, W)\) in case of 2D Loss, or \((N, C, d_1, d_2, ..., d_K)\) where \(K \geq 1\) -in the case of K-dimensional loss.

target

(Tensor) \((N)\) where each value is \(0 \leq \mbox{targets}[i] \leq C-1\), -or \((N, d_1, d_2, ..., d_K)\) where \(K \geq 1\) for K-dimensional loss.

weight

(Tensor, optional) a manual rescaling weight given to each class. If -given, has to be a Tensor of size C

ignore_index

(int, optional) Specifies a target value that is ignored -and does not contribute to the input gradient.

reduction

(string, optional) – Specifies the reduction to apply to the +in the case of K-dimensional loss.

+
target
+

(Tensor) \((N)\) where each value is \(0 \leq \mbox{targets}[i] \leq C-1\), +or \((N, d_1, d_2, ..., d_K)\) where \(K \geq 1\) for K-dimensional loss.

+
weight
+

(Tensor, optional) a manual rescaling weight given to each class. If +given, has to be a Tensor of size C

+
ignore_index
+

(int, optional) Specifies a target value that is ignored +and does not contribute to the input gradient.

+
reduction
+

(string, optional) – Specifies the reduction to apply to the output: 'none' | 'mean' | 'sum'. 'none': no reduction will be applied, 'mean': the sum of the output will be divided by the number of elements in the output, -'sum': the output will be summed. Default: 'mean'

- +'sum': the output will be summed. Default: 'mean'

+
+
-
- +
- - + + diff --git a/dev/reference/nnf_ctc_loss.html b/dev/reference/nnf_ctc_loss.html index 05e640142..8741cc784 100644 --- a/dev/reference/nnf_ctc_loss.html +++ b/dev/reference/nnf_ctc_loss.html @@ -1,79 +1,18 @@ - - - - - - - -Ctc_loss — nnf_ctc_loss • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Ctc_loss — nnf_ctc_loss • torch - - - - - - + + - - -
-
- -
- -
+
@@ -189,83 +111,65 @@

The Connectionist Temporal Classification loss.

-
nnf_ctc_loss(
-  log_probs,
-  targets,
-  input_lengths,
-  target_lengths,
-  blank = 0,
-  reduction = c("mean", "sum", "none"),
-  zero_infinity = FALSE
-)
+
+
nnf_ctc_loss(
+  log_probs,
+  targets,
+  input_lengths,
+  target_lengths,
+  blank = 0,
+  reduction = c("mean", "sum", "none"),
+  zero_infinity = FALSE
+)
+
-

Arguments

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
log_probs

\((T, N, C)\) where C = number of characters in alphabet including blank, +

+

Arguments

+
log_probs
+

\((T, N, C)\) where C = number of characters in alphabet including blank, T = input length, and N = batch size. The logarithmized probabilities of -the outputs (e.g. obtained with nnf_log_softmax).

targets

\((N, S)\) or (sum(target_lengths)). Targets cannot be blank. -In the second form, the targets are assumed to be concatenated.

input_lengths

\((N)\). Lengths of the inputs (must each be \(\leq T\))

target_lengths

\((N)\). Lengths of the targets

blank

(int, optional) Blank label. Default \(0\).

reduction

(string, optional) – Specifies the reduction to apply to the +the outputs (e.g. obtained with nnf_log_softmax).

+
targets
+

\((N, S)\) or (sum(target_lengths)). Targets cannot be blank. +In the second form, the targets are assumed to be concatenated.

+
input_lengths
+

\((N)\). Lengths of the inputs (must each be \(\leq T\))

+
target_lengths
+

\((N)\). Lengths of the targets

+
blank
+

(int, optional) Blank label. Default \(0\).

+
reduction
+

(string, optional) – Specifies the reduction to apply to the output: 'none' | 'mean' | 'sum'. 'none': no reduction will be applied, 'mean': the sum of the output will be divided by the number of elements in the output, -'sum': the output will be summed. Default: 'mean'

zero_infinity

(bool, optional) Whether to zero infinite losses and the +'sum': the output will be summed. Default: 'mean'

+
zero_infinity
+

(bool, optional) Whether to zero infinite losses and the associated gradients. Default: FALSE Infinite losses mainly occur when the -inputs are too short to be aligned to the targets.

- +inputs are too short to be aligned to the targets.

+
+
-
- +
- - + + diff --git a/dev/reference/nnf_dropout.html b/dev/reference/nnf_dropout.html index 3fc05f210..ecd90dc1b 100644 --- a/dev/reference/nnf_dropout.html +++ b/dev/reference/nnf_dropout.html @@ -1,81 +1,20 @@ - - - - - - - -Dropout — nnf_dropout • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Dropout — nnf_dropout • torch - - - - - - - - - - - - - - - - - + + -
-
- -
- -
+
@@ -193,56 +115,44 @@ tensor with probability p using samples from a Bernoulli distribution.

-
nnf_dropout(input, p = 0.5, training = TRUE, inplace = FALSE)
- -

Arguments

- - - - - - - - - - - - - - - - - - -
input

the input tensor

p

probability of an element to be zeroed. Default: 0.5

training

apply dropout if is TRUE. Default: TRUE

inplace

If set to TRUE, will do this operation in-place. -Default: FALSE

+
+
nnf_dropout(input, p = 0.5, training = TRUE, inplace = FALSE)
+
+
+

Arguments

+
input
+

the input tensor

+
p
+

probability of an element to be zeroed. Default: 0.5

+
training
+

apply dropout if is TRUE. Default: TRUE

+
inplace
+

If set to TRUE, will do this operation in-place. +Default: FALSE

+
+
-
- +
- - + + diff --git a/dev/reference/nnf_dropout2d.html b/dev/reference/nnf_dropout2d.html index 850d97772..95c589970 100644 --- a/dev/reference/nnf_dropout2d.html +++ b/dev/reference/nnf_dropout2d.html @@ -1,83 +1,22 @@ - - - - - - - -Dropout2d — nnf_dropout2d • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Dropout2d — nnf_dropout2d • torch - - - - - - - - - - - - - - - - - + + -
-
- -
- -
+
@@ -197,56 +119,44 @@ Each channel will be zeroed out independently on every forward call with probability p using samples from a Bernoulli distribution.

-
nnf_dropout2d(input, p = 0.5, training = TRUE, inplace = FALSE)
- -

Arguments

- - - - - - - - - - - - - - - - - - -
input

the input tensor

p

probability of a channel to be zeroed. Default: 0.5

training

apply dropout if is TRUE. Default: TRUE.

inplace

If set to TRUE, will do this operation in-place. -Default: FALSE

+
+
nnf_dropout2d(input, p = 0.5, training = TRUE, inplace = FALSE)
+
+
+

Arguments

+
input
+

the input tensor

+
p
+

probability of a channel to be zeroed. Default: 0.5

+
training
+

apply dropout if is TRUE. Default: TRUE.

+
inplace
+

If set to TRUE, will do this operation in-place. +Default: FALSE

+
+
-
- +
- - + + diff --git a/dev/reference/nnf_dropout3d.html b/dev/reference/nnf_dropout3d.html index 1489b3bb5..ec29f00c4 100644 --- a/dev/reference/nnf_dropout3d.html +++ b/dev/reference/nnf_dropout3d.html @@ -1,83 +1,22 @@ - - - - - - - -Dropout3d — nnf_dropout3d • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Dropout3d — nnf_dropout3d • torch - - - - - - - - - - - - - - - - - + + -
-
- -
- -
+
@@ -197,56 +119,44 @@ Each channel will be zeroed out independently on every forward call with probability p using samples from a Bernoulli distribution.

-
nnf_dropout3d(input, p = 0.5, training = TRUE, inplace = FALSE)
- -

Arguments

- - - - - - - - - - - - - - - - - - -
input

the input tensor

p

probability of a channel to be zeroed. Default: 0.5

training

apply dropout if is TRUE. Default: TRUE.

inplace

If set to TRUE, will do this operation in-place. -Default: FALSE

+
+
nnf_dropout3d(input, p = 0.5, training = TRUE, inplace = FALSE)
+
+
+

Arguments

+
input
+

the input tensor

+
p
+

probability of a channel to be zeroed. Default: 0.5

+
training
+

apply dropout if is TRUE. Default: TRUE.

+
inplace
+

If set to TRUE, will do this operation in-place. +Default: FALSE

+
+
-
- +
- - + + diff --git a/dev/reference/nnf_elu.html b/dev/reference/nnf_elu.html index 37042aefb..2b7d84b50 100644 --- a/dev/reference/nnf_elu.html +++ b/dev/reference/nnf_elu.html @@ -1,80 +1,19 @@ - - - - - - - -Elu — nnf_elu • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Elu — nnf_elu • torch - - - - - - - - + + -
-
- -
- -
+
@@ -191,64 +113,56 @@ $$ELU(x) = max(0,x) + min(0, \alpha * (exp(x) - 1))$$." /> $$ELU(x) = max(0,x) + min(0, \alpha * (exp(x) - 1))$$.

-
nnf_elu(input, alpha = 1, inplace = FALSE)
-
-nnf_elu_(input, alpha = 1)
- -

Arguments

- - - - - - - - - - - - - - -
input

(N,*) tensor, where * means, any number of additional -dimensions

alpha

the alpha value for the ELU formulation. Default: 1.0

inplace

can optionally do the operation in-place. Default: FALSE

- - -

Examples

-
if (torch_is_installed()) {
-x <- torch_randn(2, 2)
-y <- nnf_elu(x, alpha = 1)
-nnf_elu_(x, alpha = 1)
-torch_equal(x, y)
-
-}
-#> [1] TRUE
-
+
+
nnf_elu(input, alpha = 1, inplace = FALSE)
+
+nnf_elu_(input, alpha = 1)
+
+ +
+

Arguments

+
input
+

(N,*) tensor, where * means, any number of additional +dimensions

+
alpha
+

the alpha value for the ELU formulation. Default: 1.0

+
inplace
+

can optionally do the operation in-place. Default: FALSE

+
+ +
+

Examples

+
if (torch_is_installed()) {
+x <- torch_randn(2, 2)
+y <- nnf_elu(x, alpha = 1)
+nnf_elu_(x, alpha = 1)
+torch_equal(x, y)
+
+}
+#> [1] TRUE
+
+
+
-
- +
- - + + diff --git a/dev/reference/nnf_embedding.html b/dev/reference/nnf_embedding.html index 6d5075148..19cee9d26 100644 --- a/dev/reference/nnf_embedding.html +++ b/dev/reference/nnf_embedding.html @@ -1,79 +1,18 @@ - - - - - - - -Embedding — nnf_embedding • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Embedding — nnf_embedding • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,88 +111,71 @@

A simple lookup table that looks up embeddings in a fixed dictionary and size.

-
nnf_embedding(
-  input,
-  weight,
-  padding_idx = NULL,
-  max_norm = NULL,
-  norm_type = 2,
-  scale_grad_by_freq = FALSE,
-  sparse = FALSE
-)
+
+
nnf_embedding(
+  input,
+  weight,
+  padding_idx = NULL,
+  max_norm = NULL,
+  norm_type = 2,
+  scale_grad_by_freq = FALSE,
+  sparse = FALSE
+)
+
-

Arguments

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
input

(LongTensor) Tensor containing indices into the embedding matrix

weight

(Tensor) The embedding matrix with number of rows equal to the -maximum possible index + 1, and number of columns equal to the embedding size

padding_idx

(int, optional) If given, pads the output with the embedding -vector at padding_idx (initialized to zeros) whenever it encounters the index.

max_norm

(float, optional) If given, each embedding vector with norm larger +

+

Arguments

+
input
+

(LongTensor) Tensor containing indices into the embedding matrix

+
weight
+

(Tensor) The embedding matrix with number of rows equal to the +maximum possible index + 1, and number of columns equal to the embedding size

+
padding_idx
+

(int, optional) If given, pads the output with the embedding +vector at padding_idx (initialized to zeros) whenever it encounters the index.

+
max_norm
+

(float, optional) If given, each embedding vector with norm larger than max_norm is renormalized to have norm max_norm. Note: this will modify -weight in-place.

norm_type

(float, optional) The p of the p-norm to compute for the max_norm -option. Default 2.

scale_grad_by_freq

(boolean, optional) If given, this will scale gradients -by the inverse of frequency of the words in the mini-batch. Default FALSE.

sparse

(bool, optional) If TRUE, gradient w.r.t. weight will be a +weight in-place.

+
norm_type
+

(float, optional) The p of the p-norm to compute for the max_norm +option. Default 2.

+
scale_grad_by_freq
+

(boolean, optional) If given, this will scale gradients +by the inverse of frequency of the words in the mini-batch. Default FALSE.

+
sparse
+

(bool, optional) If TRUE, gradient w.r.t. weight will be a sparse tensor. See Notes under nn_embedding for more details regarding -sparse gradients.

- -

Details

- +sparse gradients.

+
+
+

Details

This module is often used to retrieve word embeddings using indices. The input to the module is a list of indices, and the embedding matrix, and the output is the corresponding word embeddings.

+
+
-
- +
- - + + diff --git a/dev/reference/nnf_embedding_bag.html b/dev/reference/nnf_embedding_bag.html index 9a3341aa6..82cccdcee 100644 --- a/dev/reference/nnf_embedding_bag.html +++ b/dev/reference/nnf_embedding_bag.html @@ -1,80 +1,19 @@ - - - - - - - -Embedding_bag — nnf_embedding_bag • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Embedding_bag — nnf_embedding_bag • torch - - - - - - + + - - -
-
- -
- -
+
@@ -191,103 +113,79 @@ intermediate embeddings." /> intermediate embeddings.

-
nnf_embedding_bag(
-  input,
-  weight,
-  offsets = NULL,
-  max_norm = NULL,
-  norm_type = 2,
-  scale_grad_by_freq = FALSE,
-  mode = "mean",
-  sparse = FALSE,
-  per_sample_weights = NULL,
-  include_last_offset = FALSE
-)
+
+
nnf_embedding_bag(
+  input,
+  weight,
+  offsets = NULL,
+  max_norm = NULL,
+  norm_type = 2,
+  scale_grad_by_freq = FALSE,
+  mode = "mean",
+  sparse = FALSE,
+  per_sample_weights = NULL,
+  include_last_offset = FALSE
+)
+
-

Arguments

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
input

(LongTensor) Tensor containing bags of indices into the embedding matrix

weight

(Tensor) The embedding matrix with number of rows equal to the -maximum possible index + 1, and number of columns equal to the embedding size

offsets

(LongTensor, optional) Only used when input is 1D. offsets -determines the starting index position of each bag (sequence) in input.

max_norm

(float, optional) If given, each embedding vector with norm +

+

Arguments

+
input
+

(LongTensor) Tensor containing bags of indices into the embedding matrix

+
weight
+

(Tensor) The embedding matrix with number of rows equal to the +maximum possible index + 1, and number of columns equal to the embedding size

+
offsets
+

(LongTensor, optional) Only used when input is 1D. offsets +determines the starting index position of each bag (sequence) in input.

+
max_norm
+

(float, optional) If given, each embedding vector with norm larger than max_norm is renormalized to have norm max_norm. -Note: this will modify weight in-place.

norm_type

(float, optional) The p in the p-norm to compute for the -max_norm option. Default 2.

scale_grad_by_freq

(boolean, optional) if given, this will scale gradients -by the inverse of frequency of the words in the mini-batch. Default FALSE. Note: this option is not supported when mode="max".

mode

(string, optional) "sum", "mean" or "max". Specifies -the way to reduce the bag. Default: 'mean'

sparse

(bool, optional) if TRUE, gradient w.r.t. weight will be a +Note: this will modify weight in-place.

+
norm_type
+

(float, optional) The p in the p-norm to compute for the +max_norm option. Default 2.

+
scale_grad_by_freq
+

(boolean, optional) if given, this will scale gradients +by the inverse of frequency of the words in the mini-batch. Default FALSE. Note: this option is not supported when mode="max".

+
mode
+

(string, optional) "sum", "mean" or "max". Specifies +the way to reduce the bag. Default: 'mean'

+
sparse
+

(bool, optional) if TRUE, gradient w.r.t. weight will be a sparse tensor. See Notes under nn_embedding for more details regarding -sparse gradients. Note: this option is not supported when mode="max".

per_sample_weights

(Tensor, optional) a tensor of float / double weights, +sparse gradients. Note: this option is not supported when mode="max".

+
per_sample_weights
+

(Tensor, optional) a tensor of float / double weights, or NULL to indicate all weights should be taken to be 1. If specified, per_sample_weights must have exactly the same shape as input and is treated -as having the same offsets, if those are not NULL.

include_last_offset

(bool, optional) if TRUE, the size of offsets is -equal to the number of bags + 1.

- +as having the same offsets, if those are not NULL.

+
include_last_offset
+

(bool, optional) if TRUE, the size of offsets is +equal to the number of bags + 1.

+
+
-
- +
- - + + diff --git a/dev/reference/nnf_fold.html b/dev/reference/nnf_fold.html index 53bc70f0f..214e40e07 100644 --- a/dev/reference/nnf_fold.html +++ b/dev/reference/nnf_fold.html @@ -1,80 +1,19 @@ - - - - - - - -Fold — nnf_fold • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Fold — nnf_fold • torch - - - - - - - - + + -
-
- -
- -
+
@@ -191,81 +113,66 @@ tensor." /> tensor.

-
nnf_fold(
-  input,
-  output_size,
-  kernel_size,
-  dilation = 1,
-  padding = 0,
-  stride = 1
-)
- -

Arguments

- - - - - - - - - - - - - - - - - - - - - - - - - - -
input

the input tensor

output_size

the shape of the spatial dimensions of the output (i.e., -output$sizes()[-c(1,2)])

kernel_size

the size of the sliding blocks

dilation

a parameter that controls the stride of elements within the -neighborhood. Default: 1

padding

implicit zero padding to be added on both sides of input. -Default: 0

stride

the stride of the sliding blocks in the input spatial dimensions. -Default: 1

- -

Warning

+
+
nnf_fold(
+  input,
+  output_size,
+  kernel_size,
+  dilation = 1,
+  padding = 0,
+  stride = 1
+)
+
+
+

Arguments

+
input
+

the input tensor

+
output_size
+

the shape of the spatial dimensions of the output (i.e., +output$sizes()[-c(1,2)])

+
kernel_size
+

the size of the sliding blocks

+
dilation
+

a parameter that controls the stride of elements within the +neighborhood. Default: 1

+
padding
+

implicit zero padding to be added on both sides of input. +Default: 0

+
stride
+

the stride of the sliding blocks in the input spatial dimensions. +Default: 1

+
+
+

Warning

Currently, only 4-D output tensors (batched image-like tensors) are supported.

+
+
-
- +
- - + + diff --git a/dev/reference/nnf_fractional_max_pool2d.html b/dev/reference/nnf_fractional_max_pool2d.html index 08d444f4b..d666b4c02 100644 --- a/dev/reference/nnf_fractional_max_pool2d.html +++ b/dev/reference/nnf_fractional_max_pool2d.html @@ -1,79 +1,18 @@ - - - - - - - -Fractional_max_pool2d — nnf_fractional_max_pool2d • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Fractional_max_pool2d — nnf_fractional_max_pool2d • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,80 +111,65 @@

Applies 2D fractional max pooling over an input signal composed of several input planes.

-
nnf_fractional_max_pool2d(
-  input,
-  kernel_size,
-  output_size = NULL,
-  output_ratio = NULL,
-  return_indices = FALSE,
-  random_samples = NULL
-)
+
+
nnf_fractional_max_pool2d(
+  input,
+  kernel_size,
+  output_size = NULL,
+  output_ratio = NULL,
+  return_indices = FALSE,
+  random_samples = NULL
+)
+
-

Arguments

- - - - - - - - - - - - - - - - - - - - - - - - - - -
input

the input tensor

kernel_size

the size of the window to take a max over. Can be a +

+

Arguments

+
input
+

the input tensor

+
kernel_size
+

the size of the window to take a max over. Can be a single number \(k\) (for a square kernel of \(k * k\)) or -a tuple (kH, kW)

output_size

the target output size of the image of the form \(oH * oW\). -Can be a tuple (oH, oW) or a single number \(oH\) for a square image \(oH * oH\)

output_ratio

If one wants to have an output size as a ratio of the input size, -this option can be given. This has to be a number or tuple in the range (0, 1)

return_indices

if True, will return the indices along with the outputs.

random_samples

optional random samples.

- -

Details

- +a tuple (kH, kW)

+
output_size
+

the target output size of the image of the form \(oH * oW\). +Can be a tuple (oH, oW) or a single number \(oH\) for a square image \(oH * oH\)

+
output_ratio
+

If one wants to have an output size as a ratio of the input size, +this option can be given. This has to be a number or tuple in the range (0, 1)

+
return_indices
+

if True, will return the indices along with the outputs.

+
random_samples
+

optional random samples.

+
+
+

Details

Fractional MaxPooling is described in detail in the paper Fractional MaxPooling_ by Ben Graham

The max-pooling operation is applied in \(kH * kW\) regions by a stochastic step size determined by the target output size. The number of output features is equal to the number of input planes.

+
+
-
- +
- - + + diff --git a/dev/reference/nnf_fractional_max_pool3d.html b/dev/reference/nnf_fractional_max_pool3d.html index c8e6bea42..17926b2e7 100644 --- a/dev/reference/nnf_fractional_max_pool3d.html +++ b/dev/reference/nnf_fractional_max_pool3d.html @@ -1,79 +1,18 @@ - - - - - - - -Fractional_max_pool3d — nnf_fractional_max_pool3d • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Fractional_max_pool3d — nnf_fractional_max_pool3d • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,81 +111,66 @@

Applies 3D fractional max pooling over an input signal composed of several input planes.

-
nnf_fractional_max_pool3d(
-  input,
-  kernel_size,
-  output_size = NULL,
-  output_ratio = NULL,
-  return_indices = FALSE,
-  random_samples = NULL
-)
+
+
nnf_fractional_max_pool3d(
+  input,
+  kernel_size,
+  output_size = NULL,
+  output_ratio = NULL,
+  return_indices = FALSE,
+  random_samples = NULL
+)
+
-

Arguments

- - - - - - - - - - - - - - - - - - - - - - - - - - -
input

the input tensor

kernel_size

the size of the window to take a max over. Can be a single number \(k\) -(for a square kernel of \(k * k * k\)) or a tuple (kT, kH, kW)

output_size

the target output size of the form \(oT * oH * oW\). +

+

Arguments

+
input
+

the input tensor

+
kernel_size
+

the size of the window to take a max over. Can be a single number \(k\) +(for a square kernel of \(k * k * k\)) or a tuple (kT, kH, kW)

+
output_size
+

the target output size of the form \(oT * oH * oW\). Can be a tuple (oT, oH, oW) or a single number \(oH\) for a cubic output -\(oH * oH * oH\)

output_ratio

If one wants to have an output size as a ratio of the +\(oH * oH * oH\)

+
output_ratio
+

If one wants to have an output size as a ratio of the input size, this option can be given. This has to be a number or tuple in the -range (0, 1)

return_indices

if True, will return the indices along with the outputs.

random_samples

undocumented argument.

- -

Details

- +range (0, 1)

+
return_indices
+

if True, will return the indices along with the outputs.

+
random_samples
+

undocumented argument.

+
+
+

Details

Fractional MaxPooling is described in detail in the paper Fractional MaxPooling_ by Ben Graham

The max-pooling operation is applied in \(kT * kH * kW\) regions by a stochastic step size determined by the target output size. The number of output features is equal to the number of input planes.

+
+
-
- +
- - + + diff --git a/dev/reference/nnf_gelu.html b/dev/reference/nnf_gelu.html index 3f93d48d6..10546ec13 100644 --- a/dev/reference/nnf_gelu.html +++ b/dev/reference/nnf_gelu.html @@ -1,79 +1,18 @@ - - - - - - - -Gelu — nnf_gelu • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Gelu — nnf_gelu • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,20 +111,18 @@

Gelu

-
nnf_gelu(input)
- -

Arguments

- - - - - - -
input

(N,*) tensor, where * means, any number of additional -dimensions

- -

gelu(input) -> Tensor

+
+
nnf_gelu(input)
+
+
+

Arguments

+
input
+

(N,*) tensor, where * means, any number of additional +dimensions

+
+
+

gelu(input) -> Tensor

@@ -210,33 +130,30 @@ dimensions

\(GELU(x) = x * \Phi(x)\)

where \(\Phi(x)\) is the Cumulative Distribution Function for Gaussian Distribution.

-

See Gaussian Error Linear Units (GELUs).

+

See Gaussian Error Linear Units (GELUs).

+
+
-
- +
- - + + diff --git a/dev/reference/nnf_glu.html b/dev/reference/nnf_glu.html index 519236086..d3e8dbd34 100644 --- a/dev/reference/nnf_glu.html +++ b/dev/reference/nnf_glu.html @@ -1,79 +1,18 @@ - - - - - - - -Glu — nnf_glu • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Glu — nnf_glu • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,54 +111,47 @@

The gated linear unit. Computes:

-
nnf_glu(input, dim = -1)
- -

Arguments

- - - - - - - - - - -
input

(Tensor) input tensor

dim

(int) dimension on which to split the input. Default: -1

- -

Details

+
+
nnf_glu(input, dim = -1)
+
+
+

Arguments

+
input
+

(Tensor) input tensor

+
dim
+

(int) dimension on which to split the input. Default: -1

+
+
+

Details

$$GLU(a, b) = a \otimes \sigma(b)$$

where input is split in half along dim to form a and b, \(\sigma\) is the sigmoid function and \(\otimes\) is the element-wise product between matrices.

-

See Language Modeling with Gated Convolutional Networks.

+

See Language Modeling with Gated Convolutional Networks.

+
+
-
- +
- - + + diff --git a/dev/reference/nnf_grid_sample.html b/dev/reference/nnf_grid_sample.html index 1eb12f63c..afe364f17 100644 --- a/dev/reference/nnf_grid_sample.html +++ b/dev/reference/nnf_grid_sample.html @@ -1,80 +1,19 @@ - - - - - - - -Grid_sample — nnf_grid_sample • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Grid_sample — nnf_grid_sample • torch - - - - - - - - + + -
-
- -
- -
+
@@ -191,50 +113,40 @@ output using input values and pixel locations from grid." /> output using input values and pixel locations from grid.

-
nnf_grid_sample(
-  input,
-  grid,
-  mode = c("bilinear", "nearest"),
-  padding_mode = c("zeros", "border", "reflection"),
-  align_corners = FALSE
-)
+
+
nnf_grid_sample(
+  input,
+  grid,
+  mode = c("bilinear", "nearest"),
+  padding_mode = c("zeros", "border", "reflection"),
+  align_corners = FALSE
+)
+
-

Arguments

- - - - - - - - - - - - - - - - - - - - - - -
input

(Tensor) input of shape \((N, C, H_{\mbox{in}}, W_{\mbox{in}})\) (4-D case) or \((N, C, D_{\mbox{in}}, H_{\mbox{in}}, W_{\mbox{in}})\) (5-D case)

grid

(Tensor) flow-field of shape \((N, H_{\mbox{out}}, W_{\mbox{out}}, 2)\) (4-D case) or \((N, D_{\mbox{out}}, H_{\mbox{out}}, W_{\mbox{out}}, 3)\) (5-D case)

mode

(str) interpolation mode to calculate output values 'bilinear' | 'nearest'. -Default: 'bilinear'

padding_mode

(str) padding mode for outside grid values 'zeros' | 'border' -| 'reflection'. Default: 'zeros'

align_corners

(bool, optional) Geometrically, we consider the pixels of the +

+

Arguments

+
input
+

(Tensor) input of shape \((N, C, H_{\mbox{in}}, W_{\mbox{in}})\) (4-D case) or \((N, C, D_{\mbox{in}}, H_{\mbox{in}}, W_{\mbox{in}})\) (5-D case)

+
grid
+

(Tensor) flow-field of shape \((N, H_{\mbox{out}}, W_{\mbox{out}}, 2)\) (4-D case) or \((N, D_{\mbox{out}}, H_{\mbox{out}}, W_{\mbox{out}}, 3)\) (5-D case)

+
mode
+

(str) interpolation mode to calculate output values 'bilinear' | 'nearest'. +Default: 'bilinear'

+
padding_mode
+

(str) padding mode for outside grid values 'zeros' | 'border' +| 'reflection'. Default: 'zeros'

+
align_corners
+

(bool, optional) Geometrically, we consider the pixels of the input as squares rather than points. If set to True, the extrema (-1 and 1) are considered as referring to the center points of the input's corner pixels. If set to False, they are instead considered as referring to the corner points of the input's corner pixels, making the sampling more resolution -agnostic. This option parallels the align_corners option in nnf_interpolate(), and +agnostic. This option parallels the align_corners option in nnf_interpolate(), and so whichever option is used here should also be used there to resize the input -image before grid sampling. Default: False

- -

Details

- +image before grid sampling. Default: False

+
+
+

Details

Currently, only spatial (4-D) and volumetric (5-D) input are supported.

In the spatial (4-D) case, for input with shape @@ -254,8 +166,7 @@ the range of [-1, 1]. For example, values x = -1, y = -1input, and values x = 1, y = 1 is the right-bottom pixel of input.

If grid has values outside the range of [-1, 1], the corresponding -outputs are handled as defined by padding_mode. Options are

    -
  • padding_mode="zeros": use 0 for out-of-bound grid locations,

  • +outputs are handled as defined by padding_mode. Options are

    • padding_mode="zeros": use 0 for out-of-bound grid locations,

    • padding_mode="border": use border values for out-of-bound grid locations,

    • padding_mode="reflection": use values at locations reflected by the border for out-of-bound grid locations. For location far away @@ -263,41 +174,37 @@ from the border, it will keep being reflected until becoming in bound, e.g., (normalized) pixel location x = -3.5 reflects by border -1 and becomes x' = 1.5, then reflects by border 1 and becomes x'' = -0.5.

    • -
    - -

    Note

    - +
+
+

Note

-

This function is often used in conjunction with nnf_affine_grid() +

This function is often used in conjunction with nnf_affine_grid() to build Spatial Transformer Networks_ .

+
+
-
- +
- - + + diff --git a/dev/reference/nnf_group_norm.html b/dev/reference/nnf_group_norm.html index 4cb040338..b2e66f054 100644 --- a/dev/reference/nnf_group_norm.html +++ b/dev/reference/nnf_group_norm.html @@ -1,79 +1,18 @@ - - - - - - - -Group_norm — nnf_group_norm • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Group_norm — nnf_group_norm • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,59 +111,45 @@

Applies Group Normalization for last certain number of dimensions.

-
nnf_group_norm(input, num_groups, weight = NULL, bias = NULL, eps = 1e-05)
- -

Arguments

- - - - - - - - - - - - - - - - - - - - - - -
input

the input tensor

num_groups

number of groups to separate the channels into

weight

the weight tensor

bias

the bias tensor

eps

a value added to the denominator for numerical stability. Default: 1e-5

+
+
nnf_group_norm(input, num_groups, weight = NULL, bias = NULL, eps = 1e-05)
+
+
+

Arguments

+
input
+

the input tensor

+
num_groups
+

number of groups to separate the channels into

+
weight
+

the weight tensor

+
bias
+

the bias tensor

+
eps
+

a value added to the denominator for numerical stability. Default: 1e-5

+
+
-
- +
- - + + diff --git a/dev/reference/nnf_gumbel_softmax.html b/dev/reference/nnf_gumbel_softmax.html index 801547ffa..fb732860f 100644 --- a/dev/reference/nnf_gumbel_softmax.html +++ b/dev/reference/nnf_gumbel_softmax.html @@ -1,80 +1,19 @@ - - - - - - - -Gumbel_softmax — nnf_gumbel_softmax • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Gumbel_softmax — nnf_gumbel_softmax • torch - - - - - - - - + + -
-
- -
- -
+
@@ -191,55 +113,43 @@ optionally discretizes." /> optionally discretizes.

-
nnf_gumbel_softmax(logits, tau = 1, hard = FALSE, dim = -1)
- -

Arguments

- - - - - - - - - - - - - - - - - - -
logits

[..., num_features] unnormalized log probabilities

tau

non-negative scalar temperature

hard

if True, the returned samples will be discretized as one-hot vectors, but will be differentiated as if it is the soft sample in autograd

dim

(int) A dimension along which softmax will be computed. Default: -1.

+
+
nnf_gumbel_softmax(logits, tau = 1, hard = FALSE, dim = -1)
+
+
+

Arguments

+
logits
+

[..., num_features] unnormalized log probabilities

+
tau
+

non-negative scalar temperature

+
hard
+

if True, the returned samples will be discretized as one-hot vectors, but will be differentiated as if it is the soft sample in autograd

+
dim
+

(int) A dimension along which softmax will be computed. Default: -1.

+
+
-
- +
- - + + diff --git a/dev/reference/nnf_hardshrink.html b/dev/reference/nnf_hardshrink.html index cb3218ac2..9c1e90aec 100644 --- a/dev/reference/nnf_hardshrink.html +++ b/dev/reference/nnf_hardshrink.html @@ -1,79 +1,18 @@ - - - - - - - -Hardshrink — nnf_hardshrink • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Hardshrink — nnf_hardshrink • torch - - - - - - + + - - -
-
- -
- -
+
@@ -189,48 +111,40 @@

Applies the hard shrinkage function element-wise

-
nnf_hardshrink(input, lambd = 0.5)
- -

Arguments

- - - - - - - - - - -
input

(N,*) tensor, where * means, any number of additional -dimensions

lambd

the lambda value for the Hardshrink formulation. Default: 0.5

+
+
nnf_hardshrink(input, lambd = 0.5)
+
+
+

Arguments

+
input
+

(N,*) tensor, where * means, any number of additional +dimensions

+
lambd
+

the lambda value for the Hardshrink formulation. Default: 0.5

+
+
-
- +
- - + + diff --git a/dev/reference/nnf_hardsigmoid.html b/dev/reference/nnf_hardsigmoid.html index 758378945..ac8d05a19 100644 --- a/dev/reference/nnf_hardsigmoid.html +++ b/dev/reference/nnf_hardsigmoid.html @@ -1,79 +1,18 @@ - - - - - - - -Hardsigmoid — nnf_hardsigmoid • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Hardsigmoid — nnf_hardsigmoid • torch - - - - - - + + - - -
-
- -
- -
+
@@ -189,48 +111,40 @@

Applies the element-wise function \(\mbox{Hardsigmoid}(x) = \frac{ReLU6(x + 3)}{6}\)

-
nnf_hardsigmoid(input, inplace = FALSE)
- -

Arguments

- - - - - - - - - - -
input

(N,*) tensor, where * means, any number of additional -dimensions

inplace

NA If set to True, will do this operation in-place. Default: False

+
+
nnf_hardsigmoid(input, inplace = FALSE)
+
+
+

Arguments

+
input
+

(N,*) tensor, where * means, any number of additional +dimensions

+
inplace
+

NA If set to True, will do this operation in-place. Default: False

+
+
-
- +
- - + + diff --git a/dev/reference/nnf_hardswish.html b/dev/reference/nnf_hardswish.html index cdffac5bc..4c5e5ddfe 100644 --- a/dev/reference/nnf_hardswish.html +++ b/dev/reference/nnf_hardswish.html @@ -1,80 +1,19 @@ - - - - - - - -Hardswish — nnf_hardswish • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Hardswish — nnf_hardswish • torch - - - - - - - - + + -
-
- -
- -
+
@@ -191,24 +113,20 @@ Searching for MobileNetV3." /> Searching for MobileNetV3.

-
nnf_hardswish(input, inplace = FALSE)
- -

Arguments

- - - - - - - - - - -
input

(N,*) tensor, where * means, any number of additional -dimensions

inplace

can optionally do the operation in-place. Default: FALSE

- -

Details

+
+
nnf_hardswish(input, inplace = FALSE)
+
+
+

Arguments

+
input
+

(N,*) tensor, where * means, any number of additional +dimensions

+
inplace
+

can optionally do the operation in-place. Default: FALSE

+
+
+

Details

$$ \mbox{Hardswish}(x) = \left\{ \begin{array}{ll} 0 & \mbox{if } x \le -3, \\ @@ -216,32 +134,29 @@ dimensions

x \cdot (x + 3)/6 & \mbox{otherwise} \end{array} \right. $$

+
+
-
- +
- - + + diff --git a/dev/reference/nnf_hardtanh.html b/dev/reference/nnf_hardtanh.html index f4292c8f5..c3163721d 100644 --- a/dev/reference/nnf_hardtanh.html +++ b/dev/reference/nnf_hardtanh.html @@ -1,79 +1,18 @@ - - - - - - - -Hardtanh — nnf_hardtanh • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Hardtanh — nnf_hardtanh • torch - - - - - - + + - - -
-
- -
- -
+
@@ -189,58 +111,46 @@

Applies the HardTanh function element-wise.

-
nnf_hardtanh(input, min_val = -1, max_val = 1, inplace = FALSE)
-
-nnf_hardtanh_(input, min_val = -1, max_val = 1)
- -

Arguments

- - - - - - - - - - - - - - - - - - -
input

(N,*) tensor, where * means, any number of additional -dimensions

min_val

minimum value of the linear region range. Default: -1

max_val

maximum value of the linear region range. Default: 1

inplace

can optionally do the operation in-place. Default: FALSE

+
+
nnf_hardtanh(input, min_val = -1, max_val = 1, inplace = FALSE)
 
+nnf_hardtanh_(input, min_val = -1, max_val = 1)
+
+ +
+

Arguments

+
input
+

(N,*) tensor, where * means, any number of additional +dimensions

+
min_val
+

minimum value of the linear region range. Default: -1

+
max_val
+

maximum value of the linear region range. Default: 1

+
inplace
+

can optionally do the operation in-place. Default: FALSE

+
+
-
- +
- - + + diff --git a/dev/reference/nnf_hinge_embedding_loss.html b/dev/reference/nnf_hinge_embedding_loss.html index 0695bd563..98ed37d70 100644 --- a/dev/reference/nnf_hinge_embedding_loss.html +++ b/dev/reference/nnf_hinge_embedding_loss.html @@ -1,82 +1,21 @@ - - - - - - - -Hinge_embedding_loss — nnf_hinge_embedding_loss • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Hinge_embedding_loss — nnf_hinge_embedding_loss • torch - - - - - - - - - - - - - - - + + - - -
-
- -
- -
+
@@ -195,58 +117,46 @@ using the L1 pairwise distance as xx , and is typically used for learning nonlin embeddings or semi-supervised learning.

-
nnf_hinge_embedding_loss(input, target, margin = 1, reduction = "mean")
- -

Arguments

- - - - - - - - - - - - - - - - - - -
input

tensor (N,*) where ** means, any number of additional dimensions

target

tensor (N,*) , same shape as the input

margin

Has a default value of 1.

reduction

(string, optional) – Specifies the reduction to apply to the +

+
nnf_hinge_embedding_loss(input, target, margin = 1, reduction = "mean")
+
+ +
+

Arguments

+
input
+

tensor (N,*) where ** means, any number of additional dimensions

+
target
+

tensor (N,*) , same shape as the input

+
margin
+

Has a default value of 1.

+
reduction
+

(string, optional) – Specifies the reduction to apply to the output: 'none' | 'mean' | 'sum'. 'none': no reduction will be applied, 'mean': the sum of the output will be divided by the number of elements in the output, -'sum': the output will be summed. Default: 'mean'

- +'sum': the output will be summed. Default: 'mean'

+
+
-
- +
- - + + diff --git a/dev/reference/nnf_instance_norm.html b/dev/reference/nnf_instance_norm.html index cb6e74c3a..2e9a0d7da 100644 --- a/dev/reference/nnf_instance_norm.html +++ b/dev/reference/nnf_instance_norm.html @@ -1,80 +1,19 @@ - - - - - - - -Instance_norm — nnf_instance_norm • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Instance_norm — nnf_instance_norm • torch - - - - - - + + - - -
-
- -
- -
+
@@ -191,80 +113,60 @@ batch." /> batch.

-
nnf_instance_norm(
-  input,
-  running_mean = NULL,
-  running_var = NULL,
-  weight = NULL,
-  bias = NULL,
-  use_input_stats = TRUE,
-  momentum = 0.1,
-  eps = 1e-05
-)
- -

Arguments

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
input

the input tensor

running_mean

the running_mean tensor

running_var

the running var tensor

weight

the weight tensor

bias

the bias tensor

use_input_stats

whether to use input stats

momentum

a double for the momentum

eps

an eps double for numerical stability

+
+
nnf_instance_norm(
+  input,
+  running_mean = NULL,
+  running_var = NULL,
+  weight = NULL,
+  bias = NULL,
+  use_input_stats = TRUE,
+  momentum = 0.1,
+  eps = 1e-05
+)
+
+
+

Arguments

+
input
+

the input tensor

+
running_mean
+

the running_mean tensor

+
running_var
+

the running var tensor

+
weight
+

the weight tensor

+
bias
+

the bias tensor

+
use_input_stats
+

whether to use input stats

+
momentum
+

a double for the momentum

+
eps
+

an eps double for numerical stability

+
+
-
- +
- - + + diff --git a/dev/reference/nnf_interpolate.html b/dev/reference/nnf_interpolate.html index fb8d98c03..5439eecda 100644 --- a/dev/reference/nnf_interpolate.html +++ b/dev/reference/nnf_interpolate.html @@ -1,80 +1,19 @@ - - - - - - - -Interpolate — nnf_interpolate • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Interpolate — nnf_interpolate • torch - - - - - - - - + + -
-
- -
- -
+
@@ -191,40 +113,32 @@ scale_factor" /> scale_factor

-
nnf_interpolate(
-  input,
-  size = NULL,
-  scale_factor = NULL,
-  mode = "nearest",
-  align_corners = FALSE,
-  recompute_scale_factor = NULL
-)
+
+
nnf_interpolate(
+  input,
+  size = NULL,
+  scale_factor = NULL,
+  mode = "nearest",
+  align_corners = FALSE,
+  recompute_scale_factor = NULL
+)
+
-

Arguments

- - - - - - - - - - - - - - - - - - - - - - - - - - -
input

(Tensor) the input tensor

size

(int or Tuple[int] or Tuple[int, int] or Tuple[int, int, int]) -output spatial size.

scale_factor

(float or Tuple[float]) multiplier for spatial size. -Has to match input size if it is a tuple.

mode

(str) algorithm used for upsampling: 'nearest' | 'linear' | 'bilinear' -| 'bicubic' | 'trilinear' | 'area' Default: 'nearest'

align_corners

(bool, optional) Geometrically, we consider the pixels +

+

Arguments

+
input
+

(Tensor) the input tensor

+
size
+

(int or Tuple[int] or Tuple[int, int] or Tuple[int, int, int]) +output spatial size.

+
scale_factor
+

(float or Tuple[float]) multiplier for spatial size. +Has to match input size if it is a tuple.

+
mode
+

(str) algorithm used for upsampling: 'nearest' | 'linear' | 'bilinear' +| 'bicubic' | 'trilinear' | 'area' Default: 'nearest'

+
align_corners
+

(bool, optional) Geometrically, we consider the pixels of the input and output as squares rather than points. If set to TRUE, the input and output tensors are aligned by the center points of their corner pixels, preserving the values at the corner pixels. If set to False, the @@ -232,11 +146,9 @@ input and output tensors are aligned by the corner points of their corner pixels and the interpolation uses edge value padding for out-of-boundary values, making this operation independent of input size when scale_factor is kept the same. This only has an effect when mode is 'linear', 'bilinear', -'bicubic' or 'trilinear'. Default: False

recompute_scale_factor

(bool, optional) recompute the scale_factor +'bicubic' or 'trilinear'. Default: False

+
recompute_scale_factor
+

(bool, optional) recompute the scale_factor for use in the interpolation calculation. When scale_factor is passed as a parameter, it is used to compute the output_size. If recompute_scale_factor is ```True`` or not specified, a new scale_factor will be computed based on @@ -245,12 +157,10 @@ computation will be identical to if the computed `output_size` were passed-in explicitly). Otherwise, the passed-in `scale_factor` will be used in the interpolation computation. Note that when `scale_factor` is floating-point, the recomputed scale_factor may differ from the one passed in due to rounding -and precision issues.

- -

Details

- +and precision issues.

+
+
+

Details

The algorithm used for interpolation is determined by mode.

Currently temporal, spatial and volumetric sampling are supported, i.e. expected inputs are 3-D, 4-D or 5-D in shape.

@@ -258,32 +168,29 @@ expected inputs are 3-D, 4-D or 5-D in shape.

mini-batch x channels x [optional depth] x [optional height] x width.

The modes available for resizing are: nearest, linear (3D-only), bilinear, bicubic (4D-only), trilinear (5D-only), area

+
+
-
- +
- - + + diff --git a/dev/reference/nnf_kl_div.html b/dev/reference/nnf_kl_div.html index 7affdfb47..8d58abfa7 100644 --- a/dev/reference/nnf_kl_div.html +++ b/dev/reference/nnf_kl_div.html @@ -1,79 +1,18 @@ - - - - - - - -Kl_div — nnf_kl_div • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Kl_div — nnf_kl_div • torch - - - - - - + + - - -
-
- -
- -
+
@@ -189,54 +111,44 @@

The Kullback-Leibler divergence Loss.

-
nnf_kl_div(input, target, reduction = "mean")
- -

Arguments

- - - - - - - - - - - - - - -
input

tensor (N,*) where ** means, any number of additional dimensions

target

tensor (N,*) , same shape as the input

reduction

(string, optional) – Specifies the reduction to apply to the +

+
nnf_kl_div(input, target, reduction = "mean")
+
+ +
+

Arguments

+
input
+

tensor (N,*) where ** means, any number of additional dimensions

+
target
+

tensor (N,*) , same shape as the input

+
reduction
+

(string, optional) – Specifies the reduction to apply to the output: 'none' | 'mean' | 'sum'. 'none': no reduction will be applied, 'mean': the sum of the output will be divided by the number of elements in the output, -'sum': the output will be summed. Default: 'mean'

- +'sum': the output will be summed. Default: 'mean'

+
+
-
- +
- - + + diff --git a/dev/reference/nnf_l1_loss.html b/dev/reference/nnf_l1_loss.html index b826a02cc..dd9ce93a3 100644 --- a/dev/reference/nnf_l1_loss.html +++ b/dev/reference/nnf_l1_loss.html @@ -1,79 +1,18 @@ - - - - - - - -L1_loss — nnf_l1_loss • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -L1_loss — nnf_l1_loss • torch - - - - - - + + - - -
-
- -
- -
+
@@ -189,54 +111,44 @@

Function that takes the mean element-wise absolute value difference.

-
nnf_l1_loss(input, target, reduction = "mean")
- -

Arguments

- - - - - - - - - - - - - - -
input

tensor (N,*) where ** means, any number of additional dimensions

target

tensor (N,*) , same shape as the input

reduction

(string, optional) – Specifies the reduction to apply to the +

+
nnf_l1_loss(input, target, reduction = "mean")
+
+ +
+

Arguments

+
input
+

tensor (N,*) where ** means, any number of additional dimensions

+
target
+

tensor (N,*) , same shape as the input

+
reduction
+

(string, optional) – Specifies the reduction to apply to the output: 'none' | 'mean' | 'sum'. 'none': no reduction will be applied, 'mean': the sum of the output will be divided by the number of elements in the output, -'sum': the output will be summed. Default: 'mean'

- +'sum': the output will be summed. Default: 'mean'

+
+
-
- +
- - + + diff --git a/dev/reference/nnf_layer_norm.html b/dev/reference/nnf_layer_norm.html index add5c019a..b9b086681 100644 --- a/dev/reference/nnf_layer_norm.html +++ b/dev/reference/nnf_layer_norm.html @@ -1,79 +1,18 @@ - - - - - - - -Layer_norm — nnf_layer_norm • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Layer_norm — nnf_layer_norm • torch - - - - - - + + - - -
-
- -
- -
+
@@ -189,67 +111,53 @@

Applies Layer Normalization for last certain number of dimensions.

-
nnf_layer_norm(
-  input,
-  normalized_shape,
-  weight = NULL,
-  bias = NULL,
-  eps = 1e-05
-)
- -

Arguments

- - - - - - - - - - - - - - - - - - - - - - -
input

the input tensor

normalized_shape

input shape from an expected input of size. If a single -integer is used, it is treated as a singleton list, and this module will normalize -over the last dimension which is expected to be of that specific size.

weight

the weight tensor

bias

the bias tensor

eps

a value added to the denominator for numerical stability. Default: 1e-5

+
+
nnf_layer_norm(
+  input,
+  normalized_shape,
+  weight = NULL,
+  bias = NULL,
+  eps = 1e-05
+)
+
+
+

Arguments

+
input
+

the input tensor

+
normalized_shape
+

input shape from an expected input of size. If a single +integer is used, it is treated as a singleton list, and this module will normalize +over the last dimension which is expected to be of that specific size.

+
weight
+

the weight tensor

+
bias
+

the bias tensor

+
eps
+

a value added to the denominator for numerical stability. Default: 1e-5

+
+
-
- +
- - + + diff --git a/dev/reference/nnf_leaky_relu.html b/dev/reference/nnf_leaky_relu.html index 8e5b7a814..c82e619d6 100644 --- a/dev/reference/nnf_leaky_relu.html +++ b/dev/reference/nnf_leaky_relu.html @@ -1,80 +1,19 @@ - - - - - - - -Leaky_relu — nnf_leaky_relu • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Leaky_relu — nnf_leaky_relu • torch - - - - - - - - + + -
-
- -
- -
+
@@ -191,52 +113,42 @@ \(LeakyReLU(x) = max(0, x) + negative_slope * min(0, x)\)

-
nnf_leaky_relu(input, negative_slope = 0.01, inplace = FALSE)
- -

Arguments

- - - - - - - - - - - - - - -
input

(N,*) tensor, where * means, any number of additional -dimensions

negative_slope

Controls the angle of the negative slope. Default: 1e-2

inplace

can optionally do the operation in-place. Default: FALSE

+
+
nnf_leaky_relu(input, negative_slope = 0.01, inplace = FALSE)
+
+
+

Arguments

+
input
+

(N,*) tensor, where * means, any number of additional +dimensions

+
negative_slope
+

Controls the angle of the negative slope. Default: 1e-2

+
inplace
+

can optionally do the operation in-place. Default: FALSE

+
+
-
- +
- - + + diff --git a/dev/reference/nnf_linear.html b/dev/reference/nnf_linear.html index 496ce6fb8..c9be07b51 100644 --- a/dev/reference/nnf_linear.html +++ b/dev/reference/nnf_linear.html @@ -1,79 +1,18 @@ - - - - - - - -Linear — nnf_linear • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Linear — nnf_linear • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,52 +111,42 @@

Applies a linear transformation to the incoming data: \(y = xA^T + b\).

-
nnf_linear(input, weight, bias = NULL)
- -

Arguments

- - - - - - - - - - - - - - -
input

\((N, *, in\_features)\) where * means any number of -additional dimensions

weight

\((out\_features, in\_features)\) the weights tensor.

bias

optional tensor \((out\_features)\)

+
+
nnf_linear(input, weight, bias = NULL)
+
+
+

Arguments

+
input
+

\((N, *, in\_features)\) where * means any number of +additional dimensions

+
weight
+

\((out\_features, in\_features)\) the weights tensor.

+
bias
+

optional tensor \((out\_features)\)

+
+
-
- +
- - + + diff --git a/dev/reference/nnf_local_response_norm.html b/dev/reference/nnf_local_response_norm.html index ce6cd0714..5c965ed23 100644 --- a/dev/reference/nnf_local_response_norm.html +++ b/dev/reference/nnf_local_response_norm.html @@ -1,81 +1,20 @@ - - - - - - - -Local_response_norm — nnf_local_response_norm • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Local_response_norm — nnf_local_response_norm • torch - - - - - - - - - - - - - - - - - + + -
-
- -
- -
+
@@ -193,59 +115,45 @@ several input planes, where channels occupy the second dimension. Applies normalization across channels.

-
nnf_local_response_norm(input, size, alpha = 1e-04, beta = 0.75, k = 1)
- -

Arguments

- - - - - - - - - - - - - - - - - - - - - - -
input

the input tensor

size

amount of neighbouring channels used for normalization

alpha

multiplicative factor. Default: 0.0001

beta

exponent. Default: 0.75

k

additive factor. Default: 1

+
+
nnf_local_response_norm(input, size, alpha = 1e-04, beta = 0.75, k = 1)
+
+
+

Arguments

+
input
+

the input tensor

+
size
+

amount of neighbouring channels used for normalization

+
alpha
+

multiplicative factor. Default: 0.0001

+
beta
+

exponent. Default: 0.75

+
k
+

additive factor. Default: 1

+
+
-
- +
- - + + diff --git a/dev/reference/nnf_log_softmax.html b/dev/reference/nnf_log_softmax.html index 25ded6ecf..7e97bc85b 100644 --- a/dev/reference/nnf_log_softmax.html +++ b/dev/reference/nnf_log_softmax.html @@ -1,79 +1,18 @@ - - - - - - - -Log_softmax — nnf_log_softmax • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Log_softmax — nnf_log_softmax • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,59 +111,50 @@

Applies a softmax followed by a logarithm.

-
nnf_log_softmax(input, dim = NULL, dtype = NULL)
- -

Arguments

- - - - - - - - - - - - - - -
input

(Tensor) input

dim

(int) A dimension along which log_softmax will be computed.

dtype

(torch.dtype, optional) the desired data type of returned tensor. +

+
nnf_log_softmax(input, dim = NULL, dtype = NULL)
+
+ +
+

Arguments

+
input
+

(Tensor) input

+
dim
+

(int) A dimension along which log_softmax will be computed.

+
dtype
+

(torch.dtype, optional) the desired data type of returned tensor. If specified, the input tensor is casted to dtype before the operation is performed. This is useful for preventing data type overflows. -Default: NULL.

- -

Details

- +Default: NULL.

+
+
+

Details

While mathematically equivalent to log(softmax(x)), doing these two operations separately is slower, and numerically unstable. This function uses an alternative formulation to compute the output and gradient correctly.

+
+
-
- +
- - + + diff --git a/dev/reference/nnf_logsigmoid.html b/dev/reference/nnf_logsigmoid.html index bef09e463..643dd7709 100644 --- a/dev/reference/nnf_logsigmoid.html +++ b/dev/reference/nnf_logsigmoid.html @@ -1,79 +1,18 @@ - - - - - - - -Logsigmoid — nnf_logsigmoid • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Logsigmoid — nnf_logsigmoid • torch - - - - - - + + - - -
-
- -
- -
+
@@ -189,44 +111,38 @@

Applies element-wise \(LogSigmoid(x_i) = log(\frac{1}{1 + exp(-x_i)})\)

-
nnf_logsigmoid(input)
- -

Arguments

- - - - - - -
input

(N,*) tensor, where * means, any number of additional -dimensions

+
+
nnf_logsigmoid(input)
+
+
+

Arguments

+
input
+

(N,*) tensor, where * means, any number of additional +dimensions

+
+
-
- +
- - + + diff --git a/dev/reference/nnf_lp_pool1d.html b/dev/reference/nnf_lp_pool1d.html index 806f3809c..8bbe26f12 100644 --- a/dev/reference/nnf_lp_pool1d.html +++ b/dev/reference/nnf_lp_pool1d.html @@ -1,81 +1,20 @@ - - - - - - - -Lp_pool1d — nnf_lp_pool1d • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Lp_pool1d — nnf_lp_pool1d • torch - - - - - - - - - - - - - - - - - + + -
-
- -
- -
+
@@ -193,60 +115,46 @@ several input planes. If the sum of all inputs to the power of p is zero, the gradient is set to zero as well.

-
nnf_lp_pool1d(input, norm_type, kernel_size, stride = NULL, ceil_mode = FALSE)
- -

Arguments

- - - - - - - - - - - - - - - - - - - - - - -
input

the input tensor

norm_type

if inf than one gets max pooling if 0 you get sum pooling ( -proportional to the avg pooling)

kernel_size

a single int, the size of the window

stride

a single int, the stride of the window. Default value is kernel_size

ceil_mode

when True, will use ceil instead of floor to compute the output shape

+
+
nnf_lp_pool1d(input, norm_type, kernel_size, stride = NULL, ceil_mode = FALSE)
+
+
+

Arguments

+
input
+

the input tensor

+
norm_type
+

if inf than one gets max pooling if 0 you get sum pooling ( +proportional to the avg pooling)

+
kernel_size
+

a single int, the size of the window

+
stride
+

a single int, the stride of the window. Default value is kernel_size

+
ceil_mode
+

when True, will use ceil instead of floor to compute the output shape

+
+
-
- +
- - + + diff --git a/dev/reference/nnf_lp_pool2d.html b/dev/reference/nnf_lp_pool2d.html index afad2d11b..a33bd52a1 100644 --- a/dev/reference/nnf_lp_pool2d.html +++ b/dev/reference/nnf_lp_pool2d.html @@ -1,81 +1,20 @@ - - - - - - - -Lp_pool2d — nnf_lp_pool2d • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Lp_pool2d — nnf_lp_pool2d • torch - - - - - - - - - - - - - - - - - + + -
-
- -
- -
+
@@ -193,60 +115,46 @@ several input planes. If the sum of all inputs to the power of p is zero, the gradient is set to zero as well.

-
nnf_lp_pool2d(input, norm_type, kernel_size, stride = NULL, ceil_mode = FALSE)
- -

Arguments

- - - - - - - - - - - - - - - - - - - - - - -
input

the input tensor

norm_type

if inf than one gets max pooling if 0 you get sum pooling ( -proportional to the avg pooling)

kernel_size

a single int, the size of the window

stride

a single int, the stride of the window. Default value is kernel_size

ceil_mode

when True, will use ceil instead of floor to compute the output shape

+
+
nnf_lp_pool2d(input, norm_type, kernel_size, stride = NULL, ceil_mode = FALSE)
+
+
+

Arguments

+
input
+

the input tensor

+
norm_type
+

if inf than one gets max pooling if 0 you get sum pooling ( +proportional to the avg pooling)

+
kernel_size
+

a single int, the size of the window

+
stride
+

a single int, the stride of the window. Default value is kernel_size

+
ceil_mode
+

when True, will use ceil instead of floor to compute the output shape

+
+
-
- +
- - + + diff --git a/dev/reference/nnf_margin_ranking_loss.html b/dev/reference/nnf_margin_ranking_loss.html index 1b86a0220..383b4bf8c 100644 --- a/dev/reference/nnf_margin_ranking_loss.html +++ b/dev/reference/nnf_margin_ranking_loss.html @@ -1,80 +1,19 @@ - - - - - - - -Margin_ranking_loss — nnf_margin_ranking_loss • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Margin_ranking_loss — nnf_margin_ranking_loss • torch - - - - - - + + - - -
-
- -
- -
+
@@ -191,62 +113,48 @@ mini-batch Tensors, and a label 1D mini-batch tensor y (containing 1 or -1)." /> mini-batch Tensors, and a label 1D mini-batch tensor y (containing 1 or -1).

-
nnf_margin_ranking_loss(input1, input2, target, margin = 0, reduction = "mean")
- -

Arguments

- - - - - - - - - - - - - - - - - - - - - - -
input1

the first tensor

input2

the second input tensor

target

the target tensor

margin

Has a default value of 00 .

reduction

(string, optional) – Specifies the reduction to apply to the +

+
nnf_margin_ranking_loss(input1, input2, target, margin = 0, reduction = "mean")
+
+ +
+

Arguments

+
input1
+

the first tensor

+
input2
+

the second input tensor

+
target
+

the target tensor

+
margin
+

Has a default value of 00 .

+
reduction
+

(string, optional) – Specifies the reduction to apply to the output: 'none' | 'mean' | 'sum'. 'none': no reduction will be applied, 'mean': the sum of the output will be divided by the number of elements in the output, -'sum': the output will be summed. Default: 'mean'

- +'sum': the output will be summed. Default: 'mean'

+
+
-
- +
- - + + diff --git a/dev/reference/nnf_max_pool1d.html b/dev/reference/nnf_max_pool1d.html index e97ddf1b9..59927fb25 100644 --- a/dev/reference/nnf_max_pool1d.html +++ b/dev/reference/nnf_max_pool1d.html @@ -1,80 +1,19 @@ - - - - - - - -Max_pool1d — nnf_max_pool1d • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Max_pool1d — nnf_max_pool1d • torch - - - - - - + + - - -
-
- -
- -
+
@@ -191,80 +113,62 @@ planes." /> planes.

-
nnf_max_pool1d(
-  input,
-  kernel_size,
-  stride = NULL,
-  padding = 0,
-  dilation = 1,
-  ceil_mode = FALSE,
-  return_indices = FALSE
-)
- -

Arguments

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
input

input tensor of shape (minibatch , in_channels , iW)

kernel_size

the size of the window. Can be a single number or a -tuple (kW,).

stride

the stride of the window. Can be a single number or a tuple -(sW,). Default: kernel_size

padding

implicit zero paddings on both sides of the input. Can be a -single number or a tuple (padW,). Default: 0

dilation

controls the spacing between the kernel points; also known as -the à trous algorithm.

ceil_mode

when True, will use ceil instead of floor to compute the -output shape. Default: FALSE

return_indices

whether to return the indices where the max occurs.

+
+
nnf_max_pool1d(
+  input,
+  kernel_size,
+  stride = NULL,
+  padding = 0,
+  dilation = 1,
+  ceil_mode = FALSE,
+  return_indices = FALSE
+)
+
+
+

Arguments

+
input
+

input tensor of shape (minibatch , in_channels , iW)

+
kernel_size
+

the size of the window. Can be a single number or a +tuple (kW,).

+
stride
+

the stride of the window. Can be a single number or a tuple +(sW,). Default: kernel_size

+
padding
+

implicit zero paddings on both sides of the input. Can be a +single number or a tuple (padW,). Default: 0

+
dilation
+

controls the spacing between the kernel points; also known as +the à trous algorithm.

+
ceil_mode
+

when True, will use ceil instead of floor to compute the +output shape. Default: FALSE

+
return_indices
+

whether to return the indices where the max occurs.

+
+
-
- +
- - + + diff --git a/dev/reference/nnf_max_pool2d.html b/dev/reference/nnf_max_pool2d.html index b2c9026e6..638b8e05c 100644 --- a/dev/reference/nnf_max_pool2d.html +++ b/dev/reference/nnf_max_pool2d.html @@ -1,80 +1,19 @@ - - - - - - - -Max_pool2d — nnf_max_pool2d • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Max_pool2d — nnf_max_pool2d • torch - - - - - - + + - - -
-
- -
- -
+
@@ -191,80 +113,62 @@ planes." /> planes.

-
nnf_max_pool2d(
-  input,
-  kernel_size,
-  stride = kernel_size,
-  padding = 0,
-  dilation = 1,
-  ceil_mode = FALSE,
-  return_indices = FALSE
-)
- -

Arguments

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
input

input tensor (minibatch, in_channels , iH , iW)

kernel_size

size of the pooling region. Can be a single number or a -tuple (kH, kW)

stride

stride of the pooling operation. Can be a single number or a -tuple (sH, sW). Default: kernel_size

padding

implicit zero paddings on both sides of the input. Can be a -single number or a tuple (padH, padW). Default: 0

dilation

controls the spacing between the kernel points; also known as -the à trous algorithm.

ceil_mode

when True, will use ceil instead of floor in the formula -to compute the output shape. Default: FALSE

return_indices

whether to return the indices where the max occurs.

+
+
nnf_max_pool2d(
+  input,
+  kernel_size,
+  stride = kernel_size,
+  padding = 0,
+  dilation = 1,
+  ceil_mode = FALSE,
+  return_indices = FALSE
+)
+
+
+

Arguments

+
input
+

input tensor (minibatch, in_channels , iH , iW)

+
kernel_size
+

size of the pooling region. Can be a single number or a +tuple (kH, kW)

+
stride
+

stride of the pooling operation. Can be a single number or a +tuple (sH, sW). Default: kernel_size

+
padding
+

implicit zero paddings on both sides of the input. Can be a +single number or a tuple (padH, padW). Default: 0

+
dilation
+

controls the spacing between the kernel points; also known as +the à trous algorithm.

+
ceil_mode
+

when True, will use ceil instead of floor in the formula +to compute the output shape. Default: FALSE

+
return_indices
+

whether to return the indices where the max occurs.

+
+
-
- +
- - + + diff --git a/dev/reference/nnf_max_pool3d.html b/dev/reference/nnf_max_pool3d.html index df79f8a52..781fde0a5 100644 --- a/dev/reference/nnf_max_pool3d.html +++ b/dev/reference/nnf_max_pool3d.html @@ -1,80 +1,19 @@ - - - - - - - -Max_pool3d — nnf_max_pool3d • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Max_pool3d — nnf_max_pool3d • torch - - - - - - + + - - -
-
- -
- -
+
@@ -191,80 +113,62 @@ planes." /> planes.

-
nnf_max_pool3d(
-  input,
-  kernel_size,
-  stride = NULL,
-  padding = 0,
-  dilation = 1,
-  ceil_mode = FALSE,
-  return_indices = FALSE
-)
- -

Arguments

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
input

input tensor (minibatch, in_channels , iT * iH , iW)

kernel_size

size of the pooling region. Can be a single number or a -tuple (kT, kH, kW)

stride

stride of the pooling operation. Can be a single number or a -tuple (sT, sH, sW). Default: kernel_size

padding

implicit zero paddings on both sides of the input. Can be a -single number or a tuple (padT, padH, padW), Default: 0

dilation

controls the spacing between the kernel points; also known as -the à trous algorithm.

ceil_mode

when True, will use ceil instead of floor in the formula -to compute the output shape

return_indices

whether to return the indices where the max occurs.

+
+
nnf_max_pool3d(
+  input,
+  kernel_size,
+  stride = NULL,
+  padding = 0,
+  dilation = 1,
+  ceil_mode = FALSE,
+  return_indices = FALSE
+)
+
+
+

Arguments

+
input
+

input tensor (minibatch, in_channels , iT * iH , iW)

+
kernel_size
+

size of the pooling region. Can be a single number or a +tuple (kT, kH, kW)

+
stride
+

stride of the pooling operation. Can be a single number or a +tuple (sT, sH, sW). Default: kernel_size

+
padding
+

implicit zero paddings on both sides of the input. Can be a +single number or a tuple (padT, padH, padW), Default: 0

+
dilation
+

controls the spacing between the kernel points; also known as +the à trous algorithm.

+
ceil_mode
+

when True, will use ceil instead of floor in the formula +to compute the output shape

+
return_indices
+

whether to return the indices where the max occurs.

+
+
-
- +
- - + + diff --git a/dev/reference/nnf_max_unpool1d.html b/dev/reference/nnf_max_unpool1d.html index cca2af42f..16391e58c 100644 --- a/dev/reference/nnf_max_unpool1d.html +++ b/dev/reference/nnf_max_unpool1d.html @@ -1,79 +1,18 @@ - - - - - - - -Max_unpool1d — nnf_max_unpool1d • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Max_unpool1d — nnf_max_unpool1d • torch - - - - - - + + - - -
-
- -
- -
+
@@ -189,70 +111,54 @@

Computes a partial inverse of MaxPool1d.

-
nnf_max_unpool1d(
-  input,
-  indices,
-  kernel_size,
-  stride = NULL,
-  padding = 0,
-  output_size = NULL
-)
- -

Arguments

- - - - - - - - - - - - - - - - - - - - - - - - - - -
input

the input Tensor to invert

indices

the indices given out by max pool

kernel_size

Size of the max pooling window.

stride

Stride of the max pooling window. It is set to kernel_size by default.

padding

Padding that was added to the input

output_size

the targeted output size

+
+
nnf_max_unpool1d(
+  input,
+  indices,
+  kernel_size,
+  stride = NULL,
+  padding = 0,
+  output_size = NULL
+)
+
+
+

Arguments

+
input
+

the input Tensor to invert

+
indices
+

the indices given out by max pool

+
kernel_size
+

Size of the max pooling window.

+
stride
+

Stride of the max pooling window. It is set to kernel_size by default.

+
padding
+

Padding that was added to the input

+
output_size
+

the targeted output size

+
+
-
- +
- - + + diff --git a/dev/reference/nnf_max_unpool2d.html b/dev/reference/nnf_max_unpool2d.html index a61d95e41..59cbefc6d 100644 --- a/dev/reference/nnf_max_unpool2d.html +++ b/dev/reference/nnf_max_unpool2d.html @@ -1,79 +1,18 @@ - - - - - - - -Max_unpool2d — nnf_max_unpool2d • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Max_unpool2d — nnf_max_unpool2d • torch - - - - - - + + - - -
-
- -
- -
+
@@ -189,70 +111,54 @@

Computes a partial inverse of MaxPool2d.

-
nnf_max_unpool2d(
-  input,
-  indices,
-  kernel_size,
-  stride = NULL,
-  padding = 0,
-  output_size = NULL
-)
- -

Arguments

- - - - - - - - - - - - - - - - - - - - - - - - - - -
input

the input Tensor to invert

indices

the indices given out by max pool

kernel_size

Size of the max pooling window.

stride

Stride of the max pooling window. It is set to kernel_size by default.

padding

Padding that was added to the input

output_size

the targeted output size

+
+
nnf_max_unpool2d(
+  input,
+  indices,
+  kernel_size,
+  stride = NULL,
+  padding = 0,
+  output_size = NULL
+)
+
+
+

Arguments

+
input
+

the input Tensor to invert

+
indices
+

the indices given out by max pool

+
kernel_size
+

Size of the max pooling window.

+
stride
+

Stride of the max pooling window. It is set to kernel_size by default.

+
padding
+

Padding that was added to the input

+
output_size
+

the targeted output size

+
+
-
- +
- - + + diff --git a/dev/reference/nnf_max_unpool3d.html b/dev/reference/nnf_max_unpool3d.html index 0d390ee90..2108b5cd9 100644 --- a/dev/reference/nnf_max_unpool3d.html +++ b/dev/reference/nnf_max_unpool3d.html @@ -1,79 +1,18 @@ - - - - - - - -Max_unpool3d — nnf_max_unpool3d • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Max_unpool3d — nnf_max_unpool3d • torch - - - - - - + + - - -
-
- -
- -
+
@@ -189,70 +111,54 @@

Computes a partial inverse of MaxPool3d.

-
nnf_max_unpool3d(
-  input,
-  indices,
-  kernel_size,
-  stride = NULL,
-  padding = 0,
-  output_size = NULL
-)
- -

Arguments

- - - - - - - - - - - - - - - - - - - - - - - - - - -
input

the input Tensor to invert

indices

the indices given out by max pool

kernel_size

Size of the max pooling window.

stride

Stride of the max pooling window. It is set to kernel_size by default.

padding

Padding that was added to the input

output_size

the targeted output size

+
+
nnf_max_unpool3d(
+  input,
+  indices,
+  kernel_size,
+  stride = NULL,
+  padding = 0,
+  output_size = NULL
+)
+
+
+

Arguments

+
input
+

the input Tensor to invert

+
indices
+

the indices given out by max pool

+
kernel_size
+

Size of the max pooling window.

+
stride
+

Stride of the max pooling window. It is set to kernel_size by default.

+
padding
+

Padding that was added to the input

+
output_size
+

the targeted output size

+
+
-
- +
- - + + diff --git a/dev/reference/nnf_mse_loss.html b/dev/reference/nnf_mse_loss.html index cd43552e4..0cceac70f 100644 --- a/dev/reference/nnf_mse_loss.html +++ b/dev/reference/nnf_mse_loss.html @@ -1,79 +1,18 @@ - - - - - - - -Mse_loss — nnf_mse_loss • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Mse_loss — nnf_mse_loss • torch - - - - - - + + - - -
-
- -
- -
+
@@ -189,54 +111,44 @@

Measures the element-wise mean squared error.

-
nnf_mse_loss(input, target, reduction = "mean")
- -

Arguments

- - - - - - - - - - - - - - -
input

tensor (N,*) where ** means, any number of additional dimensions

target

tensor (N,*) , same shape as the input

reduction

(string, optional) – Specifies the reduction to apply to the +

+
nnf_mse_loss(input, target, reduction = "mean")
+
+ +
+

Arguments

+
input
+

tensor (N,*) where ** means, any number of additional dimensions

+
target
+

tensor (N,*) , same shape as the input

+
reduction
+

(string, optional) – Specifies the reduction to apply to the output: 'none' | 'mean' | 'sum'. 'none': no reduction will be applied, 'mean': the sum of the output will be divided by the number of elements in the output, -'sum': the output will be summed. Default: 'mean'

- +'sum': the output will be summed. Default: 'mean'

+
+
-
- +
- - + + diff --git a/dev/reference/nnf_multi_head_attention_forward.html b/dev/reference/nnf_multi_head_attention_forward.html index 04df8d8e6..7644bb383 100644 --- a/dev/reference/nnf_multi_head_attention_forward.html +++ b/dev/reference/nnf_multi_head_attention_forward.html @@ -1,80 +1,19 @@ - - - - - - - -Multi head attention forward — nnf_multi_head_attention_forward • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Multi head attention forward — nnf_multi_head_attention_forward • torch - - - - - - + + - - -
-
- -
- -
+
@@ -191,177 +113,125 @@ subspaces. See reference: Attention Is All You Need" /> subspaces. See reference: Attention Is All You Need

-
nnf_multi_head_attention_forward(
-  query,
-  key,
-  value,
-  embed_dim_to_check,
-  num_heads,
-  in_proj_weight,
-  in_proj_bias,
-  bias_k,
-  bias_v,
-  add_zero_attn,
-  dropout_p,
-  out_proj_weight,
-  out_proj_bias,
-  training = TRUE,
-  key_padding_mask = NULL,
-  need_weights = TRUE,
-  attn_mask = NULL,
-  avg_weights = TRUE,
-  use_separate_proj_weight = FALSE,
-  q_proj_weight = NULL,
-  k_proj_weight = NULL,
-  v_proj_weight = NULL,
-  static_k = NULL,
-  static_v = NULL
-)
+
+
nnf_multi_head_attention_forward(
+  query,
+  key,
+  value,
+  embed_dim_to_check,
+  num_heads,
+  in_proj_weight,
+  in_proj_bias,
+  bias_k,
+  bias_v,
+  add_zero_attn,
+  dropout_p,
+  out_proj_weight,
+  out_proj_bias,
+  training = TRUE,
+  key_padding_mask = NULL,
+  need_weights = TRUE,
+  attn_mask = NULL,
+  avg_weights = TRUE,
+  use_separate_proj_weight = FALSE,
+  q_proj_weight = NULL,
+  k_proj_weight = NULL,
+  v_proj_weight = NULL,
+  static_k = NULL,
+  static_v = NULL
+)
+
-

Arguments

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
query

\((L, N, E)\) where L is the target sequence length, N is the batch size, E is -the embedding dimension.

key

\((S, N, E)\), where S is the source sequence length, N is the batch size, E is -the embedding dimension.

value

\((S, N, E)\) where S is the source sequence length, N is the batch size, E is -the embedding dimension.

embed_dim_to_check

total dimension of the model.

num_heads

parallel attention heads.

in_proj_weight

input projection weight and bias.

in_proj_bias

currently undocumented.

bias_k

bias of the key and value sequences to be added at dim=0.

bias_v

currently undocumented.

add_zero_attn

add a new batch of zeros to the key and -value sequences at dim=1.

dropout_p

probability of an element to be zeroed.

out_proj_weight

the output projection weight and bias.

out_proj_bias

currently undocumented.

training

apply dropout if is TRUE.

key_padding_mask

\((N, S)\) where N is the batch size, S is the source sequence length. +

+

Arguments

+
query
+

\((L, N, E)\) where L is the target sequence length, N is the batch size, E is +the embedding dimension.

+
key
+

\((S, N, E)\), where S is the source sequence length, N is the batch size, E is +the embedding dimension.

+
value
+

\((S, N, E)\) where S is the source sequence length, N is the batch size, E is +the embedding dimension.

+
embed_dim_to_check
+

total dimension of the model.

+
num_heads
+

parallel attention heads.

+
in_proj_weight
+

input projection weight and bias.

+
in_proj_bias
+

currently undocumented.

+
bias_k
+

bias of the key and value sequences to be added at dim=0.

+
bias_v
+

currently undocumented.

+
add_zero_attn
+

add a new batch of zeros to the key and +value sequences at dim=1.

+
dropout_p
+

probability of an element to be zeroed.

+
out_proj_weight
+

the output projection weight and bias.

+
out_proj_bias
+

currently undocumented.

+
training
+

apply dropout if is TRUE.

+
key_padding_mask
+

\((N, S)\) where N is the batch size, S is the source sequence length. If a ByteTensor is provided, the non-zero positions will be ignored while the position with the zero positions will be unchanged. If a BoolTensor is provided, the positions with the -value of True will be ignored while the position with the value of False will be unchanged.

need_weights

output attn_output_weights.

attn_mask

2D mask \((L, S)\) where L is the target sequence length, S is the source sequence length. +value of True will be ignored while the position with the value of False will be unchanged.

+
need_weights
+

output attn_output_weights.

+
attn_mask
+

2D mask \((L, S)\) where L is the target sequence length, S is the source sequence length. 3D mask \((N*num_heads, L, S)\) where N is the batch size, L is the target sequence length, S is the source sequence length. attn_mask ensure that position i is allowed to attend the unmasked positions. If a ByteTensor is provided, the non-zero positions are not allowed to attend while the zero positions will be unchanged. If a BoolTensor is provided, positions with True is not allowed to attend while False values will be unchanged. If a FloatTensor -is provided, it will be added to the attention weight.

avg_weights

Logical; whether to average attn_output_weights over the +is provided, it will be added to the attention weight.

+
avg_weights
+

Logical; whether to average attn_output_weights over the attention heads before outputting them. This doesn't change the returned -value of attn_output; it only affects the returned attention weight matrix.

use_separate_proj_weight

the function accept the proj. weights for +value of attn_output; it only affects the returned attention weight matrix.

+
use_separate_proj_weight
+

the function accept the proj. weights for query, key, and value in different forms. If false, in_proj_weight will be used, -which is a combination of q_proj_weight, k_proj_weight, v_proj_weight.

q_proj_weight

input projection weight and bias.

k_proj_weight

currently undocumented.

v_proj_weight

currently undocumented.

static_k

static key and value used for attention operators.

static_v

currently undocumented.

- +which is a combination of q_proj_weight, k_proj_weight, v_proj_weight.

+
q_proj_weight
+

input projection weight and bias.

+
k_proj_weight
+

currently undocumented.

+
v_proj_weight
+

currently undocumented.

+
static_k
+

static key and value used for attention operators.

+
static_v
+

currently undocumented.

+
+
-
- +
- - + + diff --git a/dev/reference/nnf_multi_margin_loss.html b/dev/reference/nnf_multi_margin_loss.html index ef6d1eced..48dc26e54 100644 --- a/dev/reference/nnf_multi_margin_loss.html +++ b/dev/reference/nnf_multi_margin_loss.html @@ -1,81 +1,20 @@ - - - - - - - -Multi_margin_loss — nnf_multi_margin_loss • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Multi_margin_loss — nnf_multi_margin_loss • torch - - - - - - - - - - - - - - - + + - - -
-
- -
- -
+
@@ -193,74 +115,58 @@ (which is a 1D tensor of target class indices, 0 <= y <= x$size(2) - 1 ).

-
nnf_multi_margin_loss(
-  input,
-  target,
-  p = 1,
-  margin = 1,
-  weight = NULL,
-  reduction = "mean"
-)
+
+
nnf_multi_margin_loss(
+  input,
+  target,
+  p = 1,
+  margin = 1,
+  weight = NULL,
+  reduction = "mean"
+)
+
-

Arguments

- - - - - - - - - - - - - - - - - - - - - - - - - - -
input

tensor (N,*) where ** means, any number of additional dimensions

target

tensor (N,*) , same shape as the input

p

Has a default value of 1. 1 and 2 are the only supported values.

margin

Has a default value of 1.

weight

a manual rescaling weight given to each class. If given, it has to -be a Tensor of size C. Otherwise, it is treated as if having all ones.

reduction

(string, optional) – Specifies the reduction to apply to the +

+

Arguments

+
input
+

tensor (N,*) where ** means, any number of additional dimensions

+
target
+

tensor (N,*) , same shape as the input

+
p
+

Has a default value of 1. 1 and 2 are the only supported values.

+
margin
+

Has a default value of 1.

+
weight
+

a manual rescaling weight given to each class. If given, it has to +be a Tensor of size C. Otherwise, it is treated as if having all ones.

+
reduction
+

(string, optional) – Specifies the reduction to apply to the output: 'none' | 'mean' | 'sum'. 'none': no reduction will be applied, 'mean': the sum of the output will be divided by the number of elements in the output, -'sum': the output will be summed. Default: 'mean'

- +'sum': the output will be summed. Default: 'mean'

+
+
-
- +
- - + + diff --git a/dev/reference/nnf_multilabel_margin_loss.html b/dev/reference/nnf_multilabel_margin_loss.html index c2e9a5c0c..ea89b6cbb 100644 --- a/dev/reference/nnf_multilabel_margin_loss.html +++ b/dev/reference/nnf_multilabel_margin_loss.html @@ -1,81 +1,20 @@ - - - - - - - -Multilabel_margin_loss — nnf_multilabel_margin_loss • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Multilabel_margin_loss — nnf_multilabel_margin_loss • torch - - - - - - - - - - - - - - - + + - - -
-
- -
- -
+
@@ -193,54 +115,44 @@ is a 2D Tensor of target class indices)." /> is a 2D Tensor of target class indices).

-
nnf_multilabel_margin_loss(input, target, reduction = "mean")
- -

Arguments

- - - - - - - - - - - - - - -
input

tensor (N,*) where ** means, any number of additional dimensions

target

tensor (N,*) , same shape as the input

reduction

(string, optional) – Specifies the reduction to apply to the +

+
nnf_multilabel_margin_loss(input, target, reduction = "mean")
+
+ +
+

Arguments

+
input
+

tensor (N,*) where ** means, any number of additional dimensions

+
target
+

tensor (N,*) , same shape as the input

+
reduction
+

(string, optional) – Specifies the reduction to apply to the output: 'none' | 'mean' | 'sum'. 'none': no reduction will be applied, 'mean': the sum of the output will be divided by the number of elements in the output, -'sum': the output will be summed. Default: 'mean'

- +'sum': the output will be summed. Default: 'mean'

+
+
-
- +
- - + + diff --git a/dev/reference/nnf_multilabel_soft_margin_loss.html b/dev/reference/nnf_multilabel_soft_margin_loss.html index 0664cc2f2..03086d892 100644 --- a/dev/reference/nnf_multilabel_soft_margin_loss.html +++ b/dev/reference/nnf_multilabel_soft_margin_loss.html @@ -1,80 +1,19 @@ - - - - - - - -Multilabel_soft_margin_loss — nnf_multilabel_soft_margin_loss • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Multilabel_soft_margin_loss — nnf_multilabel_soft_margin_loss • torch - - - - - - + + - - -
-
- -
- -
+
@@ -191,63 +113,51 @@ max-entropy, between input x and target y of size (N, C)." /> max-entropy, between input x and target y of size (N, C).

-
nnf_multilabel_soft_margin_loss(
-  input,
-  target,
-  weight = NULL,
-  reduction = "mean"
-)
- -

Arguments

- - - - - - - - - - - - - - - - - - -
input

tensor (N,*) where ** means, any number of additional dimensions

target

tensor (N,*) , same shape as the input

weight

weight tensor to apply on the loss.

reduction

(string, optional) – Specifies the reduction to apply to the +

+
nnf_multilabel_soft_margin_loss(
+  input,
+  target,
+  weight = NULL,
+  reduction = "mean"
+)
+
+ +
+

Arguments

+
input
+

tensor (N,*) where ** means, any number of additional dimensions

+
target
+

tensor (N,*) , same shape as the input

+
weight
+

weight tensor to apply on the loss.

+
reduction
+

(string, optional) – Specifies the reduction to apply to the output: 'none' | 'mean' | 'sum'. 'none': no reduction will be applied, 'mean': the sum of the output will be divided by the number of elements in the output, -'sum': the output will be summed. Default: 'mean'

- +'sum': the output will be summed. Default: 'mean'

+
+
-
- +
- - + + diff --git a/dev/reference/nnf_nll_loss.html b/dev/reference/nnf_nll_loss.html index 6523573e7..991ccd754 100644 --- a/dev/reference/nnf_nll_loss.html +++ b/dev/reference/nnf_nll_loss.html @@ -1,79 +1,18 @@ - - - - - - - -Nll_loss — nnf_nll_loss • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Nll_loss — nnf_nll_loss • torch - - - - - - + + - - -
-
- -
- -
+
@@ -189,73 +111,59 @@

The negative log likelihood loss.

-
nnf_nll_loss(
-  input,
-  target,
-  weight = NULL,
-  ignore_index = -100,
-  reduction = "mean"
-)
+
+
nnf_nll_loss(
+  input,
+  target,
+  weight = NULL,
+  ignore_index = -100,
+  reduction = "mean"
+)
+
-

Arguments

- - - - - - - - - - - - - - - - - - - - - - -
input

\((N, C)\) where C = number of classes or \((N, C, H, W)\) in +

+

Arguments

+
input
+

\((N, C)\) where C = number of classes or \((N, C, H, W)\) in case of 2D Loss, or \((N, C, d_1, d_2, ..., d_K)\) where \(K \geq 1\) in -the case of K-dimensional loss.

target

\((N)\) where each value is \(0 \leq \mbox{targets}[i] \leq C-1\), -or \((N, d_1, d_2, ..., d_K)\) where \(K \geq 1\) for K-dimensional loss.

weight

(Tensor, optional) a manual rescaling weight given to each class. -If given, has to be a Tensor of size C

ignore_index

(int, optional) Specifies a target value that is ignored and -does not contribute to the input gradient.

reduction

(string, optional) – Specifies the reduction to apply to the +the case of K-dimensional loss.

+
target
+

\((N)\) where each value is \(0 \leq \mbox{targets}[i] \leq C-1\), +or \((N, d_1, d_2, ..., d_K)\) where \(K \geq 1\) for K-dimensional loss.

+
weight
+

(Tensor, optional) a manual rescaling weight given to each class. +If given, has to be a Tensor of size C

+
ignore_index
+

(int, optional) Specifies a target value that is ignored and +does not contribute to the input gradient.

+
reduction
+

(string, optional) – Specifies the reduction to apply to the output: 'none' | 'mean' | 'sum'. 'none': no reduction will be applied, 'mean': the sum of the output will be divided by the number of elements in the output, -'sum': the output will be summed. Default: 'mean'

- +'sum': the output will be summed. Default: 'mean'

+
+
-
- +
- - + + diff --git a/dev/reference/nnf_normalize.html b/dev/reference/nnf_normalize.html index b84357e49..07cdccd4e 100644 --- a/dev/reference/nnf_normalize.html +++ b/dev/reference/nnf_normalize.html @@ -1,79 +1,18 @@ - - - - - - - -Normalize — nnf_normalize • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Normalize — nnf_normalize • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,35 +111,25 @@

Performs \(L_p\) normalization of inputs over specified dimension.

-
nnf_normalize(input, p = 2, dim = 2, eps = 1e-12, out = NULL)
- -

Arguments

- - - - - - - - - - - - - - - - - - - - - - -
input

input tensor of any shape

p

(float) the exponent value in the norm formulation. Default: 2

dim

(int) the dimension to reduce. Default: 1

eps

(float) small value to avoid division by zero. Default: 1e-12

out

(Tensor, optional) the output tensor. If out is used, this operation won't be differentiable.

- -

Details

+
+
nnf_normalize(input, p = 2, dim = 2, eps = 1e-12, out = NULL)
+
+
+

Arguments

+
input
+

input tensor of any shape

+
p
+

(float) the exponent value in the norm formulation. Default: 2

+
dim
+

(int) the dimension to reduce. Default: 1

+
eps
+

(float) small value to avoid division by zero. Default: 1e-12

+
out
+

(Tensor, optional) the output tensor. If out is used, this operation won't be differentiable.

+
+
+

Details

For a tensor input of sizes \((n_0, ..., n_{dim}, ..., n_k)\), each \(n_{dim}\) -element vector \(v\) along dimension dim is transformed as

$$ @@ -225,32 +137,29 @@ $$

With the default arguments it uses the Euclidean norm over vectors along dimension \(1\) for normalization.

+
+
-
- +
- - + + diff --git a/dev/reference/nnf_one_hot.html b/dev/reference/nnf_one_hot.html index e73ebccb6..4a7ad8ebe 100644 --- a/dev/reference/nnf_one_hot.html +++ b/dev/reference/nnf_one_hot.html @@ -1,82 +1,21 @@ - - - - - - - -One_hot — nnf_one_hot • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -One_hot — nnf_one_hot • torch - - - - - - - - - - - - - - - - - + + -
-
- -
- -
+
@@ -195,52 +117,45 @@ index of last dimension matches the corresponding value of the input tensor, in which case it will be 1.

-
nnf_one_hot(tensor, num_classes = -1)
- -

Arguments

- - - - - - - - - - -
tensor

(LongTensor) class values of any shape.

num_classes

(int) Total number of classes. If set to -1, the number -of classes will be inferred as one greater than the largest class value in -the input tensor.

- -

Details

+
+
nnf_one_hot(tensor, num_classes = -1)
+
+
+

Arguments

+
tensor
+

(LongTensor) class values of any shape.

+
num_classes
+

(int) Total number of classes. If set to -1, the number +of classes will be inferred as one greater than the largest class value in +the input tensor.

+
+
+

Details

One-hot on Wikipedia: https://en.wikipedia.org/wiki/One-hot

+
+
-
- +
- - + + diff --git a/dev/reference/nnf_pad.html b/dev/reference/nnf_pad.html index ed87fcc0c..fec417500 100644 --- a/dev/reference/nnf_pad.html +++ b/dev/reference/nnf_pad.html @@ -1,79 +1,18 @@ - - - - - - - -Pad — nnf_pad • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Pad — nnf_pad • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,32 +111,24 @@

Pads tensor.

-
nnf_pad(input, pad, mode = "constant", value = 0)
- -

Arguments

- - - - - - - - - - - - - - - - - - -
input

(Tensor) N-dimensional tensor

pad

(tuple) m-elements tuple, where \(\frac{m}{2} \leq\) input dimensions -and \(m\) is even.

mode

'constant', 'reflect', 'replicate' or 'circular'. Default: 'constant'

value

fill value for 'constant' padding. Default: 0.

- -

Padding size

+
+
nnf_pad(input, pad, mode = "constant", value = 0)
+
+
+

Arguments

+
input
+

(Tensor) N-dimensional tensor

+
pad
+

(tuple) m-elements tuple, where \(\frac{m}{2} \leq\) input dimensions +and \(m\) is even.

+
mode
+

'constant', 'reflect', 'replicate' or 'circular'. Default: 'constant'

+
value
+

fill value for 'constant' padding. Default: 0.

+
+
+

Padding size

@@ -232,8 +146,9 @@ to pad the last 3 dimensions, use \((\mbox{padding\_left}, \mbox{padding\_right},\) \(\mbox{padding\_top}, \mbox{padding\_bottom}\) \(\mbox{padding\_front}, \mbox{padding\_back})\).

-

Padding mode

- +
+
+

Padding mode

@@ -243,32 +158,29 @@ padding modes works. Constant padding is implemented for arbitrary dimensions. tensor, or the last 2 dimensions of 4D input tensor, or the last dimension of 3D input tensor. Reflect padding is only implemented for padding the last 2 dimensions of 4D input tensor, or the last dimension of 3D input tensor.

+
+
-
- +
- - + + diff --git a/dev/reference/nnf_pairwise_distance.html b/dev/reference/nnf_pairwise_distance.html index 8ed95eb5a..57f8e386e 100644 --- a/dev/reference/nnf_pairwise_distance.html +++ b/dev/reference/nnf_pairwise_distance.html @@ -1,79 +1,18 @@ - - - - - - - -Pairwise_distance — nnf_pairwise_distance • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Pairwise_distance — nnf_pairwise_distance • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,60 +111,46 @@

Computes the batchwise pairwise distance between vectors using the p-norm.

-
nnf_pairwise_distance(x1, x2, p = 2, eps = 1e-06, keepdim = FALSE)
- -

Arguments

- - - - - - - - - - - - - - - - - - - - - - -
x1

(Tensor) First input.

x2

(Tensor) Second input (of size matching x1).

p

the norm degree. Default: 2

eps

(float, optional) Small value to avoid division by zero. -Default: 1e-8

keepdim

Determines whether or not to keep the vector dimension. Default: False

+
+
nnf_pairwise_distance(x1, x2, p = 2, eps = 1e-06, keepdim = FALSE)
+
+
+

Arguments

+
x1
+

(Tensor) First input.

+
x2
+

(Tensor) Second input (of size matching x1).

+
p
+

the norm degree. Default: 2

+
eps
+

(float, optional) Small value to avoid division by zero. +Default: 1e-8

+
keepdim
+

Determines whether or not to keep the vector dimension. Default: False

+
+
-
- +
- - + + diff --git a/dev/reference/nnf_pdist.html b/dev/reference/nnf_pdist.html index f42bb9ffe..07ce44bc0 100644 --- a/dev/reference/nnf_pdist.html +++ b/dev/reference/nnf_pdist.html @@ -1,82 +1,21 @@ - - - - - - - -Pdist — nnf_pdist • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Pdist — nnf_pdist • torch - - - - - - - - - - - - - - - - - + + -
-
- -
- -
+
@@ -195,52 +117,45 @@ This is identical to the upper triangular portion, excluding the diagonal, of if the rows are contiguous.

-
nnf_pdist(input, p = 2)
- -

Arguments

- - - - - - - - - - -
input

input tensor of shape \(N \times M\).

p

p value for the p-norm distance to calculate between each vector pair -\(\in [0, \infty]\).

- -

Details

+
+
nnf_pdist(input, p = 2)
+
+
+

Arguments

+
input
+

input tensor of shape \(N \times M\).

+
p
+

p value for the p-norm distance to calculate between each vector pair +\(\in [0, \infty]\).

+
+
+

Details

If input has shape \(N \times M\) then the output will have shape \(\frac{1}{2} N (N - 1)\).

+
+
-
- +
- - + + diff --git a/dev/reference/nnf_pixel_shuffle.html b/dev/reference/nnf_pixel_shuffle.html index f52ee374d..614e459af 100644 --- a/dev/reference/nnf_pixel_shuffle.html +++ b/dev/reference/nnf_pixel_shuffle.html @@ -1,80 +1,19 @@ - - - - - - - -Pixel_shuffle — nnf_pixel_shuffle • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Pixel_shuffle — nnf_pixel_shuffle • torch - - - - - - + + - - -
-
- -
- -
+
@@ -191,47 +113,39 @@ tensor of shape \((*, C, H \times r, W \times r)\)." /> tensor of shape \((*, C, H \times r, W \times r)\).

-
nnf_pixel_shuffle(input, upscale_factor)
- -

Arguments

- - - - - - - - - - -
input

(Tensor) the input tensor

upscale_factor

(int) factor to increase spatial resolution by

+
+
nnf_pixel_shuffle(input, upscale_factor)
+
+
+

Arguments

+
input
+

(Tensor) the input tensor

+
upscale_factor
+

(int) factor to increase spatial resolution by

+
+
-
- +
- - + + diff --git a/dev/reference/nnf_poisson_nll_loss.html b/dev/reference/nnf_poisson_nll_loss.html index 0ac6d58ea..3cfea463d 100644 --- a/dev/reference/nnf_poisson_nll_loss.html +++ b/dev/reference/nnf_poisson_nll_loss.html @@ -1,79 +1,18 @@ - - - - - - - -Poisson_nll_loss — nnf_poisson_nll_loss • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Poisson_nll_loss — nnf_poisson_nll_loss • torch - - - - - - + + - - -
-
- -
- -
+
@@ -189,77 +111,61 @@

Poisson negative log likelihood loss.

-
nnf_poisson_nll_loss(
-  input,
-  target,
-  log_input = TRUE,
-  full = FALSE,
-  eps = 1e-08,
-  reduction = "mean"
-)
+
+
nnf_poisson_nll_loss(
+  input,
+  target,
+  log_input = TRUE,
+  full = FALSE,
+  eps = 1e-08,
+  reduction = "mean"
+)
+
-

Arguments

- - - - - - - - - - - - - - - - - - - - - - - - - - -
input

tensor (N,*) where ** means, any number of additional dimensions

target

tensor (N,*) , same shape as the input

log_input

if TRUE the loss is computed as \(\exp(\mbox{input}) - \mbox{target} * \mbox{input}\), +

+

Arguments

+
input
+

tensor (N,*) where ** means, any number of additional dimensions

+
target
+

tensor (N,*) , same shape as the input

+
log_input
+

if TRUE the loss is computed as \(\exp(\mbox{input}) - \mbox{target} * \mbox{input}\), if FALSE then loss is \(\mbox{input} - \mbox{target} * \log(\mbox{input}+\mbox{eps})\). -Default: TRUE.

full

whether to compute full loss, i. e. to add the Stirling approximation -term. Default: FALSE.

eps

(float, optional) Small value to avoid evaluation of \(\log(0)\) when -log_input=FALSE. Default: 1e-8

reduction

(string, optional) – Specifies the reduction to apply to the +Default: TRUE.

+
full
+

whether to compute full loss, i. e. to add the Stirling approximation +term. Default: FALSE.

+
eps
+

(float, optional) Small value to avoid evaluation of \(\log(0)\) when +log_input=FALSE. Default: 1e-8

+
reduction
+

(string, optional) – Specifies the reduction to apply to the output: 'none' | 'mean' | 'sum'. 'none': no reduction will be applied, 'mean': the sum of the output will be divided by the number of elements in the output, -'sum': the output will be summed. Default: 'mean'

- +'sum': the output will be summed. Default: 'mean'

+
+
-
- +
- - + + diff --git a/dev/reference/nnf_prelu.html b/dev/reference/nnf_prelu.html index adcaef0d3..6ddc62b89 100644 --- a/dev/reference/nnf_prelu.html +++ b/dev/reference/nnf_prelu.html @@ -1,81 +1,20 @@ - - - - - - - -Prelu — nnf_prelu • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Prelu — nnf_prelu • torch - - - - - - - - - - - - - - - + + - - -
-
- -
- -
+
@@ -193,48 +115,40 @@ where weight is a learnable parameter." /> where weight is a learnable parameter.

-
nnf_prelu(input, weight)
- -

Arguments

- - - - - - - - - - -
input

(N,*) tensor, where * means, any number of additional -dimensions

weight

(Tensor) the learnable weights

+
+
nnf_prelu(input, weight)
+
+
+

Arguments

+
input
+

(N,*) tensor, where * means, any number of additional +dimensions

+
weight
+

(Tensor) the learnable weights

+
+
-
- +
- - + + diff --git a/dev/reference/nnf_relu.html b/dev/reference/nnf_relu.html index 065895e56..9591a3f6e 100644 --- a/dev/reference/nnf_relu.html +++ b/dev/reference/nnf_relu.html @@ -1,79 +1,18 @@ - - - - - - - -Relu — nnf_relu • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Relu — nnf_relu • torch - - - - - - + + - - -
-
- -
- -
+
@@ -189,50 +111,42 @@

Applies the rectified linear unit function element-wise.

-
nnf_relu(input, inplace = FALSE)
+    
+
nnf_relu(input, inplace = FALSE)
 
-nnf_relu_(input)
- -

Arguments

- - - - - - - - - - -
input

(N,*) tensor, where * means, any number of additional -dimensions

inplace

can optionally do the operation in-place. Default: FALSE

+nnf_relu_(input)
+
+
+

Arguments

+
input
+

(N,*) tensor, where * means, any number of additional +dimensions

+
inplace
+

can optionally do the operation in-place. Default: FALSE

+
+ -
- +
- - + + diff --git a/dev/reference/nnf_relu6.html b/dev/reference/nnf_relu6.html index 361ff1b64..ab285bc9b 100644 --- a/dev/reference/nnf_relu6.html +++ b/dev/reference/nnf_relu6.html @@ -1,79 +1,18 @@ - - - - - - - -Relu6 — nnf_relu6 • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Relu6 — nnf_relu6 • torch - - - - - - + + - - -
-
- -
- -
+
@@ -189,48 +111,40 @@

Applies the element-wise function \(ReLU6(x) = min(max(0,x), 6)\).

-
nnf_relu6(input, inplace = FALSE)
- -

Arguments

- - - - - - - - - - -
input

(N,*) tensor, where * means, any number of additional -dimensions

inplace

can optionally do the operation in-place. Default: FALSE

+
+
nnf_relu6(input, inplace = FALSE)
+
+
+

Arguments

+
input
+

(N,*) tensor, where * means, any number of additional +dimensions

+
inplace
+

can optionally do the operation in-place. Default: FALSE

+
+
-
- +
- - + + diff --git a/dev/reference/nnf_rrelu.html b/dev/reference/nnf_rrelu.html index 52bba455c..4db7e858e 100644 --- a/dev/reference/nnf_rrelu.html +++ b/dev/reference/nnf_rrelu.html @@ -1,79 +1,18 @@ - - - - - - - -Rrelu — nnf_rrelu • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Rrelu — nnf_rrelu • torch - - - - - - + + - - -
-
- -
- -
+
@@ -189,62 +111,48 @@

Randomized leaky ReLU.

-
nnf_rrelu(input, lower = 1/8, upper = 1/3, training = FALSE, inplace = FALSE)
-
-nnf_rrelu_(input, lower = 1/8, upper = 1/3, training = FALSE)
- -

Arguments

- - - - - - - - - - - - - - - - - - - - - - -
input

(N,*) tensor, where * means, any number of additional -dimensions

lower

lower bound of the uniform distribution. Default: 1/8

upper

upper bound of the uniform distribution. Default: 1/3

training

bool wether it's a training pass. DEfault: FALSE

inplace

can optionally do the operation in-place. Default: FALSE

+
+
nnf_rrelu(input, lower = 1/8, upper = 1/3, training = FALSE, inplace = FALSE)
 
+nnf_rrelu_(input, lower = 1/8, upper = 1/3, training = FALSE)
+
+ +
+

Arguments

+
input
+

(N,*) tensor, where * means, any number of additional +dimensions

+
lower
+

lower bound of the uniform distribution. Default: 1/8

+
upper
+

upper bound of the uniform distribution. Default: 1/3

+
training
+

bool wether it's a training pass. DEfault: FALSE

+
inplace
+

can optionally do the operation in-place. Default: FALSE

+
+
-
- +
- - + + diff --git a/dev/reference/nnf_selu.html b/dev/reference/nnf_selu.html index 17ef302b0..356af2bf5 100644 --- a/dev/reference/nnf_selu.html +++ b/dev/reference/nnf_selu.html @@ -1,82 +1,21 @@ - - - - - - - -Selu — nnf_selu • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Selu — nnf_selu • torch - - - - - - - - - - - - - - - - - + + -
-
- -
- -
+
@@ -195,60 +117,54 @@ with \(\alpha=1.6732632423543772848170429916717\) and \(scale=1.0507009873554804934193349852946\).

-
nnf_selu(input, inplace = FALSE)
-
-nnf_selu_(input)
- -

Arguments

- - - - - - - - - - -
input

(N,*) tensor, where * means, any number of additional -dimensions

inplace

can optionally do the operation in-place. Default: FALSE

- - -

Examples

-
if (torch_is_installed()) {
-x <- torch_randn(2, 2)
-y <- nnf_selu(x)
-nnf_selu_(x)
-torch_equal(x, y)
-
-}
-#> [1] TRUE
-
+
+
nnf_selu(input, inplace = FALSE)
+
+nnf_selu_(input)
+
+ +
+

Arguments

+
input
+

(N,*) tensor, where * means, any number of additional +dimensions

+
inplace
+

can optionally do the operation in-place. Default: FALSE

+
+ +
+

Examples

+
if (torch_is_installed()) {
+x <- torch_randn(2, 2)
+y <- nnf_selu(x)
+nnf_selu_(x)
+torch_equal(x, y)
+
+}
+#> [1] TRUE
+
+
+
-
- +
- - + + diff --git a/dev/reference/nnf_sigmoid.html b/dev/reference/nnf_sigmoid.html index a328ed149..a191edb54 100644 --- a/dev/reference/nnf_sigmoid.html +++ b/dev/reference/nnf_sigmoid.html @@ -1,79 +1,18 @@ - - - - - - - -Sigmoid — nnf_sigmoid • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Sigmoid — nnf_sigmoid • torch - - - - - - + + - - -
-
- -
- -
+
@@ -189,44 +111,38 @@

Applies element-wise \(Sigmoid(x_i) = \frac{1}{1 + exp(-x_i)}\)

-
nnf_sigmoid(input)
- -

Arguments

- - - - - - -
input

(N,*) tensor, where * means, any number of additional -dimensions

+
+
nnf_sigmoid(input)
+
+
+

Arguments

+
input
+

(N,*) tensor, where * means, any number of additional +dimensions

+
+
-
- +
- - + + diff --git a/dev/reference/nnf_smooth_l1_loss.html b/dev/reference/nnf_smooth_l1_loss.html index 9390ba445..f59bad5b1 100644 --- a/dev/reference/nnf_smooth_l1_loss.html +++ b/dev/reference/nnf_smooth_l1_loss.html @@ -1,80 +1,19 @@ - - - - - - - -Smooth_l1_loss — nnf_smooth_l1_loss • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Smooth_l1_loss — nnf_smooth_l1_loss • torch - - - - - - + + - - -
-
- -
- -
+
@@ -191,54 +113,44 @@ element-wise error falls below 1 and an L1 term otherwise." /> element-wise error falls below 1 and an L1 term otherwise.

-
nnf_smooth_l1_loss(input, target, reduction = "mean")
- -

Arguments

- - - - - - - - - - - - - - -
input

tensor (N,*) where ** means, any number of additional dimensions

target

tensor (N,*) , same shape as the input

reduction

(string, optional) – Specifies the reduction to apply to the +

+
nnf_smooth_l1_loss(input, target, reduction = "mean")
+
+ +
+

Arguments

+
input
+

tensor (N,*) where ** means, any number of additional dimensions

+
target
+

tensor (N,*) , same shape as the input

+
reduction
+

(string, optional) – Specifies the reduction to apply to the output: 'none' | 'mean' | 'sum'. 'none': no reduction will be applied, 'mean': the sum of the output will be divided by the number of elements in the output, -'sum': the output will be summed. Default: 'mean'

- +'sum': the output will be summed. Default: 'mean'

+
+
-
- +
- - + + diff --git a/dev/reference/nnf_soft_margin_loss.html b/dev/reference/nnf_soft_margin_loss.html index eaaa3dc57..32a5a33e3 100644 --- a/dev/reference/nnf_soft_margin_loss.html +++ b/dev/reference/nnf_soft_margin_loss.html @@ -1,80 +1,19 @@ - - - - - - - -Soft_margin_loss — nnf_soft_margin_loss • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Soft_margin_loss — nnf_soft_margin_loss • torch - - - - - - + + - - -
-
- -
- -
+
@@ -191,54 +113,44 @@ between input tensor x and target tensor y (containing 1 or -1)." /> between input tensor x and target tensor y (containing 1 or -1).

-
nnf_soft_margin_loss(input, target, reduction = "mean")
- -

Arguments

- - - - - - - - - - - - - - -
input

tensor (N,*) where ** means, any number of additional dimensions

target

tensor (N,*) , same shape as the input

reduction

(string, optional) – Specifies the reduction to apply to the +

+
nnf_soft_margin_loss(input, target, reduction = "mean")
+
+ +
+

Arguments

+
input
+

tensor (N,*) where ** means, any number of additional dimensions

+
target
+

tensor (N,*) , same shape as the input

+
reduction
+

(string, optional) – Specifies the reduction to apply to the output: 'none' | 'mean' | 'sum'. 'none': no reduction will be applied, 'mean': the sum of the output will be divided by the number of elements in the output, -'sum': the output will be summed. Default: 'mean'

- +'sum': the output will be summed. Default: 'mean'

+
+
-
- +
- - + + diff --git a/dev/reference/nnf_softmax.html b/dev/reference/nnf_softmax.html index d39e3ad4c..b70e7229f 100644 --- a/dev/reference/nnf_softmax.html +++ b/dev/reference/nnf_softmax.html @@ -1,79 +1,18 @@ - - - - - - - -Softmax — nnf_softmax • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Softmax — nnf_softmax • torch - - - - - - + + - - -
-
- -
- -
+
@@ -189,58 +111,49 @@

Applies a softmax function.

-
nnf_softmax(input, dim, dtype = NULL)
- -

Arguments

- - - - - - - - - - - - - - -
input

(Tensor) input

dim

(int) A dimension along which softmax will be computed.

dtype

(torch.dtype, optional) the desired data type of returned tensor. If specified, the input tensor is casted to dtype before the operation is performed. This is useful for preventing data type overflows. -Default: NULL.

- -

Details

+
+
nnf_softmax(input, dim, dtype = NULL)
+
+
+

Arguments

+
input
+

(Tensor) input

+
dim
+

(int) A dimension along which softmax will be computed.

+
dtype
+

(torch.dtype, optional) the desired data type of returned tensor. If specified, the input tensor is casted to dtype before the operation is performed. This is useful for preventing data type overflows. +Default: NULL.

+
+
+

Details

Softmax is defined as:

$$Softmax(x_{i}) = exp(x_i)/\sum_j exp(x_j)$$

It is applied to all slices along dim, and will re-scale them so that the elements lie in the range [0, 1] and sum to 1.

+
+
-
- +
- - + + diff --git a/dev/reference/nnf_softmin.html b/dev/reference/nnf_softmin.html index f73920d16..ed3ec9668 100644 --- a/dev/reference/nnf_softmin.html +++ b/dev/reference/nnf_softmin.html @@ -1,79 +1,18 @@ - - - - - - - -Softmin — nnf_softmin • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Softmin — nnf_softmin • torch - - - - - - + + - - -
-
- -
- -
+
@@ -189,58 +111,49 @@

Applies a softmin function.

-
nnf_softmin(input, dim, dtype = NULL)
- -

Arguments

- - - - - - - - - - - - - - -
input

(Tensor) input

dim

(int) A dimension along which softmin will be computed -(so every slice along dim will sum to 1).

dtype

(torch.dtype, optional) the desired data type of returned tensor. If specified, the input tensor is casted to dtype before the operation is performed. -This is useful for preventing data type overflows. Default: NULL.

- -

Details

+
+
nnf_softmin(input, dim, dtype = NULL)
+
+
+

Arguments

+
input
+

(Tensor) input

+
dim
+

(int) A dimension along which softmin will be computed +(so every slice along dim will sum to 1).

+
dtype
+

(torch.dtype, optional) the desired data type of returned tensor. If specified, the input tensor is casted to dtype before the operation is performed. +This is useful for preventing data type overflows. Default: NULL.

+
+
+

Details

Note that

$$Softmin(x) = Softmax(-x)$$.

-

See nnf_softmax definition for mathematical formula.

+

See nnf_softmax definition for mathematical formula.

+
+
-
- +
- - + + diff --git a/dev/reference/nnf_softplus.html b/dev/reference/nnf_softplus.html index e82769736..0299a9005 100644 --- a/dev/reference/nnf_softplus.html +++ b/dev/reference/nnf_softplus.html @@ -1,79 +1,18 @@ - - - - - - - -Softplus — nnf_softplus • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Softplus — nnf_softplus • torch - - - - - - + + - - -
-
- -
- -
+
@@ -189,56 +111,47 @@

Applies element-wise, the function \(Softplus(x) = 1/\beta * log(1 + exp(\beta * x))\).

-
nnf_softplus(input, beta = 1, threshold = 20)
- -

Arguments

- - - - - - - - - - - - - - -
input

(N,*) tensor, where * means, any number of additional -dimensions

beta

the beta value for the Softplus formulation. Default: 1

threshold

values above this revert to a linear function. Default: 20

- -

Details

+
+
nnf_softplus(input, beta = 1, threshold = 20)
+
+
+

Arguments

+
input
+

(N,*) tensor, where * means, any number of additional +dimensions

+
beta
+

the beta value for the Softplus formulation. Default: 1

+
threshold
+

values above this revert to a linear function. Default: 20

+
+
+

Details

For numerical stability the implementation reverts to the linear function when \(input * \beta > threshold\).

+
+
-
- +
- - + + diff --git a/dev/reference/nnf_softshrink.html b/dev/reference/nnf_softshrink.html index 5d1ddbf8b..aed100b44 100644 --- a/dev/reference/nnf_softshrink.html +++ b/dev/reference/nnf_softshrink.html @@ -1,79 +1,18 @@ - - - - - - - -Softshrink — nnf_softshrink • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Softshrink — nnf_softshrink • torch - - - - - - + + - - -
-
- -
- -
+
@@ -189,49 +111,41 @@

Applies the soft shrinkage function elementwise

-
nnf_softshrink(input, lambd = 0.5)
- -

Arguments

- - - - - - - - - - -
input

(N,*) tensor, where * means, any number of additional -dimensions

lambd

the lambda (must be no less than zero) value for the Softshrink -formulation. Default: 0.5

+
+
nnf_softshrink(input, lambd = 0.5)
+
+
+

Arguments

+
input
+

(N,*) tensor, where * means, any number of additional +dimensions

+
lambd
+

the lambda (must be no less than zero) value for the Softshrink +formulation. Default: 0.5

+
+
-
- +
- - + + diff --git a/dev/reference/nnf_softsign.html b/dev/reference/nnf_softsign.html index 2d7213e2a..5608418eb 100644 --- a/dev/reference/nnf_softsign.html +++ b/dev/reference/nnf_softsign.html @@ -1,79 +1,18 @@ - - - - - - - -Softsign — nnf_softsign • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Softsign — nnf_softsign • torch - - - - - - + + - - -
-
- -
- -
+
@@ -189,44 +111,38 @@

Applies element-wise, the function \(SoftSign(x) = x/(1 + |x|\)

-
nnf_softsign(input)
- -

Arguments

- - - - - - -
input

(N,*) tensor, where * means, any number of additional -dimensions

+
+
nnf_softsign(input)
+
+
+

Arguments

+
input
+

(N,*) tensor, where * means, any number of additional +dimensions

+
+
-
- +
- - + + diff --git a/dev/reference/nnf_tanhshrink.html b/dev/reference/nnf_tanhshrink.html index a76b6a65d..379f14756 100644 --- a/dev/reference/nnf_tanhshrink.html +++ b/dev/reference/nnf_tanhshrink.html @@ -1,79 +1,18 @@ - - - - - - - -Tanhshrink — nnf_tanhshrink • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Tanhshrink — nnf_tanhshrink • torch - - - - - - + + - - -
-
- -
- -
+
@@ -189,44 +111,38 @@

Applies element-wise, \(Tanhshrink(x) = x - Tanh(x)\)

-
nnf_tanhshrink(input)
- -

Arguments

- - - - - - -
input

(N,*) tensor, where * means, any number of additional -dimensions

+
+
nnf_tanhshrink(input)
+
+
+

Arguments

+
input
+

(N,*) tensor, where * means, any number of additional +dimensions

+
+
-
- +
- - + + diff --git a/dev/reference/nnf_threshold.html b/dev/reference/nnf_threshold.html index d946ba790..f61bb6483 100644 --- a/dev/reference/nnf_threshold.html +++ b/dev/reference/nnf_threshold.html @@ -1,79 +1,18 @@ - - - - - - - -Threshold — nnf_threshold • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Threshold — nnf_threshold • torch - - - - - - + + - - -
-
- -
- -
+
@@ -189,58 +111,46 @@

Thresholds each element of the input Tensor.

-
nnf_threshold(input, threshold, value, inplace = FALSE)
-
-nnf_threshold_(input, threshold, value)
- -

Arguments

- - - - - - - - - - - - - - - - - - -
input

(N,*) tensor, where * means, any number of additional -dimensions

threshold

The value to threshold at

value

The value to replace with

inplace

can optionally do the operation in-place. Default: FALSE

+
+
nnf_threshold(input, threshold, value, inplace = FALSE)
 
+nnf_threshold_(input, threshold, value)
+
+ +
+

Arguments

+
input
+

(N,*) tensor, where * means, any number of additional +dimensions

+
threshold
+

The value to threshold at

+
value
+

The value to replace with

+
inplace
+

can optionally do the operation in-place. Default: FALSE

+
+
-
- +
- - + + diff --git a/dev/reference/nnf_triplet_margin_loss.html b/dev/reference/nnf_triplet_margin_loss.html index 5ab5cf8f8..7473d27f3 100644 --- a/dev/reference/nnf_triplet_margin_loss.html +++ b/dev/reference/nnf_triplet_margin_loss.html @@ -1,83 +1,22 @@ - - - - - - - -Triplet_margin_loss — nnf_triplet_margin_loss • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Triplet_margin_loss — nnf_triplet_margin_loss • torch - - - - - - - - - - - - - - - + + - - -
-
- -
- -
+
@@ -197,85 +119,65 @@ anchor, positive examples and negative examples respectively). The shapes of all input tensors should be (N, D).

-
nnf_triplet_margin_loss(
-  anchor,
-  positive,
-  negative,
-  margin = 1,
-  p = 2,
-  eps = 1e-06,
-  swap = FALSE,
-  reduction = "mean"
-)
+
+
nnf_triplet_margin_loss(
+  anchor,
+  positive,
+  negative,
+  margin = 1,
+  p = 2,
+  eps = 1e-06,
+  swap = FALSE,
+  reduction = "mean"
+)
+
-

Arguments

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
anchor

the anchor input tensor

positive

the positive input tensor

negative

the negative input tensor

margin

Default: 1.

p

The norm degree for pairwise distance. Default: 2.

eps

(float, optional) Small value to avoid division by zero.

swap

The distance swap is described in detail in the paper Learning shallow +

+

Arguments

+
anchor
+

the anchor input tensor

+
positive
+

the positive input tensor

+
negative
+

the negative input tensor

+
margin
+

Default: 1.

+
p
+

The norm degree for pairwise distance. Default: 2.

+
eps
+

(float, optional) Small value to avoid division by zero.

+
swap
+

The distance swap is described in detail in the paper Learning shallow convolutional feature descriptors with triplet losses by V. Balntas, E. Riba et al. -Default: FALSE.

reduction

(string, optional) – Specifies the reduction to apply to the +Default: FALSE.

+
reduction
+

(string, optional) – Specifies the reduction to apply to the output: 'none' | 'mean' | 'sum'. 'none': no reduction will be applied, 'mean': the sum of the output will be divided by the number of elements in the output, -'sum': the output will be summed. Default: 'mean'

- +'sum': the output will be summed. Default: 'mean'

+
+
-
- +
- - + + diff --git a/dev/reference/nnf_triplet_margin_with_distance_loss.html b/dev/reference/nnf_triplet_margin_with_distance_loss.html index e2d8f0ebc..e45ccdc6a 100644 --- a/dev/reference/nnf_triplet_margin_with_distance_loss.html +++ b/dev/reference/nnf_triplet_margin_with_distance_loss.html @@ -1,79 +1,18 @@ - - - - - - - -Triplet margin with distance loss — nnf_triplet_margin_with_distance_loss • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Triplet margin with distance loss — nnf_triplet_margin_with_distance_loss • torch - - - - - - + + - - -
-
- -
- -
+
-
nnf_triplet_margin_with_distance_loss(
-  anchor,
-  positive,
-  negative,
-  distance_function = NULL,
-  margin = 1,
-  swap = FALSE,
-  reduction = "mean"
-)
+
+
nnf_triplet_margin_with_distance_loss(
+  anchor,
+  positive,
+  negative,
+  distance_function = NULL,
+  margin = 1,
+  swap = FALSE,
+  reduction = "mean"
+)
+
-

Arguments

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
anchor

the anchor input tensor

positive

the positive input tensor

negative

the negative input tensor

distance_function

(callable, optional): A nonnegative, real-valued function that +

+

Arguments

+
anchor
+

the anchor input tensor

+
positive
+

the positive input tensor

+
negative
+

the negative input tensor

+
distance_function
+

(callable, optional): A nonnegative, real-valued function that quantifies the closeness of two tensors. If not specified, -nn_pairwise_distance() will be used. Default: None

margin

Default: 1.

swap

The distance swap is described in detail in the paper Learning shallow +nn_pairwise_distance() will be used. Default: None

+
margin
+

Default: 1.

+
swap
+

The distance swap is described in detail in the paper Learning shallow convolutional feature descriptors with triplet losses by V. Balntas, E. Riba et al. -Default: FALSE.

reduction

(string, optional) – Specifies the reduction to apply to the +Default: FALSE.

+
reduction
+

(string, optional) – Specifies the reduction to apply to the output: 'none' | 'mean' | 'sum'. 'none': no reduction will be applied, 'mean': the sum of the output will be divided by the number of elements in the output, -'sum': the output will be summed. Default: 'mean'

- +'sum': the output will be summed. Default: 'mean'

+
+
-
- +
- - + + diff --git a/dev/reference/nnf_unfold.html b/dev/reference/nnf_unfold.html index a8285b6f3..c2ed3b40e 100644 --- a/dev/reference/nnf_unfold.html +++ b/dev/reference/nnf_unfold.html @@ -1,79 +1,18 @@ - - - - - - - -Unfold — nnf_unfold • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Unfold — nnf_unfold • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,38 +111,28 @@

Extracts sliding local blocks from an batched input tensor.

-
nnf_unfold(input, kernel_size, dilation = 1, padding = 0, stride = 1)
- -

Arguments

- - - - - - - - - - - - - - - - - - - - - - -
input

the input tensor

kernel_size

the size of the sliding blocks

dilation

a parameter that controls the stride of elements within the -neighborhood. Default: 1

padding

implicit zero padding to be added on both sides of input. -Default: 0

stride

the stride of the sliding blocks in the input spatial dimensions. -Default: 1

- -

Warning

+
+
nnf_unfold(input, kernel_size, dilation = 1, padding = 0, stride = 1)
+
+
+

Arguments

+
input
+

the input tensor

+
kernel_size
+

the size of the sliding blocks

+
dilation
+

a parameter that controls the stride of elements within the +neighborhood. Default: 1

+
padding
+

implicit zero padding to be added on both sides of input. +Default: 0

+
stride
+

the stride of the sliding blocks in the input spatial dimensions. +Default: 1

+
+
+

Warning

@@ -232,32 +144,29 @@ supported.

memory location. As a result, in-place operations (especially ones that are vectorized) may result in incorrect behavior. If you need to write to the tensor, please clone it first.

+
+
-
- +
- - + + diff --git a/dev/reference/optim_adadelta.html b/dev/reference/optim_adadelta.html index 1d0d97ef5..3e8a7e26e 100644 --- a/dev/reference/optim_adadelta.html +++ b/dev/reference/optim_adadelta.html @@ -1,79 +1,18 @@ - - - - - - - -Adadelta optimizer — optim_adadelta • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Adadelta optimizer — optim_adadelta • torch - - - - - + + - - - -
-
- -
- -
+
-
optim_adadelta(params, lr = 1, rho = 0.9, eps = 1e-06, weight_decay = 0)
- -

Arguments

- - - - - - - - - - - - - - - - - - - - - - -
params

(iterable): list of parameters to optimize or list defining -parameter groups

lr

(float, optional): learning rate (default: 1e-3)

rho

(float, optional): coefficient used for computing a running average -of squared gradients (default: 0.9)

eps

(float, optional): term added to the denominator to improve -numerical stability (default: 1e-6)

weight_decay

(float, optional): weight decay (L2 penalty) (default: 0)

- -

Note

+
+
optim_adadelta(params, lr = 1, rho = 0.9, eps = 1e-06, weight_decay = 0)
+
+
+

Arguments

+
params
+

(iterable): list of parameters to optimize or list defining +parameter groups

+
lr
+

(float, optional): learning rate (default: 1e-3)

+
rho
+

(float, optional): coefficient used for computing a running average +of squared gradients (default: 0.9)

+
eps
+

(float, optional): term added to the denominator to improve +numerical stability (default: 1e-6)

+
weight_decay
+

(float, optional): weight decay (L2 penalty) (default: 0)

+
+
+

Note

According to the original paper, decaying average of the squared gradients is computed as follows: $$ @@ -237,50 +149,50 @@ $$ \theta_{t+1} = \theta_{t} + \Delta \theta_{t} \end{array} $$

-

Warning

- +
+
+

Warning

If you need to move a model to GPU via $cuda(), please do so before constructing optimizers for it. Parameters of a model after $cuda() will be different objects from those before the call. In general, you should make sure that the objects pointed to by model parameters subject to optimization remain the same over the whole lifecycle of optimizer creation and usage.

+
-

Examples

-
if (torch_is_installed()) {
-if (FALSE) {
-optimizer <- optim_adadelta(model$parameters, lr = 0.1)
-optimizer$zero_grad()
-loss_fn(model(input), target)$backward()
-optimizer$step()
-}
-}
-
+
+

Examples

+
if (torch_is_installed()) {
+if (FALSE) {
+optimizer <- optim_adadelta(model$parameters, lr = 0.1)
+optimizer$zero_grad()
+loss_fn(model(input), target)$backward()
+optimizer$step()
+}
+}
+
+
+
-
- +
- - + + diff --git a/dev/reference/optim_adagrad.html b/dev/reference/optim_adagrad.html index b29577e1c..b84ae8175 100644 --- a/dev/reference/optim_adagrad.html +++ b/dev/reference/optim_adagrad.html @@ -1,79 +1,18 @@ - - - - - - - -Adagrad optimizer — optim_adagrad • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Adagrad optimizer — optim_adagrad • torch - - - - - + + - - - -
-
- -
- -
+
-
optim_adagrad(
-  params,
-  lr = 0.01,
-  lr_decay = 0,
-  weight_decay = 0,
-  initial_accumulator_value = 0,
-  eps = 1e-10
-)
+
+
optim_adagrad(
+  params,
+  lr = 0.01,
+  lr_decay = 0,
+  weight_decay = 0,
+  initial_accumulator_value = 0,
+  eps = 1e-10
+)
+
-

Arguments

- - - - - - - - - - - - - - - - - - - - - - - - - - -
params

(iterable): list of parameters to optimize or list parameter groups

lr

(float, optional): learning rate (default: 1e-2)

lr_decay

(float, optional): learning rate decay (default: 0)

weight_decay

(float, optional): weight decay (L2 penalty) (default: 0)

initial_accumulator_value

the initial value for the accumulator. (default: 0)

+
+

Arguments

+
params
+

(iterable): list of parameters to optimize or list parameter groups

+
lr
+

(float, optional): learning rate (default: 1e-2)

+
lr_decay
+

(float, optional): learning rate decay (default: 0)

+
weight_decay
+

(float, optional): weight decay (L2 penalty) (default: 0)

+
initial_accumulator_value
+

the initial value for the accumulator. (default: 0)

Adagrad is an especially good optimizer for sparse data. It individually modifies learning rate for every single parameter, dividing the original learning rate value by sum of the squares of the gradients. It causes that the rarely occurring features get greater learning rates. The main downside of this method is the fact that learning rate may be -getting small too fast, so that at some point a model cannot learn anymore.

eps

(float, optional): term added to the denominator to improve -numerical stability (default: 1e-10)

- -

Note

- +getting small too fast, so that at some point a model cannot learn anymore.

+
eps
+

(float, optional): term added to the denominator to improve +numerical stability (default: 1e-10)

+
+
+

Note

Update rule: $$ \theta_{t+1} = \theta_{t} - \frac{\eta }{\sqrt{G_{t} + \epsilon}} \odot g_{t} $$ The equation above and some remarks quoted -after An overview of gradient descent optimization algorithms +after An overview of gradient descent optimization algorithms by Sebastian Ruder.

-

Warning

- +
+
+

Warning

If you need to move a model to GPU via $cuda(), please do so before constructing optimizers for it. Parameters of a model after $cuda() will be different objects from those before the call. In general, you should make sure that the objects pointed to by model parameters subject to optimization remain the same over the whole lifecycle of optimizer creation and usage.

+
+
-
- +
- - + + diff --git a/dev/reference/optim_adam.html b/dev/reference/optim_adam.html index b3e7110c0..19e6d843a 100644 --- a/dev/reference/optim_adam.html +++ b/dev/reference/optim_adam.html @@ -1,79 +1,18 @@ - - - - - - - -Implements Adam algorithm. — optim_adam • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Implements Adam algorithm. — optim_adam • torch - - - - - - - - + + -
-
- -
- -
+
-

It has been proposed in Adam: A Method for Stochastic Optimization.

+

It has been proposed in Adam: A Method for Stochastic Optimization.

-
optim_adam(
-  params,
-  lr = 0.001,
-  betas = c(0.9, 0.999),
-  eps = 1e-08,
-  weight_decay = 0,
-  amsgrad = FALSE
-)
- -

Arguments

- - - - - - - - - - - - - - - - - - - - - - - - - - -
params

(iterable): iterable of parameters to optimize or dicts defining -parameter groups

lr

(float, optional): learning rate (default: 1e-3)

betas

(Tuple[float, float], optional): coefficients used for computing -running averages of gradient and its square (default: (0.9, 0.999))

eps

(float, optional): term added to the denominator to improve -numerical stability (default: 1e-8)

weight_decay

(float, optional): weight decay (L2 penalty) (default: 0)

amsgrad

(boolean, optional): whether to use the AMSGrad variant of this -algorithm from the paper On the Convergence of Adam and Beyond -(default: FALSE)

- -

Warning

+
+
optim_adam(
+  params,
+  lr = 0.001,
+  betas = c(0.9, 0.999),
+  eps = 1e-08,
+  weight_decay = 0,
+  amsgrad = FALSE
+)
+
+
+

Arguments

+
params
+

(iterable): iterable of parameters to optimize or dicts defining +parameter groups

+
lr
+

(float, optional): learning rate (default: 1e-3)

+
betas
+

(Tuple[float, float], optional): coefficients used for computing +running averages of gradient and its square (default: (0.9, 0.999))

+
eps
+

(float, optional): term added to the denominator to improve +numerical stability (default: 1e-8)

+
weight_decay
+

(float, optional): weight decay (L2 penalty) (default: 0)

+
amsgrad
+

(boolean, optional): whether to use the AMSGrad variant of this +algorithm from the paper On the Convergence of Adam and Beyond +(default: FALSE)

+
+
+

Warning

If you need to move a model to GPU via $cuda(), please do so before constructing optimizers for it. Parameters of a model after $cuda() will be different objects from those before the call. In general, you should make sure that the objects pointed to by model parameters subject to optimization remain the same over the whole lifecycle of optimizer creation and usage.

+
-

Examples

-
if (torch_is_installed()) {
-if (FALSE) {
-optimizer <- optim_adam(model$parameters(), lr=0.1)
-optimizer$zero_grad()
-loss_fn(model(input), target)$backward()
-optimizer$step()
-}
-
-}
-
+
+

Examples

+
if (torch_is_installed()) {
+if (FALSE) {
+optimizer <- optim_adam(model$parameters(), lr=0.1)
+optimizer$zero_grad()
+loss_fn(model(input), target)$backward()
+optimizer$step()
+}
+
+}
+
+
+
-
- +
- - + + diff --git a/dev/reference/optim_asgd.html b/dev/reference/optim_asgd.html index ee04a8302..aa33e6b2b 100644 --- a/dev/reference/optim_asgd.html +++ b/dev/reference/optim_asgd.html @@ -1,79 +1,18 @@ - - - - - - - -Averaged Stochastic Gradient Descent optimizer — optim_asgd • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Averaged Stochastic Gradient Descent optimizer — optim_asgd • torch - - - - - - - - + + -
-
- -
- -
+
-
optim_asgd(
-  params,
-  lr = 0.01,
-  lambda = 1e-04,
-  alpha = 0.75,
-  t0 = 1e+06,
-  weight_decay = 0
-)
- -

Arguments

- - - - - - - - - - - - - - - - - - - - - - - - - - -
params

(iterable): iterable of parameters to optimize or lists defining -parameter groups

lr

(float): learning rate

lambda

(float, optional): decay term (default: 1e-4)

alpha

(float, optional): power for eta update (default: 0.75)

t0

(float, optional): point at which to start averaging (default: 1e6)

weight_decay

(float, optional): weight decay (L2 penalty) (default: 0)

- -

Warning

+
+
optim_asgd(
+  params,
+  lr = 0.01,
+  lambda = 1e-04,
+  alpha = 0.75,
+  t0 = 1e+06,
+  weight_decay = 0
+)
+
+
+

Arguments

+
params
+

(iterable): iterable of parameters to optimize or lists defining +parameter groups

+
lr
+

(float): learning rate

+
lambda
+

(float, optional): decay term (default: 1e-4)

+
alpha
+

(float, optional): power for eta update (default: 0.75)

+
t0
+

(float, optional): point at which to start averaging (default: 1e6)

+
weight_decay
+

(float, optional): weight decay (L2 penalty) (default: 0)

+
+
+

Warning

If you need to move a model to GPU via $cuda(), please do so before constructing optimizers for it. Parameters of a model after $cuda() will be different objects from those before the call. In general, you should make sure that the objects pointed to by model parameters subject to optimization remain the same over the whole lifecycle of optimizer creation and usage.

+
-

Examples

-
if (torch_is_installed()) {
-if (FALSE) {
-optimizer <- optim_asgd(model$parameters(), lr=0.1)
-optimizer$zero_grad()
-loss_fn(model(input), target)$backward()
-optimizer$step()
-}
-
-}
-
+
+

Examples

+
if (torch_is_installed()) {
+if (FALSE) {
+optimizer <- optim_asgd(model$parameters(), lr=0.1)
+optimizer$zero_grad()
+loss_fn(model(input), target)$backward()
+optimizer$step()
+}
+
+}
+
+
+
-
- +
- - + + diff --git a/dev/reference/optim_lbfgs.html b/dev/reference/optim_lbfgs.html index 6ad01fbcc..4e32b5c24 100644 --- a/dev/reference/optim_lbfgs.html +++ b/dev/reference/optim_lbfgs.html @@ -1,80 +1,19 @@ - - - - - - - -LBFGS optimizer — optim_lbfgs • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -LBFGS optimizer — optim_lbfgs • torch - - - - - - - - + + -
-
- -
- -
+

Implements L-BFGS algorithm, heavily inspired by -minFunc

+minFunc

-
optim_lbfgs(
-  params,
-  lr = 1,
-  max_iter = 20,
-  max_eval = NULL,
-  tolerance_grad = 1e-07,
-  tolerance_change = 1e-09,
-  history_size = 100,
-  line_search_fn = NULL
-)
- -

Arguments

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
params

(iterable): iterable of parameters to optimize or dicts defining -parameter groups

lr

(float): learning rate (default: 1)

max_iter

(int): maximal number of iterations per optimization step -(default: 20)

max_eval

(int): maximal number of function evaluations per optimization -step (default: max_iter * 1.25).

tolerance_grad

(float): termination tolerance on first order optimality -(default: 1e-5).

tolerance_change

(float): termination tolerance on function -value/parameter changes (default: 1e-9).

history_size

(int): update history size (default: 100).

line_search_fn

(str): either 'strong_wolfe' or None (default: None).

- -

Note

+
+
optim_lbfgs(
+  params,
+  lr = 1,
+  max_iter = 20,
+  max_eval = NULL,
+  tolerance_grad = 1e-07,
+  tolerance_change = 1e-09,
+  history_size = 100,
+  line_search_fn = NULL
+)
+
+
+

Arguments

+
params
+

(iterable): iterable of parameters to optimize or dicts defining +parameter groups

+
lr
+

(float): learning rate (default: 1)

+
max_iter
+

(int): maximal number of iterations per optimization step +(default: 20)

+
max_eval
+

(int): maximal number of function evaluations per optimization +step (default: max_iter * 1.25).

+
tolerance_grad
+

(float): termination tolerance on first order optimality +(default: 1e-5).

+
tolerance_change
+

(float): termination tolerance on function +value/parameter changes (default: 1e-9).

+
history_size
+

(int): update history size (default: 100).

+
line_search_fn
+

(str): either 'strong_wolfe' or None (default: None).

+
+
+

Note

This is a very memory intensive optimizer (it requires additional param_bytes * (history_size + 1) bytes). If it doesn't fit in memory try reducing the history size, or use a different algorithm.

-

Warning

- +
+
+

Warning

@@ -264,32 +171,29 @@ will be different objects from those before the call. In general, you should make sure that the objects pointed to by model parameters subject to optimization remain the same over the whole lifecycle of optimizer creation and usage.

+
+
-
- +
- - + + diff --git a/dev/reference/optim_required.html b/dev/reference/optim_required.html index d6c74c793..fec60a8d3 100644 --- a/dev/reference/optim_required.html +++ b/dev/reference/optim_required.html @@ -1,79 +1,18 @@ - - - - - - - -Dummy value indicating a required value. — optim_required • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Dummy value indicating a required value. — optim_required • torch - - - - - - + + - - -
-
- -
- -
+
@@ -189,35 +111,32 @@

export

-
optim_required()
- +
+
optim_required()
+
+
-
- +
- - + + diff --git a/dev/reference/optim_rmsprop.html b/dev/reference/optim_rmsprop.html index dea7b3e44..91f1346a9 100644 --- a/dev/reference/optim_rmsprop.html +++ b/dev/reference/optim_rmsprop.html @@ -1,79 +1,18 @@ - - - - - - - -RMSprop optimizer — optim_rmsprop • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -RMSprop optimizer — optim_rmsprop • torch - - - - - + + - - - -
-
- -
- -
+
@@ -189,56 +111,42 @@

Proposed by G. Hinton in his course.

-
optim_rmsprop(
-  params,
-  lr = 0.01,
-  alpha = 0.99,
-  eps = 1e-08,
-  weight_decay = 0,
-  momentum = 0,
-  centered = FALSE
-)
+
+
optim_rmsprop(
+  params,
+  lr = 0.01,
+  alpha = 0.99,
+  eps = 1e-08,
+  weight_decay = 0,
+  momentum = 0,
+  centered = FALSE
+)
+
-

Arguments

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
params

(iterable): iterable of parameters to optimize or list defining parameter groups

lr

(float, optional): learning rate (default: 1e-2)

alpha

(float, optional): smoothing constant (default: 0.99)

eps

(float, optional): term added to the denominator to improve -numerical stability (default: 1e-8)

weight_decay

optional weight decay penalty. (default: 0)

momentum

(float, optional): momentum factor (default: 0)

centered

(bool, optional) : if TRUE, compute the centered RMSProp, +

+

Arguments

+
params
+

(iterable): iterable of parameters to optimize or list defining parameter groups

+
lr
+

(float, optional): learning rate (default: 1e-2)

+
alpha
+

(float, optional): smoothing constant (default: 0.99)

+
eps
+

(float, optional): term added to the denominator to improve +numerical stability (default: 1e-8)

+
weight_decay
+

optional weight decay penalty. (default: 0)

+
momentum
+

(float, optional): momentum factor (default: 0)

+
centered
+

(bool, optional) : if TRUE, compute the centered RMSProp, the gradient is normalized by an estimation of its variance -weight_decay (float, optional): weight decay (L2 penalty) (default: 0)

- -

Note

- +weight_decay (float, optional): weight decay (L2 penalty) (default: 0)

+
+
+

Note

The centered version first appears in -Generating Sequences With Recurrent Neural Networks. +Generating Sequences With Recurrent Neural Networks. The implementation here takes the square root of the gradient average before adding epsilon (note that TensorFlow interchanges these two operations). The effective learning rate is thus \(\alpha/(\sqrt{v} + \epsilon)\) where \(\alpha\) @@ -248,40 +156,38 @@ of the squared gradient.

$$ \theta_{t+1} = \theta_{t} - \frac{\eta }{\sqrt{{E[g^2]}_{t} + \epsilon}} * g_{t} $$

-

Warning

- +
+
+

Warning

If you need to move a model to GPU via $cuda(), please do so before constructing optimizers for it. Parameters of a model after $cuda() will be different objects from those before the call. In general, you should make sure that the objects pointed to by model parameters subject to optimization remain the same over the whole lifecycle of optimizer creation and usage.

+
+
-
- +
- - + + diff --git a/dev/reference/optim_rprop.html b/dev/reference/optim_rprop.html index be824a5f6..aba751ca3 100644 --- a/dev/reference/optim_rprop.html +++ b/dev/reference/optim_rprop.html @@ -1,79 +1,18 @@ - - - - - - - -Implements the resilient backpropagation algorithm. — optim_rprop • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Implements the resilient backpropagation algorithm. — optim_rprop • torch - - - - - - - - + + -
-
- -
- -
+
-
optim_rprop(params, lr = 0.01, etas = c(0.5, 1.2), step_sizes = c(1e-06, 50))
+
+
optim_rprop(params, lr = 0.01, etas = c(0.5, 1.2), step_sizes = c(1e-06, 50))
+
-

Arguments

- - - - - - - - - - - - - - - - - - -
params

(iterable): iterable of parameters to optimize or lists defining -parameter groups

lr

(float, optional): learning rate (default: 1e-2)

etas

(Tuple(float, float), optional): pair of (etaminus, etaplis), that +

+

Arguments

+
params
+

(iterable): iterable of parameters to optimize or lists defining +parameter groups

+
lr
+

(float, optional): learning rate (default: 1e-2)

+
etas
+

(Tuple(float, float), optional): pair of (etaminus, etaplis), that are multiplicative increase and decrease factors -(default: (0.5, 1.2))

step_sizes

(vector(float, float), optional): a pair of minimal and -maximal allowed step sizes (default: (1e-6, 50))

- -

Warning

- +(default: (0.5, 1.2))

+
step_sizes
+

(vector(float, float), optional): a pair of minimal and +maximal allowed step sizes (default: (1e-6, 50))

+
+
+

Warning

If you need to move a model to GPU via $cuda(), please do so before constructing optimizers for it. Parameters of a model after $cuda() will be different objects from those before the call. In general, you should make sure that the objects pointed to by model parameters subject to optimization remain the same over the whole lifecycle of optimizer creation and usage.

+
-

Examples

-
if (torch_is_installed()) {
-if (FALSE) {
-optimizer <- optim_rprop(model$parameters(), lr=0.1)
-optimizer$zero_grad()
-loss_fn(model(input), target)$backward()
-optimizer$step()
-}
-}
-
+
+

Examples

+
if (torch_is_installed()) {
+if (FALSE) {
+optimizer <- optim_rprop(model$parameters(), lr=0.1)
+optimizer$zero_grad()
+loss_fn(model(input), target)$backward()
+optimizer$step()
+}
+}
+
+
+
-
- +
- - + + diff --git a/dev/reference/optim_sgd.html b/dev/reference/optim_sgd.html index 2c90c1e85..be2df9626 100644 --- a/dev/reference/optim_sgd.html +++ b/dev/reference/optim_sgd.html @@ -1,81 +1,20 @@ - - - - - - - -SGD optimizer — optim_sgd • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -SGD optimizer — optim_sgd • torch - - - - - - - - - - - - - - - - - + + -
-
- -
- -
+
@@ -193,47 +115,35 @@ Nesterov momentum is based on the formula from On the importance of initialization and momentum in deep learning.

-
optim_sgd(
-  params,
-  lr = optim_required(),
-  momentum = 0,
-  dampening = 0,
-  weight_decay = 0,
-  nesterov = FALSE
-)
- -

Arguments

- - - - - - - - - - - - - - - - - - - - - - - - - - -
params

(iterable): iterable of parameters to optimize or dicts defining -parameter groups

lr

(float): learning rate

momentum

(float, optional): momentum factor (default: 0)

dampening

(float, optional): dampening for momentum (default: 0)

weight_decay

(float, optional): weight decay (L2 penalty) (default: 0)

nesterov

(bool, optional): enables Nesterov momentum (default: FALSE)

- -

Note

+
+
optim_sgd(
+  params,
+  lr = optim_required(),
+  momentum = 0,
+  dampening = 0,
+  weight_decay = 0,
+  nesterov = FALSE
+)
+
+
+

Arguments

+
params
+

(iterable): iterable of parameters to optimize or dicts defining +parameter groups

+
lr
+

(float): learning rate

+
momentum
+

(float, optional): momentum factor (default: 0)

+
dampening
+

(float, optional): dampening for momentum (default: 0)

+
weight_decay
+

(float, optional): weight decay (L2 penalty) (default: 0)

+
nesterov
+

(bool, optional): enables Nesterov momentum (default: FALSE)

+
+
+

Note

@@ -257,51 +167,51 @@ p_{t+1} & = p_{t} - v_{t+1}. \end{array} $$ The Nesterov version is analogously modified.

-

Warning

- +
+
+

Warning

If you need to move a model to GPU via $cuda(), please do so before constructing optimizers for it. Parameters of a model after $cuda() will be different objects from those before the call. In general, you should make sure that the objects pointed to by model parameters subject to optimization remain the same over the whole lifecycle of optimizer creation and usage.

+
-

Examples

-
if (torch_is_installed()) {
-if (FALSE) {
-optimizer <- optim_sgd(model$parameters(), lr=0.1, momentum=0.9)
-optimizer$zero_grad()
-loss_fn(model(input), target)$backward()
-optimizer$step()
-}
-
-}
-
+
+

Examples

+
if (torch_is_installed()) {
+if (FALSE) {
+optimizer <- optim_sgd(model$parameters(), lr=0.1, momentum=0.9)
+optimizer$zero_grad()
+loss_fn(model(input), target)$backward()
+optimizer$step()
+}
+
+}
+
+
+
-
- +
- - + + diff --git a/dev/reference/optimizer.html b/dev/reference/optimizer.html index 85080eff0..a39c8cef0 100644 --- a/dev/reference/optimizer.html +++ b/dev/reference/optimizer.html @@ -1,81 +1,20 @@ - - - - - - - -Creates a custom optimizer — optimizer • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Creates a custom optimizer — optimizer • torch - - - - - - - - - - - - - - - - - + + -
-
- -
- -
+
@@ -193,124 +115,111 @@ the initialize and step methods. See the example secti for a full example.

-
optimizer(
-  name = NULL,
-  inherit = Optimizer,
-  ...,
-  private = NULL,
-  active = NULL,
-  parent_env = parent.frame()
-)
- -

Arguments

- - - - - - - - - - - - - - - - - - - - - - - - - - -
name

(optional) name of the optimizer

inherit

(optional) you can inherit from other optimizers to re-use -some methods.

...

Pass any number of fields or methods. You should at least define -the initialize and step methods. See the examples section.

private

(optional) a list of private methods for the optimizer.

active

(optional) a list of active methods for the optimizer.

parent_env

used to capture the right environment to define the class. -The default is fine for most situations.

- -

Warning

+
+
optimizer(
+  name = NULL,
+  inherit = Optimizer,
+  ...,
+  private = NULL,
+  active = NULL,
+  parent_env = parent.frame()
+)
+
+
+

Arguments

+
name
+

(optional) name of the optimizer

+
inherit
+

(optional) you can inherit from other optimizers to re-use +some methods.

+
...
+

Pass any number of fields or methods. You should at least define +the initialize and step methods. See the examples section.

+
private
+

(optional) a list of private methods for the optimizer.

+
active
+

(optional) a list of active methods for the optimizer.

+
parent_env
+

used to capture the right environment to define the class. +The default is fine for most situations.

+
+
+

Warning

If you need to move a model to GPU via $cuda(), please do so before constructing optimizers for it. Parameters of a model after $cuda() will be different objects from those before the call. In general, you should make sure that the objects pointed to by model parameters subject to optimization remain the same over the whole lifecycle of optimizer creation and usage.

+
-

Examples

-
if (torch_is_installed()) {
-
-# In this example we will create a custom optimizer
-# that's just a simplified version of the `optim_sgd` function.
-
-optim_sgd2 <- optimizer(
-  initialize = function(params, learning_rate) {
-    defaults <- list(
-      learning_rate = learning_rate
-    )
-    super$initialize(params, defaults)
-  },
-  step = function() {
-    with_no_grad({
-      for (g in seq_along(self$param_groups)) {
-        group <- self$param_groups[[g]]
-        for (p in seq_along(group$params)) {
-          param <- group$params[[p]]
-          
-          if (is.null(param$grad) || is_undefined_tensor(param$grad))
-            next
-          
-          param$add_(param$grad, alpha = -group$learning_rate)
-        }
-      }
-    })
-  }
-)
-
-x <- torch_randn(1, requires_grad = TRUE)
-opt <- optim_sgd2(x, learning_rate = 0.1)
-for (i in 1:100) {
-  opt$zero_grad()
-  y <- x^2
-  y$backward()
-  opt$step()
-}
-all.equal(x$item(), 0, tolerance = 1e-9)
-
-}
-#> [1] TRUE
-
+
+

Examples

+
if (torch_is_installed()) {
+
+# In this example we will create a custom optimizer
+# that's just a simplified version of the `optim_sgd` function.
+
+optim_sgd2 <- optimizer(
+  initialize = function(params, learning_rate) {
+    defaults <- list(
+      learning_rate = learning_rate
+    )
+    super$initialize(params, defaults)
+  },
+  step = function() {
+    with_no_grad({
+      for (g in seq_along(self$param_groups)) {
+        group <- self$param_groups[[g]]
+        for (p in seq_along(group$params)) {
+          param <- group$params[[p]]
+          
+          if (is.null(param$grad) || is_undefined_tensor(param$grad))
+            next
+          
+          param$add_(param$grad, alpha = -group$learning_rate)
+        }
+      }
+    })
+  }
+)
+
+x <- torch_randn(1, requires_grad = TRUE)
+opt <- optim_sgd2(x, learning_rate = 0.1)
+for (i in 1:100) {
+  opt$zero_grad()
+  y <- x^2
+  y$backward()
+  opt$step()
+}
+all.equal(x$item(), 0, tolerance = 1e-9)
+
+}
+#> [1] TRUE
+
+
+
-
- +
- - + + diff --git a/dev/reference/pipe.html b/dev/reference/pipe.html index 118f13cea..c22be5afb 100644 --- a/dev/reference/pipe.html +++ b/dev/reference/pipe.html @@ -1,79 +1,18 @@ - - - - - - - -Pipe operator — %>% • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Pipe operator — %>% • torch - - - - - - + + - - -
-
- -
- -
+
@@ -189,35 +111,32 @@

See magrittr::%>% for details.

-
lhs %>% rhs
- +
+
lhs %>% rhs
+
+
-
- +
- - + + diff --git a/dev/reference/probs_to_logits.html b/dev/reference/probs_to_logits.html deleted file mode 100644 index 24690fa0d..000000000 --- a/dev/reference/probs_to_logits.html +++ /dev/null @@ -1,238 +0,0 @@ - - - - - - - - -Converts a tensor of probabilities into logits. For the binary case, -this denotes the probability of occurrence of the event indexed by 1. -For the multi-dimensional case, the values along the last dimension -denote the probabilities of occurrence of each of the events. — probs_to_logits • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - -
- -
-
- - -
-

Converts a tensor of probabilities into logits. For the binary case, -this denotes the probability of occurrence of the event indexed by 1. -For the multi-dimensional case, the values along the last dimension -denote the probabilities of occurrence of each of the events.

-
- -
probs_to_logits(probs, is_binary = FALSE)
- - - -
- -
- - -
- - -
-

Site built with pkgdown 1.6.1.

-
- -
-
- - - - - - - - diff --git a/dev/reference/reexports.html b/dev/reference/reexports.html index d76afbec3..7d635e48b 100644 --- a/dev/reference/reexports.html +++ b/dev/reference/reexports.html @@ -1,84 +1,25 @@ - - - - - - - -Re-exporting the as_iterator function. — reexports • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Re-exporting the as_iterator function. — reexports • torch - - - + coro +as_iterator, loop, yield - - - - - - - - - - + + - - -
-
- -
- -
+

These objects are imported from other packages. Follow the links below to see their documentation.

-
-
coro

as_iterator, loop, yield

+
coro
+

as_iterator, loop, yield

-
-
+
+
-
- +
- - + + diff --git a/dev/reference/slc.html b/dev/reference/slc.html index e58d88276..1d51eee47 100644 --- a/dev/reference/slc.html +++ b/dev/reference/slc.html @@ -1,79 +1,18 @@ - - - - - - - -Creates a slice — slc • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Creates a slice — slc • torch - - - - - - + + - - -
-
- -
- -
+
@@ -189,63 +111,55 @@

Creates a slice object that can be used when indexing torch tensors.

-
slc(start, end, step = 1)
- -

Arguments

- - - - - - - - - - - - - - -
start

(integer) starting index.

end

(integer) the last selected index.

step

(integer) the step between indexes.

- - -

Examples

-
if (torch_is_installed()) {
-x <- torch_randn(10)
-x[slc(start = 1, end = 5, step = 2)]
-
-}
-#> torch_tensor
-#> -0.7003
-#>  1.6018
-#>  0.3824
-#> [ CPUFloatType{3} ]
-
+
+
slc(start, end, step = 1)
+
+ +
+

Arguments

+
start
+

(integer) starting index.

+
end
+

(integer) the last selected index.

+
step
+

(integer) the step between indexes.

+
+ +
+

Examples

+
if (torch_is_installed()) {
+x <- torch_randn(10)
+x[slc(start = 1, end = 5, step = 2)]
+
+}
+#> torch_tensor
+#> -0.4307
+#>  0.2810
+#> -0.0825
+#> [ CPUFloatType{3} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/tensor_dataset.html b/dev/reference/tensor_dataset.html index cc1f20157..904648ecc 100644 --- a/dev/reference/tensor_dataset.html +++ b/dev/reference/tensor_dataset.html @@ -1,79 +1,18 @@ - - - - - - - -Dataset wrapping tensors. — tensor_dataset • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Dataset wrapping tensors. — tensor_dataset • torch - - - - - - + + - - -
-
- -
- -
+
@@ -189,43 +111,37 @@

Each sample will be retrieved by indexing tensors along the first dimension.

-
tensor_dataset(...)
- -

Arguments

- - - - - - -
...

tensors that have the same size of the first dimension.

+
+
tensor_dataset(...)
+
+
+

Arguments

+
...
+

tensors that have the same size of the first dimension.

+
+
-
- +
- - + + diff --git a/dev/reference/threads.html b/dev/reference/threads.html index 5346dbb2e..63cec71f0 100644 --- a/dev/reference/threads.html +++ b/dev/reference/threads.html @@ -1,79 +1,18 @@ - - - - - - - -Number of threads — threads • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Number of threads — threads • torch - - - - - + + - - - -
-
- -
- -
+
@@ -189,56 +111,52 @@

Get and set the numbers used by torch computations.

-
torch_set_num_threads(num_threads)
-
-torch_set_num_interop_threads(num_threads)
+    
+
torch_set_num_threads(num_threads)
 
-torch_get_num_interop_threads()
+torch_set_num_interop_threads(num_threads)
 
-torch_get_num_threads()
+torch_get_num_interop_threads() -

Arguments

- - - - - - -
num_threads

number of threads to set.

- -

Details

+torch_get_num_threads()
+
-

For details see the CPU threading article +

+

Arguments

+
num_threads
+

number of threads to set.

+
+
+

Details

+

For details see the CPU threading article in the PyTorch documentation.

-

Note

- +
+
+

Note

torch_set_threads do not work on macOS system as it must be 1.

+
+ -
- +
- - + + diff --git a/dev/reference/torch_abs.html b/dev/reference/torch_abs.html index fff57040d..faa57de0d 100644 --- a/dev/reference/torch_abs.html +++ b/dev/reference/torch_abs.html @@ -1,79 +1,18 @@ - - - - - - - -Abs — torch_abs • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Abs — torch_abs • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_abs(self)
- -

Arguments

- - - - - - -
self

(Tensor) the input tensor.

- -

abs(input) -> Tensor

+
+
torch_abs(self)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
+
+

abs(input) -> Tensor

@@ -209,43 +129,42 @@

$$ \mbox{out}_{i} = |\mbox{input}_{i}| $$

+
-

Examples

-
if (torch_is_installed()) {
-
-torch_abs(torch_tensor(c(-1, -2, 3)))
-}
-#> torch_tensor
-#>  1
-#>  2
-#>  3
-#> [ CPUFloatType{3} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+torch_abs(torch_tensor(c(-1, -2, 3)))
+}
+#> torch_tensor
+#>  1
+#>  2
+#>  3
+#> [ CPUFloatType{3} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_absolute.html b/dev/reference/torch_absolute.html index c83338711..ad1f3d022 100644 --- a/dev/reference/torch_absolute.html +++ b/dev/reference/torch_absolute.html @@ -1,79 +1,18 @@ - - - - - - - -Absolute — torch_absolute • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Absolute — torch_absolute • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,49 +111,44 @@

Absolute

-
torch_absolute(self)
- -

Arguments

- - - - - - -
self

(Tensor) the input tensor.

- -

absolute(input, *, out=None) -> Tensor

+
+
torch_absolute(self)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
+
+

absolute(input, *, out=None) -> Tensor

-

Alias for torch_abs()

+

Alias for torch_abs()

+
+
-
- +
- - + + diff --git a/dev/reference/torch_acos.html b/dev/reference/torch_acos.html index c7f8b094f..4598f96f8 100644 --- a/dev/reference/torch_acos.html +++ b/dev/reference/torch_acos.html @@ -1,79 +1,18 @@ - - - - - - - -Acos — torch_acos • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Acos — torch_acos • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_acos(self)
- -

Arguments

- - - - - - -
self

(Tensor) the input tensor.

- -

acos(input) -> Tensor

+
+
torch_acos(self)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
+
+

acos(input) -> Tensor

@@ -209,46 +129,45 @@

$$ \mbox{out}_{i} = \cos^{-1}(\mbox{input}_{i}) $$

+
-

Examples

-
if (torch_is_installed()) {
-
-a = torch_randn(c(4))
-a
-torch_acos(a)
-}
-#> torch_tensor
-#>  1.9154
-#>     nan
-#>  1.7598
-#>  2.8927
-#> [ CPUFloatType{4} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+a = torch_randn(c(4))
+a
+torch_acos(a)
+}
+#> torch_tensor
+#> nan
+#> nan
+#> nan
+#> nan
+#> [ CPUFloatType{4} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_acosh.html b/dev/reference/torch_acosh.html index 7b97c2c7f..9c0290861 100644 --- a/dev/reference/torch_acosh.html +++ b/dev/reference/torch_acosh.html @@ -1,79 +1,18 @@ - - - - - - - -Acosh — torch_acosh • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Acosh — torch_acosh • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_acosh(self)
- -

Arguments

- - - - - - -
self

(Tensor) the input tensor.

- -

Note

+
+
torch_acosh(self)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
+
+

Note

The domain of the inverse hyperbolic cosine is [1, inf) and values outside this range will be mapped to NaN, except for + INF for which the output is mapped to + INF.

$$ \mbox{out}_{i} = \cosh^{-1}(\mbox{input}_{i}) $$

-

acosh(input, *, out=None) -> Tensor

- +
+
+

acosh(input, *, out=None) -> Tensor

Returns a new tensor with the inverse hyperbolic cosine of the elements of input.

+
-

Examples

-
if (torch_is_installed()) {
-
-a <- torch_randn(c(4))$uniform_(1, 2)
-a
-torch_acosh(a)
-}
-#> torch_tensor
-#>  0.7407
-#>  0.8963
-#>  1.2158
-#>  0.9407
-#> [ CPUFloatType{4} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+a <- torch_randn(c(4))$uniform_(1, 2)
+a
+torch_acosh(a)
+}
+#> torch_tensor
+#>  0.6152
+#>  1.1088
+#>  1.0838
+#>  1.2457
+#> [ CPUFloatType{4} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_adaptive_avg_pool1d.html b/dev/reference/torch_adaptive_avg_pool1d.html index 95c7ec91e..16bc0ad1f 100644 --- a/dev/reference/torch_adaptive_avg_pool1d.html +++ b/dev/reference/torch_adaptive_avg_pool1d.html @@ -1,79 +1,18 @@ - - - - - - - -Adaptive_avg_pool1d — torch_adaptive_avg_pool1d • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Adaptive_avg_pool1d — torch_adaptive_avg_pool1d • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,55 +111,48 @@

Adaptive_avg_pool1d

-
torch_adaptive_avg_pool1d(self, output_size)
- -

Arguments

- - - - - - - - - - -
self

the input tensor

output_size

the target output size (single integer)

- -

adaptive_avg_pool1d(input, output_size) -> Tensor

+
+
torch_adaptive_avg_pool1d(self, output_size)
+
+
+

Arguments

+
self
+

the input tensor

+
output_size
+

the target output size (single integer)

+
+
+

adaptive_avg_pool1d(input, output_size) -> Tensor

Applies a 1D adaptive average pooling over an input signal composed of several input planes.

-

See nn_adaptive_avg_pool1d() for details and output shape.

+

See nn_adaptive_avg_pool1d() for details and output shape.

+
+
-
- +
- - + + diff --git a/dev/reference/torch_add.html b/dev/reference/torch_add.html index ec6363a7e..68831626c 100644 --- a/dev/reference/torch_add.html +++ b/dev/reference/torch_add.html @@ -1,79 +1,18 @@ - - - - - - - -Add — torch_add • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Add — torch_add • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_add(self, other, alpha = 1L)
- -

Arguments

- - - - - - - - - - - - - - -
self

(Tensor) the input tensor.

other

(Tensor/Number) the second input tensor/number.

alpha

(Number) the scalar multiplier for other

- -

add(input, other, out=NULL)

+
+
torch_add(self, other, alpha = 1L)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
other
+

(Tensor/Number) the second input tensor/number.

+
alpha
+

(Number) the scalar multiplier for other

+
+
+

add(input, other, out=NULL)

@@ -220,8 +136,9 @@ and returns a new resulting tensor.

$$ If input is of type FloatTensor or DoubleTensor, other must be a real number, otherwise it should be an integer.

-

add(input, other, *, alpha=1, out=NULL)

- +
+
+

add(input, other, *, alpha=1, out=NULL)

@@ -235,53 +152,52 @@ broadcastable .

$$ If other is of type FloatTensor or DoubleTensor, alpha must be a real number, otherwise it should be an integer.

+
-

Examples

-
if (torch_is_installed()) {
-
-a = torch_randn(c(4))
-a
-torch_add(a, 20)
-
-
-a = torch_randn(c(4))
-a
-b = torch_randn(c(4, 1))
-b
-torch_add(a, b)
-}
-#> torch_tensor
-#> -0.1948 -1.0123 -1.7895  0.3602
-#> -0.0349 -0.8524 -1.6297  0.5200
-#> -0.6679 -1.4855 -2.2627 -0.1130
-#> -0.9886 -1.8062 -2.5834 -0.4337
-#> [ CPUFloatType{4,4} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+a = torch_randn(c(4))
+a
+torch_add(a, 20)
+
+
+a = torch_randn(c(4))
+a
+b = torch_randn(c(4, 1))
+b
+torch_add(a, b)
+}
+#> torch_tensor
+#>  0.3543  2.7229  1.5358  0.2578
+#> -0.6951  1.6735  0.4864 -0.7916
+#> -2.1592  0.2094 -0.9777 -2.2557
+#> -1.9392  0.4294 -0.7577 -2.0357
+#> [ CPUFloatType{4,4} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_addbmm.html b/dev/reference/torch_addbmm.html index 4ca57811b..d22e3f219 100644 --- a/dev/reference/torch_addbmm.html +++ b/dev/reference/torch_addbmm.html @@ -1,79 +1,18 @@ - - - - - - - -Addbmm — torch_addbmm • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Addbmm — torch_addbmm • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_addbmm(self, batch1, batch2, beta = 1L, alpha = 1L)
- -

Arguments

- - - - - - - - - - - - - - - - - - - - - - -
self

(Tensor) matrix to be added

batch1

(Tensor) the first batch of matrices to be multiplied

batch2

(Tensor) the second batch of matrices to be multiplied

beta

(Number, optional) multiplier for input (\(\beta\))

alpha

(Number, optional) multiplier for batch1 @ batch2 (\(\alpha\))

- -

addbmm(input, batch1, batch2, *, beta=1, alpha=1, out=NULL) -> Tensor

+
+
torch_addbmm(self, batch1, batch2, beta = 1L, alpha = 1L)
+
+
+

Arguments

+
self
+

(Tensor) matrix to be added

+
batch1
+

(Tensor) the first batch of matrices to be multiplied

+
batch2
+

(Tensor) the second batch of matrices to be multiplied

+
beta
+

(Number, optional) multiplier for input (\(\beta\))

+
alpha
+

(Number, optional) multiplier for batch1 @ batch2 (\(\alpha\))

+
+
+

addbmm(input, batch1, batch2, *, beta=1, alpha=1, out=NULL) -> Tensor

@@ -237,46 +149,45 @@ and out will be a \((n \times p)\) tensor.

$$ For inputs of type FloatTensor or DoubleTensor, arguments beta and alpha must be real numbers, otherwise they should be integers.

+
-

Examples

-
if (torch_is_installed()) {
-
-M = torch_randn(c(3, 5))
-batch1 = torch_randn(c(10, 3, 4))
-batch2 = torch_randn(c(10, 4, 5))
-torch_addbmm(M, batch1, batch2)
-}
-#> torch_tensor
-#>  -0.2711  -1.1760  -2.5380  10.8767  -2.0978
-#>  -2.8442   3.0542  -2.4135   5.0735   0.5867
-#>  -6.5183  -7.9325  -4.9244  -0.1476 -10.0104
-#> [ CPUFloatType{3,5} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+M = torch_randn(c(3, 5))
+batch1 = torch_randn(c(10, 3, 4))
+batch2 = torch_randn(c(10, 4, 5))
+torch_addbmm(M, batch1, batch2)
+}
+#> torch_tensor
+#>   5.5040   3.1313   6.0254  -1.2240  14.6943
+#>  -1.8030   4.7817  -8.3587  -8.0430   7.2059
+#>  -8.5861  15.5201  -4.4082  -7.4407   2.6947
+#> [ CPUFloatType{3,5} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_addcdiv.html b/dev/reference/torch_addcdiv.html index d8691b30a..18edc253c 100644 --- a/dev/reference/torch_addcdiv.html +++ b/dev/reference/torch_addcdiv.html @@ -1,79 +1,18 @@ - - - - - - - -Addcdiv — torch_addcdiv • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Addcdiv — torch_addcdiv • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_addcdiv(self, tensor1, tensor2, value = 1L)
- -

Arguments

- - - - - - - - - - - - - - - - - - -
self

(Tensor) the tensor to be added

tensor1

(Tensor) the numerator tensor

tensor2

(Tensor) the denominator tensor

value

(Number, optional) multiplier for \(\mbox{tensor1} / \mbox{tensor2}\)

- -

addcdiv(input, tensor1, tensor2, *, value=1, out=NULL) -> Tensor

+
+
torch_addcdiv(self, tensor1, tensor2, value = 1L)
+
+
+

Arguments

+
self
+

(Tensor) the tensor to be added

+
tensor1
+

(Tensor) the numerator tensor

+
tensor2
+

(Tensor) the denominator tensor

+
value
+

(Number, optional) multiplier for \(\mbox{tensor1} / \mbox{tensor2}\)

+
+
+

addcdiv(input, tensor1, tensor2, *, value=1, out=NULL) -> Tensor

Performs the element-wise division of tensor1 by tensor2, multiply the result by the scalar value and add it to input.

-

Warning

- +
+
+

Warning

Integer division with addcdiv is deprecated, and in a future release addcdiv will perform a true division of tensor1 and tensor2. -The current addcdiv behavior can be replicated using torch_floor_divide() +The current addcdiv behavior can be replicated using torch_floor_divide() for integral inputs (input + value * tensor1 // tensor2) -and torch_div() for float inputs +and torch_div() for float inputs (input + value * tensor1 / tensor2). -The new addcdiv behavior can be implemented with torch_true_divide() +The new addcdiv behavior can be implemented with torch_true_divide() (input + value * torch.true_divide(tensor1, tensor2).

$$ @@ -240,46 +155,45 @@ $$

broadcastable .

For inputs of type FloatTensor or DoubleTensor, value must be a real number, otherwise an integer.

+
-

Examples

-
if (torch_is_installed()) {
-
-t = torch_randn(c(1, 3))
-t1 = torch_randn(c(3, 1))
-t2 = torch_randn(c(1, 3))
-torch_addcdiv(t, t1, t2, 0.1)
-}
-#> torch_tensor
-#>  1.8376 -0.4355 -1.2186
-#>  1.8460 -0.4288 -1.2220
-#>  1.9036 -0.3834 -1.2445
-#> [ CPUFloatType{3,3} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+t = torch_randn(c(1, 3))
+t1 = torch_randn(c(3, 1))
+t2 = torch_randn(c(1, 3))
+torch_addcdiv(t, t1, t2, 0.1)
+}
+#> torch_tensor
+#> -0.2266 -0.5436 -0.4552
+#> -0.3244 -0.4842 -0.3736
+#> -0.3762 -0.4527 -0.3304
+#> [ CPUFloatType{3,3} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_addcmul.html b/dev/reference/torch_addcmul.html index 48c6a19c7..8c660b11e 100644 --- a/dev/reference/torch_addcmul.html +++ b/dev/reference/torch_addcmul.html @@ -1,79 +1,18 @@ - - - - - - - -Addcmul — torch_addcmul • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Addcmul — torch_addcmul • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_addcmul(self, tensor1, tensor2, value = 1L)
- -

Arguments

- - - - - - - - - - - - - - - - - - -
self

(Tensor) the tensor to be added

tensor1

(Tensor) the tensor to be multiplied

tensor2

(Tensor) the tensor to be multiplied

value

(Number, optional) multiplier for \(tensor1 .* tensor2\)

- -

addcmul(input, tensor1, tensor2, *, value=1, out=NULL) -> Tensor

+
+
torch_addcmul(self, tensor1, tensor2, value = 1L)
+
+
+

Arguments

+
self
+

(Tensor) the tensor to be added

+
tensor1
+

(Tensor) the tensor to be multiplied

+
tensor2
+

(Tensor) the tensor to be multiplied

+
value
+

(Number, optional) multiplier for \(tensor1 .* tensor2\)

+
+
+

addcmul(input, tensor1, tensor2, *, value=1, out=NULL) -> Tensor

@@ -227,47 +141,45 @@ The shapes of tensor, tensor1, and tensor2

For inputs of type FloatTensor or DoubleTensor, value must be a real number, otherwise an integer.

+
-

Examples

-
if (torch_is_installed()) {
-
-t = torch_randn(c(1, 3))
-t1 = torch_randn(c(3, 1))
-t2 = torch_randn(c(1, 3))
-torch_addcmul(t, t1, t2, 0.1)
-}
-#> torch_tensor
-#> 0.01 *
-#> -7.0631 -243.5519  0.5258
-#>  -10.9131 -245.7551  0.0293
-#>  -15.9715 -248.6499 -0.6231
-#> [ CPUFloatType{3,3} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+t = torch_randn(c(1, 3))
+t1 = torch_randn(c(3, 1))
+t2 = torch_randn(c(1, 3))
+torch_addcmul(t, t1, t2, 0.1)
+}
+#> torch_tensor
+#>  0.4796 -1.0442 -0.2288
+#>  0.4374 -1.0310 -0.2786
+#>  0.3577 -1.0059 -0.3727
+#> [ CPUFloatType{3,3} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_addmm.html b/dev/reference/torch_addmm.html index c44206315..a8a24523a 100644 --- a/dev/reference/torch_addmm.html +++ b/dev/reference/torch_addmm.html @@ -1,79 +1,18 @@ - - - - - - - -Addmm — torch_addmm • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Addmm — torch_addmm • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_addmm(self, mat1, mat2, beta = 1L, alpha = 1L)
- -

Arguments

- - - - - - - - - - - - - - - - - - - - - - -
self

(Tensor) matrix to be added

mat1

(Tensor) the first matrix to be multiplied

mat2

(Tensor) the second matrix to be multiplied

beta

(Number, optional) multiplier for input (\(\beta\))

alpha

(Number, optional) multiplier for \(mat1 @ mat2\) (\(\alpha\))

- -

addmm(input, mat1, mat2, *, beta=1, alpha=1, out=NULL) -> Tensor

+
+
torch_addmm(self, mat1, mat2, beta = 1L, alpha = 1L)
+
+
+

Arguments

+
self
+

(Tensor) matrix to be added

+
mat1
+

(Tensor) the first matrix to be multiplied

+
mat2
+

(Tensor) the second matrix to be multiplied

+
beta
+

(Number, optional) multiplier for input (\(\beta\))

+
alpha
+

(Number, optional) multiplier for \(mat1 @ mat2\) (\(\alpha\))

+
+
+

addmm(input, mat1, mat2, *, beta=1, alpha=1, out=NULL) -> Tensor

@@ -234,45 +146,44 @@ and out will be a \((n \times p)\) tensor.

$$ For inputs of type FloatTensor or DoubleTensor, arguments beta and alpha must be real numbers, otherwise they should be integers.

+
-

Examples

-
if (torch_is_installed()) {
-
-M = torch_randn(c(2, 3))
-mat1 = torch_randn(c(2, 3))
-mat2 = torch_randn(c(3, 3))
-torch_addmm(M, mat1, mat2)
-}
-#> torch_tensor
-#>  8.2535  2.8206  0.7891
-#> -4.0131 -1.6696  0.6269
-#> [ CPUFloatType{2,3} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+M = torch_randn(c(2, 3))
+mat1 = torch_randn(c(2, 3))
+mat2 = torch_randn(c(3, 3))
+torch_addmm(M, mat1, mat2)
+}
+#> torch_tensor
+#> -0.9713  3.1402 -2.9559
+#>  2.6256 -2.4291  5.2249
+#> [ CPUFloatType{2,3} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_addmv.html b/dev/reference/torch_addmv.html index 491fcf20e..d32763329 100644 --- a/dev/reference/torch_addmv.html +++ b/dev/reference/torch_addmv.html @@ -1,79 +1,18 @@ - - - - - - - -Addmv — torch_addmv • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Addmv — torch_addmv • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_addmv(self, mat, vec, beta = 1L, alpha = 1L)
- -

Arguments

- - - - - - - - - - - - - - - - - - - - - - -
self

(Tensor) vector to be added

mat

(Tensor) matrix to be multiplied

vec

(Tensor) vector to be multiplied

beta

(Number, optional) multiplier for input (\(\beta\))

alpha

(Number, optional) multiplier for \(mat @ vec\) (\(\alpha\))

- -

addmv(input, mat, vec, *, beta=1, alpha=1, out=NULL) -> Tensor

+
+
torch_addmv(self, mat, vec, beta = 1L, alpha = 1L)
+
+
+

Arguments

+
self
+

(Tensor) vector to be added

+
mat
+

(Tensor) matrix to be multiplied

+
vec
+

(Tensor) vector to be multiplied

+
beta
+

(Number, optional) multiplier for input (\(\beta\))

+
alpha
+

(Number, optional) multiplier for \(mat @ vec\) (\(\alpha\))

+
+
+

addmv(input, mat, vec, *, beta=1, alpha=1, out=NULL) -> Tensor

@@ -235,45 +147,44 @@ broadcastable with a 1-D tensor of size n and $$ For inputs of type FloatTensor or DoubleTensor, arguments beta and alpha must be real numbers, otherwise they should be integers

+
-

Examples

-
if (torch_is_installed()) {
-
-M = torch_randn(c(2))
-mat = torch_randn(c(2, 3))
-vec = torch_randn(c(3))
-torch_addmv(M, mat, vec)
-}
-#> torch_tensor
-#>  2.8809
-#>  1.3260
-#> [ CPUFloatType{2} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+M = torch_randn(c(2))
+mat = torch_randn(c(2, 3))
+vec = torch_randn(c(3))
+torch_addmv(M, mat, vec)
+}
+#> torch_tensor
+#> -1.6625
+#>  1.2665
+#> [ CPUFloatType{2} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_addr.html b/dev/reference/torch_addr.html index c60dd43fe..63deef859 100644 --- a/dev/reference/torch_addr.html +++ b/dev/reference/torch_addr.html @@ -1,79 +1,18 @@ - - - - - - - -Addr — torch_addr • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Addr — torch_addr • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_addr(self, vec1, vec2, beta = 1L, alpha = 1L)
- -

Arguments

- - - - - - - - - - - - - - - - - - - - - - -
self

(Tensor) matrix to be added

vec1

(Tensor) the first vector of the outer product

vec2

(Tensor) the second vector of the outer product

beta

(Number, optional) multiplier for input (\(\beta\))

alpha

(Number, optional) multiplier for \(\mbox{vec1} \otimes \mbox{vec2}\) (\(\alpha\))

- -

addr(input, vec1, vec2, *, beta=1, alpha=1, out=NULL) -> Tensor

+
+
torch_addr(self, vec1, vec2, beta = 1L, alpha = 1L)
+
+
+

Arguments

+
self
+

(Tensor) matrix to be added

+
vec1
+

(Tensor) the first vector of the outer product

+
vec2
+

(Tensor) the second vector of the outer product

+
beta
+

(Number, optional) multiplier for input (\(\beta\))

+
alpha
+

(Number, optional) multiplier for \(\mbox{vec1} \otimes \mbox{vec2}\) (\(\alpha\))

+
+
+

addr(input, vec1, vec2, *, beta=1, alpha=1, out=NULL) -> Tensor

@@ -236,46 +148,45 @@ broadcastable with a matrix of size \((n \times m)\).

For inputs of type FloatTensor or DoubleTensor, arguments beta and alpha must be real numbers, otherwise they should be integers

+
-

Examples

-
if (torch_is_installed()) {
-
-vec1 = torch_arange(1, 3)
-vec2 = torch_arange(1, 2)
-M = torch_zeros(c(3, 2))
-torch_addr(M, vec1, vec2)
-}
-#> torch_tensor
-#>  1  2
-#>  2  4
-#>  3  6
-#> [ CPUFloatType{3,2} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+vec1 = torch_arange(1, 3)
+vec2 = torch_arange(1, 2)
+M = torch_zeros(c(3, 2))
+torch_addr(M, vec1, vec2)
+}
+#> torch_tensor
+#>  1  2
+#>  2  4
+#>  3  6
+#> [ CPUFloatType{3,2} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_allclose.html b/dev/reference/torch_allclose.html index 184df2920..c2923a4ec 100644 --- a/dev/reference/torch_allclose.html +++ b/dev/reference/torch_allclose.html @@ -1,79 +1,18 @@ - - - - - - - -Allclose — torch_allclose • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Allclose — torch_allclose • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,35 +111,25 @@

Allclose

-
torch_allclose(self, other, rtol = 1e-05, atol = 0, equal_nan = FALSE)
- -

Arguments

- - - - - - - - - - - - - - - - - - - - - - -
self

(Tensor) first tensor to compare

other

(Tensor) second tensor to compare

rtol

(float, optional) relative tolerance. Default: 1e-05

atol

(float, optional) absolute tolerance. Default: 1e-08

equal_nan

(bool, optional) if TRUE, then two NaN s will be compared as equal. Default: FALSE

- -

allclose(input, other, rtol=1e-05, atol=1e-08, equal_nan=False) -> bool

+
+
torch_allclose(self, other, rtol = 1e-05, atol = 0, equal_nan = FALSE)
+
+
+

Arguments

+
self
+

(Tensor) first tensor to compare

+
other
+

(Tensor) second tensor to compare

+
rtol
+

(float, optional) relative tolerance. Default: 1e-05

+
atol
+

(float, optional) absolute tolerance. Default: 1e-08

+
equal_nan
+

(bool, optional) if TRUE, then two NaN s will be compared as equal. Default: FALSE

+
+
+

allclose(input, other, rtol=1e-05, atol=1e-08, equal_nan=False) -> bool

@@ -227,42 +139,41 @@ $$ elementwise, for all elements of input and other. The behaviour of this function is analogous to numpy.allclose <https://docs.scipy.org/doc/numpy/reference/generated/numpy.allclose.html>_

+
-

Examples

-
if (torch_is_installed()) {
-
-torch_allclose(torch_tensor(c(10000., 1e-07)), torch_tensor(c(10000.1, 1e-08)))
-torch_allclose(torch_tensor(c(10000., 1e-08)), torch_tensor(c(10000.1, 1e-09)))
-torch_allclose(torch_tensor(c(1.0, NaN)), torch_tensor(c(1.0, NaN)))
-torch_allclose(torch_tensor(c(1.0, NaN)), torch_tensor(c(1.0, NaN)), equal_nan=TRUE)
-}
-#> [1] TRUE
-
+
+

Examples

+
if (torch_is_installed()) {
+
+torch_allclose(torch_tensor(c(10000., 1e-07)), torch_tensor(c(10000.1, 1e-08)))
+torch_allclose(torch_tensor(c(10000., 1e-08)), torch_tensor(c(10000.1, 1e-09)))
+torch_allclose(torch_tensor(c(1.0, NaN)), torch_tensor(c(1.0, NaN)))
+torch_allclose(torch_tensor(c(1.0, NaN)), torch_tensor(c(1.0, NaN)), equal_nan=TRUE)
+}
+#> [1] TRUE
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_amax.html b/dev/reference/torch_amax.html index 8d5aceb60..83708a5dd 100644 --- a/dev/reference/torch_amax.html +++ b/dev/reference/torch_amax.html @@ -1,79 +1,18 @@ - - - - - - - -Amax — torch_amax • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Amax — torch_amax • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_amax(self, dim = list(), keepdim = FALSE)
- -

Arguments

- - - - - - - - - - - - - - -
self

(Tensor) the input tensor.

dim

(int or tuple of ints) the dimension or dimensions to reduce.

keepdim

(bool) whether the output tensor has dim retained or not.

- -

Note

+
+
torch_amax(self, dim = list(), keepdim = FALSE)
+
-

The difference between max/min and amax/amin is:

    -
  • amax/amin supports reducing on multiple dimensions,

  • +
    +

    Arguments

    +
    self
    +

    (Tensor) the input tensor.

    +
    dim
    +

    (int or tuple of ints) the dimension or dimensions to reduce.

    +
    keepdim
    +

    (bool) whether the output tensor has dim retained or not.

    +
    +
    +

    Note

    +

    The difference between max/min and amax/amin is:

    • amax/amin supports reducing on multiple dimensions,

    • amax/amin does not return indices,

    • amax/amin evenly distributes gradient between equal values, while max(dim)/min(dim) propagates gradient only to a single index in the source tensor.

    • -
    - -

    If keepdim is TRUE, the output tensors are of the same size as inputexcept in the dimension(s)dimwhere they are of size 1. Otherwise,dims are squeezed (see [torch_squeeze()]), resulting in the output tensors having fewer dimension than input`.

    -

    amax(input, dim, keepdim=FALSE, *, out=None) -> Tensor

    - +

If keepdim is TRUE, the output tensors are of the same size as inputexcept in the dimension(s)dimwhere they are of size 1. Otherwise,dims are squeezed (see [torch_squeeze()]), resulting in the output tensors having fewer dimension than input`.

+
+
+

amax(input, dim, keepdim=FALSE, *, out=None) -> Tensor

Returns the maximum value of each slice of the input tensor in the given dimension(s) dim.

+
-

Examples

-
if (torch_is_installed()) {
-
-a <- torch_randn(c(4, 4))
-a
-torch_amax(a, 1)
-}
-#> torch_tensor
-#>  0.8230
-#>  1.4208
-#>  0.4793
-#>  1.5478
-#> [ CPUFloatType{4} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+a <- torch_randn(c(4, 4))
+a
+torch_amax(a, 1)
+}
+#> torch_tensor
+#>  1.8245
+#>  1.3432
+#>  1.2888
+#> -0.4561
+#> [ CPUFloatType{4} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_amin.html b/dev/reference/torch_amin.html index b33cabf63..e26cf5541 100644 --- a/dev/reference/torch_amin.html +++ b/dev/reference/torch_amin.html @@ -1,79 +1,18 @@ - - - - - - - -Amin — torch_amin • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Amin — torch_amin • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_amin(self, dim = list(), keepdim = FALSE)
- -

Arguments

- - - - - - - - - - - - - - -
self

(Tensor) the input tensor.

dim

(int or tuple of ints) the dimension or dimensions to reduce.

keepdim

(bool) whether the output tensor has dim retained or not.

- -

Note

+
+
torch_amin(self, dim = list(), keepdim = FALSE)
+
-

The difference between max/min and amax/amin is:

    -
  • amax/amin supports reducing on multiple dimensions,

  • +
    +

    Arguments

    +
    self
    +

    (Tensor) the input tensor.

    +
    dim
    +

    (int or tuple of ints) the dimension or dimensions to reduce.

    +
    keepdim
    +

    (bool) whether the output tensor has dim retained or not.

    +
    +
    +

    Note

    +

    The difference between max/min and amax/amin is:

    • amax/amin supports reducing on multiple dimensions,

    • amax/amin does not return indices,

    • amax/amin evenly distributes gradient between equal values, while max(dim)/min(dim) propagates gradient only to a single index in the source tensor.

    • -
    - -

    If keepdim is TRUE, the output tensors are of the same size as +

If keepdim is TRUE, the output tensors are of the same size as input except in the dimension(s) dim where they are of size 1. -Otherwise, dims are squeezed (see torch_squeeze()), resulting in +Otherwise, dims are squeezed (see torch_squeeze()), resulting in the output tensors having fewer dimensions than input.

-

amin(input, dim, keepdim=FALSE, *, out=None) -> Tensor

- +
+
+

amin(input, dim, keepdim=FALSE, *, out=None) -> Tensor

Returns the minimum value of each slice of the input tensor in the given dimension(s) dim.

+
-

Examples

-
if (torch_is_installed()) {
-
-a <- torch_randn(c(4, 4))
-a
-torch_amin(a, 1)
-}
-#> torch_tensor
-#> -0.3340
-#> -0.8503
-#> -1.2803
-#> -0.3193
-#> [ CPUFloatType{4} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+a <- torch_randn(c(4, 4))
+a
+torch_amin(a, 1)
+}
+#> torch_tensor
+#> -1.5179
+#> -1.2768
+#> -0.7408
+#> -1.0835
+#> [ CPUFloatType{4} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_angle.html b/dev/reference/torch_angle.html index b9fefc527..a6486b5ce 100644 --- a/dev/reference/torch_angle.html +++ b/dev/reference/torch_angle.html @@ -1,79 +1,18 @@ - - - - - - - -Angle — torch_angle • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Angle — torch_angle • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_angle(self)
- -

Arguments

- - - - - - -
self

(Tensor) the input tensor.

- -

angle(input) -> Tensor

+
+
torch_angle(self)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
+
+

angle(input) -> Tensor

@@ -209,40 +129,39 @@

$$ \mbox{out}_{i} = angle(\mbox{input}_{i}) $$

+
-

Examples

-
if (torch_is_installed()) {
-if (FALSE) {
-torch_angle(torch_tensor(c(-1 + 1i, -2 + 2i, 3 - 3i)))*180/3.14159
-}
-
-}
-
+
+

Examples

+
if (torch_is_installed()) {
+if (FALSE) {
+torch_angle(torch_tensor(c(-1 + 1i, -2 + 2i, 3 - 3i)))*180/3.14159
+}
+
+}
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_arange.html b/dev/reference/torch_arange.html index 2a58c9b6a..e6a46e467 100644 --- a/dev/reference/torch_arange.html +++ b/dev/reference/torch_arange.html @@ -1,79 +1,18 @@ - - - - - - - -Arange — torch_arange • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Arange — torch_arange • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_arange(
-  start,
-  end,
-  step = 1,
-  dtype = NULL,
-  layout = torch_strided(),
-  device = NULL,
-  requires_grad = FALSE
-)
- -

Arguments

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
start

(Number) the starting value for the set of points. Default: 0.

end

(Number) the ending value for the set of points

step

(Number) the gap between each pair of adjacent points. Default: 1.

dtype

(torch.dtype, optional) the desired data type of returned tensor. Default: if NULL, uses a global default (see torch_set_default_tensor_type). If dtype is not given, infer the data type from the other input arguments. If any of start, end, or stop are floating-point, the dtype is inferred to be the default dtype, see ~torch.get_default_dtype. Otherwise, the dtype is inferred to be torch.int64.

layout

(torch.layout, optional) the desired layout of returned Tensor. Default: torch_strided.

device

(torch.device, optional) the desired device of returned tensor. Default: if NULL, uses the current device for the default tensor type (see torch_set_default_tensor_type). device will be the CPU for CPU tensor types and the current CUDA device for CUDA tensor types.

requires_grad

(bool, optional) If autograd should record operations on the returned tensor. Default: FALSE.

- -

arange(start=0, end, step=1, out=NULL, dtype=NULL, layout=torch.strided, device=NULL, requires_grad=False) -> Tensor

+
+
torch_arange(
+  start,
+  end,
+  step = 1,
+  dtype = NULL,
+  layout = torch_strided(),
+  device = NULL,
+  requires_grad = FALSE
+)
+
+
+

Arguments

+
start
+

(Number) the starting value for the set of points. Default: 0.

+
end
+

(Number) the ending value for the set of points

+
step
+

(Number) the gap between each pair of adjacent points. Default: 1.

+
dtype
+

(torch.dtype, optional) the desired data type of returned tensor. Default: if NULL, uses a global default (see torch_set_default_tensor_type). If dtype is not given, infer the data type from the other input arguments. If any of start, end, or stop are floating-point, the dtype is inferred to be the default dtype, see ~torch.get_default_dtype. Otherwise, the dtype is inferred to be torch.int64.

+
layout
+

(torch.layout, optional) the desired layout of returned Tensor. Default: torch_strided.

+
device
+

(torch.device, optional) the desired device of returned tensor. Default: if NULL, uses the current device for the default tensor type (see torch_set_default_tensor_type). device will be the CPU for CPU tensor types and the current CUDA device for CUDA tensor types.

+
requires_grad
+

(bool, optional) If autograd should record operations on the returned tensor. Default: FALSE.

+
+
+

arange(start=0, end, step=1, out=NULL, dtype=NULL, layout=torch.strided, device=NULL, requires_grad=False) -> Tensor

@@ -246,46 +154,45 @@ in such cases.

$$ \mbox{out}_{{i+1}} = \mbox{out}_{i} + \mbox{step} $$

+
-

Examples

-
if (torch_is_installed()) {
-
-torch_arange(start = 0, end = 5)
-torch_arange(1, 4)
-torch_arange(1, 2.5, 0.5)
-}
-#> torch_tensor
-#>  1.0000
-#>  1.5000
-#>  2.0000
-#>  2.5000
-#> [ CPUFloatType{4} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+torch_arange(start = 0, end = 5)
+torch_arange(1, 4)
+torch_arange(1, 2.5, 0.5)
+}
+#> torch_tensor
+#>  1.0000
+#>  1.5000
+#>  2.0000
+#>  2.5000
+#> [ CPUFloatType{4} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_arccos.html b/dev/reference/torch_arccos.html index fbc36aaaa..f14a7f327 100644 --- a/dev/reference/torch_arccos.html +++ b/dev/reference/torch_arccos.html @@ -1,79 +1,18 @@ - - - - - - - -Arccos — torch_arccos • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Arccos — torch_arccos • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_arccos(self)
- -

Arguments

- - - - - - -
self

(Tensor) the input tensor.

- -

arccos(input, *, out=None) -> Tensor

+
+
torch_arccos(self)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
+
+

arccos(input, *, out=None) -> Tensor

-

Alias for torch_acos().

+

Alias for torch_acos().

+
+
-
- +
- - + + diff --git a/dev/reference/torch_arccosh.html b/dev/reference/torch_arccosh.html index 7aad2bc28..4eaa0e34d 100644 --- a/dev/reference/torch_arccosh.html +++ b/dev/reference/torch_arccosh.html @@ -1,79 +1,18 @@ - - - - - - - -Arccosh — torch_arccosh • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Arccosh — torch_arccosh • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_arccosh(self)
- -

Arguments

- - - - - - -
self

(Tensor) the input tensor.

- -

arccosh(input, *, out=None) -> Tensor

+
+
torch_arccosh(self)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
+
+

arccosh(input, *, out=None) -> Tensor

-

Alias for torch_acosh().

+

Alias for torch_acosh().

+
+
-
- +
- - + + diff --git a/dev/reference/torch_arcsin.html b/dev/reference/torch_arcsin.html index 56bbd507e..3e8d761a7 100644 --- a/dev/reference/torch_arcsin.html +++ b/dev/reference/torch_arcsin.html @@ -1,79 +1,18 @@ - - - - - - - -Arcsin — torch_arcsin • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Arcsin — torch_arcsin • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_arcsin(self)
- -

Arguments

- - - - - - -
self

(Tensor) the input tensor.

- -

arcsin(input, *, out=None) -> Tensor

+
+
torch_arcsin(self)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
+
+

arcsin(input, *, out=None) -> Tensor

-

Alias for torch_asin().

+

Alias for torch_asin().

+
+
-
- +
- - + + diff --git a/dev/reference/torch_arcsinh.html b/dev/reference/torch_arcsinh.html index c711eb731..fe1d8b374 100644 --- a/dev/reference/torch_arcsinh.html +++ b/dev/reference/torch_arcsinh.html @@ -1,79 +1,18 @@ - - - - - - - -Arcsinh — torch_arcsinh • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Arcsinh — torch_arcsinh • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_arcsinh(self)
- -

Arguments

- - - - - - -
self

(Tensor) the input tensor.

- -

arcsinh(input, *, out=None) -> Tensor

+
+
torch_arcsinh(self)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
+
+

arcsinh(input, *, out=None) -> Tensor

-

Alias for torch_asinh().

+

Alias for torch_asinh().

+
+
-
- +
- - + + diff --git a/dev/reference/torch_arctan.html b/dev/reference/torch_arctan.html index ae88ecb5a..f5941a9d8 100644 --- a/dev/reference/torch_arctan.html +++ b/dev/reference/torch_arctan.html @@ -1,79 +1,18 @@ - - - - - - - -Arctan — torch_arctan • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Arctan — torch_arctan • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_arctan(self)
- -

Arguments

- - - - - - -
self

(Tensor) the input tensor.

- -

arctan(input, *, out=None) -> Tensor

+
+
torch_arctan(self)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
+
+

arctan(input, *, out=None) -> Tensor

-

Alias for torch_atan().

+

Alias for torch_atan().

+
+
-
- +
- - + + diff --git a/dev/reference/torch_arctanh.html b/dev/reference/torch_arctanh.html index 476aa9441..b0fae24ee 100644 --- a/dev/reference/torch_arctanh.html +++ b/dev/reference/torch_arctanh.html @@ -1,79 +1,18 @@ - - - - - - - -Arctanh — torch_arctanh • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Arctanh — torch_arctanh • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_arctanh(self)
- -

Arguments

- - - - - - -
self

(Tensor) the input tensor.

- -

arctanh(input, *, out=None) -> Tensor

+
+
torch_arctanh(self)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
+
+

arctanh(input, *, out=None) -> Tensor

-

Alias for torch_atanh().

+

Alias for torch_atanh().

+
+
-
- +
- - + + diff --git a/dev/reference/torch_argmax.html b/dev/reference/torch_argmax.html index 522f19f64..09b4a1277 100644 --- a/dev/reference/torch_argmax.html +++ b/dev/reference/torch_argmax.html @@ -1,79 +1,18 @@ - - - - - - - -Argmax — torch_argmax • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Argmax — torch_argmax • torch - - - - - - - - + + -
-
- -
- -
+
@@ -190,86 +112,78 @@
-

Arguments

- - - - - - - - - - - - - - -
self

(Tensor) the input tensor.

dim

(int) the dimension to reduce. If NULL, the argmax of the flattened input is returned.

keepdim

(bool) whether the output tensor has dim retained or not. Ignored if dim=NULL.

- -

argmax(input) -> LongTensor

- +
+

Arguments

+
self
+

(Tensor) the input tensor.

+
dim
+

(int) the dimension to reduce. If NULL, the argmax of the flattened input is returned.

+
keepdim
+

(bool) whether the output tensor has dim retained or not. Ignored if dim=NULL.

+
+
+

argmax(input) -> LongTensor

Returns the indices of the maximum value of all elements in the input tensor.

This is the second value returned by torch_max. See its documentation for the exact semantics of this method.

-

argmax(input, dim, keepdim=False) -> LongTensor

- +
+
+

argmax(input, dim, keepdim=False) -> LongTensor

Returns the indices of the maximum values of a tensor across a dimension.

This is the second value returned by torch_max. See its documentation for the exact semantics of this method.

+
-

Examples

-
if (torch_is_installed()) {
-
-if (FALSE) {
-a = torch_randn(c(4, 4))
-a
-torch_argmax(a)
-}
-
-
-a = torch_randn(c(4, 4))
-a
-torch_argmax(a, dim=1)
-}
-#> torch_tensor
-#>  1
-#>  4
-#>  3
-#>  4
-#> [ CPULongType{4} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+if (FALSE) {
+a = torch_randn(c(4, 4))
+a
+torch_argmax(a)
+}
+
+
+a = torch_randn(c(4, 4))
+a
+torch_argmax(a, dim=1)
+}
+#> torch_tensor
+#>  1
+#>  1
+#>  4
+#>  1
+#> [ CPULongType{4} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_argmin.html b/dev/reference/torch_argmin.html index 132849983..0df775e3e 100644 --- a/dev/reference/torch_argmin.html +++ b/dev/reference/torch_argmin.html @@ -1,79 +1,18 @@ - - - - - - - -Argmin — torch_argmin • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Argmin — torch_argmin • torch - - - - - - - - + + -
-
- -
- -
+
@@ -190,84 +112,76 @@
-

Arguments

- - - - - - - - - - - - - - -
self

(Tensor) the input tensor.

dim

(int) the dimension to reduce. If NULL, the argmin of the flattened input is returned.

keepdim

(bool) whether the output tensor has dim retained or not. Ignored if dim=NULL.

- -

argmin(input) -> LongTensor

- +
+

Arguments

+
self
+

(Tensor) the input tensor.

+
dim
+

(int) the dimension to reduce. If NULL, the argmin of the flattened input is returned.

+
keepdim
+

(bool) whether the output tensor has dim retained or not. Ignored if dim=NULL.

+
+
+

argmin(input) -> LongTensor

Returns the indices of the minimum value of all elements in the input tensor.

This is the second value returned by torch_min. See its documentation for the exact semantics of this method.

-

argmin(input, dim, keepdim=False, out=NULL) -> LongTensor

- +
+
+

argmin(input, dim, keepdim=False, out=NULL) -> LongTensor

Returns the indices of the minimum values of a tensor across a dimension.

This is the second value returned by torch_min. See its documentation for the exact semantics of this method.

+
-

Examples

-
if (torch_is_installed()) {
-
-a = torch_randn(c(4, 4))
-a
-torch_argmin(a)
-
-
-a = torch_randn(c(4, 4))
-a
-torch_argmin(a, dim=1)
-}
-#> torch_tensor
-#>  2
-#>  4
-#>  4
-#>  1
-#> [ CPULongType{4} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+a = torch_randn(c(4, 4))
+a
+torch_argmin(a)
+
+
+a = torch_randn(c(4, 4))
+a
+torch_argmin(a, dim=1)
+}
+#> torch_tensor
+#>  2
+#>  3
+#>  2
+#>  3
+#> [ CPULongType{4} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_argsort.html b/dev/reference/torch_argsort.html index a596ca715..f0fbd18c0 100644 --- a/dev/reference/torch_argsort.html +++ b/dev/reference/torch_argsort.html @@ -1,79 +1,18 @@ - - - - - - - -Argsort — torch_argsort • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Argsort — torch_argsort • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,27 +111,21 @@

Argsort

-
torch_argsort(self, dim = -1L, descending = FALSE)
- -

Arguments

- - - - - - - - - - - - - - -
self

(Tensor) the input tensor.

dim

(int, optional) the dimension to sort along

descending

(bool, optional) controls the sorting order (ascending or descending)

- -

argsort(input, dim=-1, descending=False) -> LongTensor

+
+
torch_argsort(self, dim = -1L, descending = FALSE)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
dim
+

(int, optional) the dimension to sort along

+
descending
+

(bool, optional) controls the sorting order (ascending or descending)

+
+
+

argsort(input, dim=-1, descending=False) -> LongTensor

@@ -217,46 +133,45 @@ order by value.

This is the second value returned by torch_sort. See its documentation for the exact semantics of this method.

+
-

Examples

-
if (torch_is_installed()) {
-
-a = torch_randn(c(4, 4))
-a
-torch_argsort(a, dim=1)
-}
-#> torch_tensor
-#>  1  1  3  3
-#>  2  2  1  1
-#>  4  3  2  2
-#>  3  4  4  4
-#> [ CPULongType{4,4} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+a = torch_randn(c(4, 4))
+a
+torch_argsort(a, dim=1)
+}
+#> torch_tensor
+#>  3  2  1  4
+#>  4  1  2  3
+#>  1  3  4  2
+#>  2  4  3  1
+#> [ CPULongType{4,4} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_as_strided.html b/dev/reference/torch_as_strided.html index d980bbf76..396edb6ac 100644 --- a/dev/reference/torch_as_strided.html +++ b/dev/reference/torch_as_strided.html @@ -1,79 +1,18 @@ - - - - - - - -As_strided — torch_as_strided • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -As_strided — torch_as_strided • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,90 +111,82 @@

As_strided

-
torch_as_strided(self, size, stride, storage_offset = NULL)
- -

Arguments

- - - - - - - - - - - - - - - - - - -
self

(Tensor) the input tensor.

size

(tuple or ints) the shape of the output tensor

stride

(tuple or ints) the stride of the output tensor

storage_offset

(int, optional) the offset in the underlying storage of the output tensor

- -

as_strided(input, size, stride, storage_offset=0) -> Tensor

+
+
torch_as_strided(self, size, stride, storage_offset = NULL)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
size
+

(tuple or ints) the shape of the output tensor

+
stride
+

(tuple or ints) the stride of the output tensor

+
storage_offset
+

(int, optional) the offset in the underlying storage of the output tensor

+
+
+

as_strided(input, size, stride, storage_offset=0) -> Tensor

Create a view of an existing torch_Tensor input with specified size, stride and storage_offset.

-

Warning

- +
+
+

Warning

More than one element of a created tensor may refer to a single memory location. As a result, in-place operations (especially ones that are vectorized) may result in incorrect behavior. If you need to write to -the tensors, please clone them first.

Many PyTorch functions, which return a view of a tensor, are internally
+the tensors, please clone them first.

Many PyTorch functions, which return a view of a tensor, are internally
 implemented with this function. Those functions, like
 `torch_Tensor.expand`, are easier to read and are therefore more
 advisable to use.
-
+
+
-

Examples

-
if (torch_is_installed()) {
-
-x = torch_randn(c(3, 3))
-x
-t = torch_as_strided(x, list(2, 2), list(1, 2))
-t
-t = torch_as_strided(x, list(2, 2), list(1, 2), 1)
-t
-}
-#> torch_tensor
-#>  0.4258  0.2849
-#> -0.7091 -0.0600
-#> [ CPUFloatType{2,2} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+x = torch_randn(c(3, 3))
+x
+t = torch_as_strided(x, list(2, 2), list(1, 2))
+t
+t = torch_as_strided(x, list(2, 2), list(1, 2), 1)
+t
+}
+#> torch_tensor
+#>  0.2001  0.7893
+#>  0.9597 -0.8947
+#> [ CPUFloatType{2,2} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_asin.html b/dev/reference/torch_asin.html index 73b16fafb..41de336fb 100644 --- a/dev/reference/torch_asin.html +++ b/dev/reference/torch_asin.html @@ -1,79 +1,18 @@ - - - - - - - -Asin — torch_asin • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Asin — torch_asin • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_asin(self)
- -

Arguments

- - - - - - -
self

(Tensor) the input tensor.

- -

asin(input, out=NULL) -> Tensor

+
+
torch_asin(self)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
+
+

asin(input, out=NULL) -> Tensor

@@ -209,46 +129,45 @@

$$ \mbox{out}_{i} = \sin^{-1}(\mbox{input}_{i}) $$

+
-

Examples

-
if (torch_is_installed()) {
-
-a = torch_randn(c(4))
-a
-torch_asin(a)
-}
-#> torch_tensor
-#>     nan
-#>  0.2758
-#> -0.0260
-#>     nan
-#> [ CPUFloatType{4} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+a = torch_randn(c(4))
+a
+torch_asin(a)
+}
+#> torch_tensor
+#>  0.2008
+#>     nan
+#>  0.0981
+#>  0.2174
+#> [ CPUFloatType{4} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_asinh.html b/dev/reference/torch_asinh.html index 0fc3269ce..4900c910b 100644 --- a/dev/reference/torch_asinh.html +++ b/dev/reference/torch_asinh.html @@ -1,79 +1,18 @@ - - - - - - - -Asinh — torch_asinh • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Asinh — torch_asinh • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_asinh(self)
- -

Arguments

- - - - - - -
self

(Tensor) the input tensor.

- -

asinh(input, *, out=None) -> Tensor

+
+
torch_asinh(self)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
+
+

asinh(input, *, out=None) -> Tensor

@@ -209,46 +129,45 @@

$$ \mbox{out}_{i} = \sinh^{-1}(\mbox{input}_{i}) $$

+
-

Examples

-
if (torch_is_installed()) {
-
-a <- torch_randn(c(4))
-a
-torch_asinh(a)
-}
-#> torch_tensor
-#>  0.7173
-#>  1.2948
-#> -0.5477
-#> -0.3671
-#> [ CPUFloatType{4} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+a <- torch_randn(c(4))
+a
+torch_asinh(a)
+}
+#> torch_tensor
+#> -0.8178
+#> -0.2430
+#>  0.6351
+#> -0.5750
+#> [ CPUFloatType{4} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_atan.html b/dev/reference/torch_atan.html index 74da035af..ab7ac5444 100644 --- a/dev/reference/torch_atan.html +++ b/dev/reference/torch_atan.html @@ -1,79 +1,18 @@ - - - - - - - -Atan — torch_atan • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Atan — torch_atan • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_atan(self)
- -

Arguments

- - - - - - -
self

(Tensor) the input tensor.

- -

atan(input, out=NULL) -> Tensor

+
+
torch_atan(self)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
+
+

atan(input, out=NULL) -> Tensor

@@ -209,46 +129,45 @@

$$ \mbox{out}_{i} = \tan^{-1}(\mbox{input}_{i}) $$

+
-

Examples

-
if (torch_is_installed()) {
-
-a = torch_randn(c(4))
-a
-torch_atan(a)
-}
-#> torch_tensor
-#> -0.5706
-#> -0.5375
-#>  0.9102
-#>  0.8680
-#> [ CPUFloatType{4} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+a = torch_randn(c(4))
+a
+torch_atan(a)
+}
+#> torch_tensor
+#> -0.1993
+#> -0.4418
+#>  0.1197
+#>  0.8482
+#> [ CPUFloatType{4} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_atan2.html b/dev/reference/torch_atan2.html index 856e56a16..be0665963 100644 --- a/dev/reference/torch_atan2.html +++ b/dev/reference/torch_atan2.html @@ -1,79 +1,18 @@ - - - - - - - -Atan2 — torch_atan2 • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Atan2 — torch_atan2 • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_atan2(self, other)
- -

Arguments

- - - - - - - - - - -
self

(Tensor) the first input tensor

other

(Tensor) the second input tensor

- -

atan2(input, other, out=NULL) -> Tensor

+
+
torch_atan2(self, other)
+
+
+

Arguments

+
self
+

(Tensor) the first input tensor

+
other
+

(Tensor) the second input tensor

+
+
+

atan2(input, other, out=NULL) -> Tensor

@@ -217,46 +135,45 @@ parameter, is the x-coordinate, while \(\mbox{input}_{i}\), the first parameter, is the y-coordinate.)

The shapes of input and other must be broadcastable .

+
-

Examples

-
if (torch_is_installed()) {
-
-a = torch_randn(c(4))
-a
-torch_atan2(a, torch_randn(c(4)))
-}
-#> torch_tensor
-#>  2.2546
-#>  2.0275
-#>  1.8975
-#> -3.0418
-#> [ CPUFloatType{4} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+a = torch_randn(c(4))
+a
+torch_atan2(a, torch_randn(c(4)))
+}
+#> torch_tensor
+#>  0.4798
+#>  0.4301
+#> -2.5647
+#> -0.8750
+#> [ CPUFloatType{4} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_atanh.html b/dev/reference/torch_atanh.html index 6f77804df..7ea3a1345 100644 --- a/dev/reference/torch_atanh.html +++ b/dev/reference/torch_atanh.html @@ -1,79 +1,18 @@ - - - - - - - -Atanh — torch_atanh • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Atanh — torch_atanh • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_atanh(self)
- -

Arguments

- - - - - - -
self

(Tensor) the input tensor.

- -

Note

+
+
torch_atanh(self)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
+
+

Note

The domain of the inverse hyperbolic tangent is (-1, 1) and values outside this range will be mapped to NaN, except for the values 1 and -1 for which the output is mapped to +/-INF respectively.

$$ \mbox{out}_{i} = \tanh^{-1}(\mbox{input}_{i}) $$

-

atanh(input, *, out=None) -> Tensor

- +
+
+

atanh(input, *, out=None) -> Tensor

Returns a new tensor with the inverse hyperbolic tangent of the elements of input.

+
-

Examples

-
if (torch_is_installed()) {
-
-a = torch_randn(c(4))$uniform_(-1, 1)
-a
-torch_atanh(a)
-}
-#> torch_tensor
-#>  0.6934
-#> -1.4547
-#> -0.2354
-#>  0.0969
-#> [ CPUFloatType{4} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+a = torch_randn(c(4))$uniform_(-1, 1)
+a
+torch_atanh(a)
+}
+#> torch_tensor
+#>  0.1630
+#> -0.3109
+#> -2.2191
+#>  0.4318
+#> [ CPUFloatType{4} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_atleast_1d.html b/dev/reference/torch_atleast_1d.html index a3d874a78..9984fe448 100644 --- a/dev/reference/torch_atleast_1d.html +++ b/dev/reference/torch_atleast_1d.html @@ -1,80 +1,19 @@ - - - - - - - -Atleast_1d — torch_atleast_1d • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Atleast_1d — torch_atleast_1d • torch - - - - - - - - + + -
-
- -
- -
+
@@ -191,67 +113,63 @@ Input tensors with one or more dimensions are returned as-is." /> Input tensors with one or more dimensions are returned as-is.

-
torch_atleast_1d(self)
- -

Arguments

- - - - - - -
self

(Tensor or list of Tensors)

- +
+
torch_atleast_1d(self)
+
-

Examples

-
if (torch_is_installed()) {
-
-x <- torch_randn(c(2))
-x
-torch_atleast_1d(x)
-x <- torch_tensor(1.)
-x
-torch_atleast_1d(x)
-x <- torch_tensor(0.5)
-y <- torch_tensor(1.)
-torch_atleast_1d(list(x,y))
-}
-#> [[1]]
-#> torch_tensor
-#>  0.5000
-#> [ CPUFloatType{1} ]
-#> 
-#> [[2]]
-#> torch_tensor
-#>  1
-#> [ CPUFloatType{1} ]
-#> 
-
+
+

Arguments

+
self
+

(Tensor or list of Tensors)

+
+ +
+

Examples

+
if (torch_is_installed()) {
+
+x <- torch_randn(c(2))
+x
+torch_atleast_1d(x)
+x <- torch_tensor(1.)
+x
+torch_atleast_1d(x)
+x <- torch_tensor(0.5)
+y <- torch_tensor(1.)
+torch_atleast_1d(list(x,y))
+}
+#> [[1]]
+#> torch_tensor
+#>  0.5000
+#> [ CPUFloatType{1} ]
+#> 
+#> [[2]]
+#> torch_tensor
+#>  1
+#> [ CPUFloatType{1} ]
+#> 
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_atleast_2d.html b/dev/reference/torch_atleast_2d.html index ba2614cc6..0ccc12328 100644 --- a/dev/reference/torch_atleast_2d.html +++ b/dev/reference/torch_atleast_2d.html @@ -1,80 +1,19 @@ - - - - - - - -Atleast_2d — torch_atleast_2d • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Atleast_2d — torch_atleast_2d • torch - - - - - - - - + + -
-
- -
- -
+
@@ -191,67 +113,63 @@ Input tensors with two or more dimensions are returned as-is." /> Input tensors with two or more dimensions are returned as-is.

-
torch_atleast_2d(self)
- -

Arguments

- - - - - - -
self

(Tensor or list of Tensors)

- +
+
torch_atleast_2d(self)
+
-

Examples

-
if (torch_is_installed()) {
-
-x <- torch_tensor(1.)
-x
-torch_atleast_2d(x)
-x <- torch_randn(c(2,2))
-x
-torch_atleast_2d(x)
-x <- torch_tensor(0.5)
-y <- torch_tensor(1.)
-torch_atleast_2d(list(x,y))
-}
-#> [[1]]
-#> torch_tensor
-#>  0.5000
-#> [ CPUFloatType{1,1} ]
-#> 
-#> [[2]]
-#> torch_tensor
-#>  1
-#> [ CPUFloatType{1,1} ]
-#> 
-
+
+

Arguments

+
self
+

(Tensor or list of Tensors)

+
+ +
+

Examples

+
if (torch_is_installed()) {
+
+x <- torch_tensor(1.)
+x
+torch_atleast_2d(x)
+x <- torch_randn(c(2,2))
+x
+torch_atleast_2d(x)
+x <- torch_tensor(0.5)
+y <- torch_tensor(1.)
+torch_atleast_2d(list(x,y))
+}
+#> [[1]]
+#> torch_tensor
+#>  0.5000
+#> [ CPUFloatType{1,1} ]
+#> 
+#> [[2]]
+#> torch_tensor
+#>  1
+#> [ CPUFloatType{1,1} ]
+#> 
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_atleast_3d.html b/dev/reference/torch_atleast_3d.html index 49880af52..ceac69c09 100644 --- a/dev/reference/torch_atleast_3d.html +++ b/dev/reference/torch_atleast_3d.html @@ -1,80 +1,19 @@ - - - - - - - -Atleast_3d — torch_atleast_3d • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Atleast_3d — torch_atleast_3d • torch - - - - - - + + - - -
-
- -
- -
+
@@ -191,43 +113,37 @@ Input tensors with three or more dimensions are returned as-is." /> Input tensors with three or more dimensions are returned as-is.

-
torch_atleast_3d(self)
- -

Arguments

- - - - - - -
self

(Tensor or list of Tensors)

+
+
torch_atleast_3d(self)
+
+
+

Arguments

+
self
+

(Tensor or list of Tensors)

+
+
-
- +
- - + + diff --git a/dev/reference/torch_avg_pool1d.html b/dev/reference/torch_avg_pool1d.html index 29f2c30d2..a8696710f 100644 --- a/dev/reference/torch_avg_pool1d.html +++ b/dev/reference/torch_avg_pool1d.html @@ -1,79 +1,18 @@ - - - - - - - -Avg_pool1d — torch_avg_pool1d • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Avg_pool1d — torch_avg_pool1d • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,78 +111,63 @@

Avg_pool1d

-
torch_avg_pool1d(
-  self,
-  kernel_size,
-  stride = list(),
-  padding = 0L,
-  ceil_mode = FALSE,
-  count_include_pad = TRUE
-)
- -

Arguments

- - - - - - - - - - - - - - - - - - - - - - - - - - -
self

input tensor of shape \((\mbox{minibatch} , \mbox{in\_channels} , iW)\)

kernel_size

the size of the window. Can be a single number or a tuple (kW,)

stride

the stride of the window. Can be a single number or a tuple (sW,). Default: kernel_size

padding

implicit zero paddings on both sides of the input. Can be a single number or a tuple (padW,). Default: 0

ceil_mode

when TRUE, will use ceil instead of floor to compute the output shape. Default: FALSE

count_include_pad

when TRUE, will include the zero-padding in the averaging calculation. Default: TRUE

- -

avg_pool1d(input, kernel_size, stride=NULL, padding=0, ceil_mode=FALSE, count_include_pad=TRUE) -> Tensor

+
+
torch_avg_pool1d(
+  self,
+  kernel_size,
+  stride = list(),
+  padding = 0L,
+  ceil_mode = FALSE,
+  count_include_pad = TRUE
+)
+
+
+

Arguments

+
self
+

input tensor of shape \((\mbox{minibatch} , \mbox{in\_channels} , iW)\)

+
kernel_size
+

the size of the window. Can be a single number or a tuple (kW,)

+
stride
+

the stride of the window. Can be a single number or a tuple (sW,). Default: kernel_size

+
padding
+

implicit zero paddings on both sides of the input. Can be a single number or a tuple (padW,). Default: 0

+
ceil_mode
+

when TRUE, will use ceil instead of floor to compute the output shape. Default: FALSE

+
count_include_pad
+

when TRUE, will include the zero-padding in the averaging calculation. Default: TRUE

+
+
+

avg_pool1d(input, kernel_size, stride=NULL, padding=0, ceil_mode=FALSE, count_include_pad=TRUE) -> Tensor

Applies a 1D average pooling over an input signal composed of several input planes.

-

See nn_avg_pool1d() for details and output shape.

+

See nn_avg_pool1d() for details and output shape.

+
+
-
- +
- - + + diff --git a/dev/reference/torch_baddbmm.html b/dev/reference/torch_baddbmm.html index eaecd9c15..fae63b416 100644 --- a/dev/reference/torch_baddbmm.html +++ b/dev/reference/torch_baddbmm.html @@ -1,79 +1,18 @@ - - - - - - - -Baddbmm — torch_baddbmm • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Baddbmm — torch_baddbmm • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_baddbmm(self, batch1, batch2, beta = 1L, alpha = 1L)
- -

Arguments

- - - - - - - - - - - - - - - - - - - - - - -
self

(Tensor) the tensor to be added

batch1

(Tensor) the first batch of matrices to be multiplied

batch2

(Tensor) the second batch of matrices to be multiplied

beta

(Number, optional) multiplier for input (\(\beta\))

alpha

(Number, optional) multiplier for \(\mbox{batch1} \mathbin{@} \mbox{batch2}\) (\(\alpha\))

- -

baddbmm(input, batch1, batch2, *, beta=1, alpha=1, out=NULL) -> Tensor

+
+
torch_baddbmm(self, batch1, batch2, beta = 1L, alpha = 1L)
+
+
+

Arguments

+
self
+

(Tensor) the tensor to be added

+
batch1
+

(Tensor) the first batch of matrices to be multiplied

+
batch2
+

(Tensor) the second batch of matrices to be multiplied

+
beta
+

(Number, optional) multiplier for input (\(\beta\))

+
alpha
+

(Number, optional) multiplier for \(\mbox{batch1} \mathbin{@} \mbox{batch2}\) (\(\alpha\))

+
+
+

baddbmm(input, batch1, batch2, *, beta=1, alpha=1, out=NULL) -> Tensor

@@ -237,74 +149,73 @@ same as the scaling factors used in torch_addbmm.

$$ For inputs of type FloatTensor or DoubleTensor, arguments beta and alpha must be real numbers, otherwise they should be integers.

+
-

Examples

-
if (torch_is_installed()) {
-
-M = torch_randn(c(10, 3, 5))
-batch1 = torch_randn(c(10, 3, 4))
-batch2 = torch_randn(c(10, 4, 5))
-torch_baddbmm(M, batch1, batch2)
-}
-#> torch_tensor
-#> (1,.,.) = 
-#>   4.3464 -0.4051  0.4696  0.2110  4.1729
-#>   2.1066 -0.9985 -0.9629  0.0291  1.8801
-#>  -0.6028  1.8406 -1.3645  0.1841 -0.5609
-#> 
-#> (2,.,.) = 
-#>  -0.1065  0.8978  0.9137 -1.0981 -0.0932
-#>  -1.0557  2.0460  5.1924 -1.9568  2.8678
-#>  -0.4578 -2.8497 -3.1706  4.5577 -0.7404
-#> 
-#> (3,.,.) = 
-#>   0.3946  1.2566  0.6208 -2.8887  0.4048
-#>   2.1199 -0.7715  3.0887 -6.8372  2.4818
-#>  -0.4372 -2.3157  0.9876  0.0002  1.2094
-#> 
-#> (4,.,.) = 
-#>  -3.5533 -0.4875  0.8294  1.2279  3.3800
-#>   1.2462 -1.4685  0.6320 -0.2946 -0.6690
-#>   1.0329  0.3516 -1.8146  0.8297 -0.7119
-#> 
-#> (5,.,.) = 
-#>   3.4987  2.0561 -0.2480  2.0030  0.6470
-#>  -0.9070  0.4882  0.3976 -1.1844  1.4144
-#>  -0.4725 -1.9061  3.4186 -1.2536  0.6809
-#> 
-#> (6,.,.) = 
-#>  -4.2958  0.3544  2.3612 -1.9604  0.6662
-#>   1.2806  0.9611 -3.1324  1.1374  2.4481
-#>  -1.3846  0.2244  0.3634 -0.1219  0.0915
-#> 
-#> ... [the output was truncated (use n=-1 to disable)]
-#> [ CPUFloatType{10,3,5} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+M = torch_randn(c(10, 3, 5))
+batch1 = torch_randn(c(10, 3, 4))
+batch2 = torch_randn(c(10, 4, 5))
+torch_baddbmm(M, batch1, batch2)
+}
+#> torch_tensor
+#> (1,.,.) = 
+#>  -2.6456 -1.5109 -4.0038  0.5978  5.2351
+#>   0.4636 -1.8890  0.2969 -4.1503 -2.7782
+#>  -0.7897 -1.4635 -4.0233 -3.2587  0.0264
+#> 
+#> (2,.,.) = 
+#>  -1.5407 -1.4278 -2.1220  3.7224 -3.4227
+#>   0.2850  1.4041  0.9306 -2.1612 -1.9094
+#>  -1.4091 -2.5417  1.2896  0.4374 -1.6743
+#> 
+#> (3,.,.) = 
+#>   1.7047 -2.8495 -0.2730  0.1837  0.8958
+#>   3.2721  1.4411 -4.6668  1.2510 -4.6568
+#>  -4.2487 -0.6997  0.4481 -1.8493  1.1994
+#> 
+#> (4,.,.) = 
+#>   2.5333 -1.7727  0.5164 -2.3464 -2.1124
+#>  -0.2756 -0.0301  2.4311 -1.0183  5.7782
+#>  -1.3856  6.1734 -0.3122  3.7483  1.2592
+#> 
+#> (5,.,.) = 
+#>   0.0220  0.2616  0.0148 -1.1699 -3.8855
+#>  -2.0172  1.7288  0.2708 -0.3954  3.8760
+#>  -0.1094  0.1998  0.3465 -0.5783 -1.6827
+#> 
+#> (6,.,.) = 
+#>   0.3194  1.3878 -2.0560  1.8844  3.1713
+#>  -2.0322  3.2651  0.5243  1.8287 -1.3876
+#>   0.5429  1.0187 -0.9298  1.9311  0.0935
+#> 
+#> ... [the output was truncated (use n=-1 to disable)]
+#> [ CPUFloatType{10,3,5} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_bartlett_window.html b/dev/reference/torch_bartlett_window.html index a8327b436..ee14bc3c1 100644 --- a/dev/reference/torch_bartlett_window.html +++ b/dev/reference/torch_bartlett_window.html @@ -1,79 +1,18 @@ - - - - - - - -Bartlett_window — torch_bartlett_window • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Bartlett_window — torch_bartlett_window • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,52 +111,41 @@

Bartlett_window

-
torch_bartlett_window(
-  window_length,
-  periodic = TRUE,
-  dtype = NULL,
-  layout = torch_strided(),
-  device = NULL,
-  requires_grad = FALSE
-)
- -

Arguments

- - - - - - - - - - - - - - - - - - - - - - - - - - -
window_length

(int) the size of returned window

periodic

(bool, optional) If TRUE, returns a window to be used as periodic function. If False, return a symmetric window.

dtype

(torch.dtype, optional) the desired data type of returned tensor. Default: if NULL, uses a global default (see torch_set_default_tensor_type). Only floating point types are supported.

layout

(torch.layout, optional) the desired layout of returned window tensor. Only torch_strided (dense layout) is supported.

device

(torch.device, optional) the desired device of returned tensor. Default: if NULL, uses the current device for the default tensor type (see torch_set_default_tensor_type). device will be the CPU for CPU tensor types and the current CUDA device for CUDA tensor types.

requires_grad

(bool, optional) If autograd should record operations on the returned tensor. Default: FALSE.

- -

Note

+
+
torch_bartlett_window(
+  window_length,
+  periodic = TRUE,
+  dtype = NULL,
+  layout = torch_strided(),
+  device = NULL,
+  requires_grad = FALSE
+)
+
+
+

Arguments

+
window_length
+

(int) the size of returned window

+
periodic
+

(bool, optional) If TRUE, returns a window to be used as periodic function. If False, return a symmetric window.

+
dtype
+

(torch.dtype, optional) the desired data type of returned tensor. Default: if NULL, uses a global default (see torch_set_default_tensor_type). Only floating point types are supported.

+
layout
+

(torch.layout, optional) the desired layout of returned window tensor. Only torch_strided (dense layout) is supported.

+
device
+

(torch.device, optional) the desired device of returned tensor. Default: if NULL, uses the current device for the default tensor type (see torch_set_default_tensor_type). device will be the CPU for CPU tensor types and the current CUDA device for CUDA tensor types.

+
requires_grad
+

(bool, optional) If autograd should record operations on the returned tensor. Default: FALSE.

+
+
+

Note

-
If `window_length` \eqn{=1}, the returned window contains a single value 1.
-
- -

bartlett_window(window_length, periodic=TRUE, dtype=NULL, layout=torch.strided, device=NULL, requires_grad=False) -> Tensor

+
If `window_length` \eqn{=1}, the returned window contains a single value 1.
+
+
+
+

bartlett_window(window_length, periodic=TRUE, dtype=NULL, layout=torch.strided, device=NULL, requires_grad=False) -> Tensor

@@ -255,32 +166,29 @@ ready to be used as a periodic window with functions like above formula is in fact \(\mbox{window\_length} + 1\). Also, we always have torch_bartlett_window(L, periodic=TRUE) equal to torch_bartlett_window(L + 1, periodic=False)[:-1]).

+
+
-
- +
- - + + diff --git a/dev/reference/torch_bernoulli.html b/dev/reference/torch_bernoulli.html index 728e4699c..0efa9fa6c 100644 --- a/dev/reference/torch_bernoulli.html +++ b/dev/reference/torch_bernoulli.html @@ -1,79 +1,18 @@ - - - - - - - -Bernoulli — torch_bernoulli • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Bernoulli — torch_bernoulli • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,29 +111,23 @@

Bernoulli

-
torch_bernoulli(self, p, generator = NULL)
- -

Arguments

- - - - - - - - - - - - - - -
self

(Tensor) the input tensor of probability values for the Bernoulli -distribution

p

(Number) a probability value. If p is passed than it's used instead of -the values in self tensor.

generator

(torch.Generator, optional) a pseudorandom number generator for sampling

- -

bernoulli(input, *, generator=NULL, out=NULL) -> Tensor

+
+
torch_bernoulli(self, p, generator = NULL)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor of probability values for the Bernoulli +distribution

+
p
+

(Number) a probability value. If p is passed than it's used instead of +the values in self tensor.

+
generator
+

(torch.Generator, optional) a pseudorandom number generator for sampling

+
+
+

bernoulli(input, *, generator=NULL, out=NULL) -> Tensor

@@ -230,49 +146,48 @@ The returned out tensor only has values 0 or 1 and is of the same shape as input.

out can have integral dtype, but input must have floating point dtype.

+
-

Examples

-
if (torch_is_installed()) {
-
-a = torch_empty(c(3, 3))$uniform_(0, 1)  # generate a uniform random matrix with range c(0, 1)
-a
-torch_bernoulli(a)
-a = torch_ones(c(3, 3)) # probability of drawing "1" is 1
-torch_bernoulli(a)
-a = torch_zeros(c(3, 3)) # probability of drawing "1" is 0
-torch_bernoulli(a)
-}
-#> torch_tensor
-#>  0  0  0
-#>  0  0  0
-#>  0  0  0
-#> [ CPUFloatType{3,3} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+a = torch_empty(c(3, 3))$uniform_(0, 1)  # generate a uniform random matrix with range c(0, 1)
+a
+torch_bernoulli(a)
+a = torch_ones(c(3, 3)) # probability of drawing "1" is 1
+torch_bernoulli(a)
+a = torch_zeros(c(3, 3)) # probability of drawing "1" is 0
+torch_bernoulli(a)
+}
+#> torch_tensor
+#>  0  0  0
+#>  0  0  0
+#>  0  0  0
+#> [ CPUFloatType{3,3} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_bincount.html b/dev/reference/torch_bincount.html index 84cde5638..eb6821309 100644 --- a/dev/reference/torch_bincount.html +++ b/dev/reference/torch_bincount.html @@ -1,79 +1,18 @@ - - - - - - - -Bincount — torch_bincount • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Bincount — torch_bincount • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,27 +111,21 @@

Bincount

-
torch_bincount(self, weights = list(), minlength = 0L)
- -

Arguments

- - - - - - - - - - - - - - -
self

(Tensor) 1-d int tensor

weights

(Tensor) optional, weight for each value in the input tensor. Should be of same size as input tensor.

minlength

(int) optional, minimum number of bins. Should be non-negative.

- -

bincount(input, weights=NULL, minlength=0) -> Tensor

+
+
torch_bincount(self, weights = list(), minlength = 0L)
+
+
+

Arguments

+
self
+

(Tensor) 1-d int tensor

+
weights
+

(Tensor) optional, weight for each value in the input tensor. Should be of same size as input tensor.

+
minlength
+

(int) optional, minimum number of bins. Should be non-negative.

+
+
+

bincount(input, weights=NULL, minlength=0) -> Tensor

@@ -222,50 +138,50 @@ tensor of size 0. If minlength is specified, the number of bins is out[n] += weights[i] if weights is specified else out[n] += 1.

.. include:: cuda_deterministic.rst

+
-

Examples

-
if (torch_is_installed()) {
-
-input = torch_randint(0, 8, list(5), dtype=torch_int64())
-weights = torch_linspace(0, 1, steps=5)
-input
-weights
-torch_bincount(input, weights)
-input$bincount(weights)
-}
-#> torch_tensor
-#>  0.0000
-#>  0.2500
-#>  0.0000
-#>  1.2500
-#>  1.0000
-#> [ CPUFloatType{5} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+input = torch_randint(0, 8, list(5), dtype=torch_int64())
+weights = torch_linspace(0, 1, steps=5)
+input
+weights
+torch_bincount(input, weights)
+input$bincount(weights)
+}
+#> torch_tensor
+#>  0.0000
+#>  0.5000
+#>  0.0000
+#>  0.0000
+#>  0.2500
+#>  1.7500
+#> [ CPUFloatType{6} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_bitwise_and.html b/dev/reference/torch_bitwise_and.html index 04c52c363..b20114a38 100644 --- a/dev/reference/torch_bitwise_and.html +++ b/dev/reference/torch_bitwise_and.html @@ -1,79 +1,18 @@ - - - - - - - -Bitwise_and — torch_bitwise_and • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Bitwise_and — torch_bitwise_and • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,54 +111,47 @@

Bitwise_and

-
torch_bitwise_and(self, other)
- -

Arguments

- - - - - - - - - - -
self

NA the first input tensor

other

NA the second input tensor

- -

bitwise_and(input, other, out=NULL) -> Tensor

+
+
torch_bitwise_and(self, other)
+
+
+

Arguments

+
self
+

NA the first input tensor

+
other
+

NA the second input tensor

+
+
+

bitwise_and(input, other, out=NULL) -> Tensor

Computes the bitwise AND of input and other. The input tensor must be of integral or Boolean types. For bool tensors, it computes the logical AND.

+
+
-
- +
- - + + diff --git a/dev/reference/torch_bitwise_not.html b/dev/reference/torch_bitwise_not.html index 7185ae028..85cea1672 100644 --- a/dev/reference/torch_bitwise_not.html +++ b/dev/reference/torch_bitwise_not.html @@ -1,79 +1,18 @@ - - - - - - - -Bitwise_not — torch_bitwise_not • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Bitwise_not — torch_bitwise_not • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,50 +111,45 @@

Bitwise_not

-
torch_bitwise_not(self)
- -

Arguments

- - - - - - -
self

(Tensor) the input tensor.

- -

bitwise_not(input, out=NULL) -> Tensor

+
+
torch_bitwise_not(self)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
+
+

bitwise_not(input, out=NULL) -> Tensor

Computes the bitwise NOT of the given input tensor. The input tensor must be of integral or Boolean types. For bool tensors, it computes the logical NOT.

+
+
-
- +
- - + + diff --git a/dev/reference/torch_bitwise_or.html b/dev/reference/torch_bitwise_or.html index e65736690..3383585c6 100644 --- a/dev/reference/torch_bitwise_or.html +++ b/dev/reference/torch_bitwise_or.html @@ -1,79 +1,18 @@ - - - - - - - -Bitwise_or — torch_bitwise_or • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Bitwise_or — torch_bitwise_or • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,54 +111,47 @@

Bitwise_or

-
torch_bitwise_or(self, other)
- -

Arguments

- - - - - - - - - - -
self

NA the first input tensor

other

NA the second input tensor

- -

bitwise_or(input, other, out=NULL) -> Tensor

+
+
torch_bitwise_or(self, other)
+
+
+

Arguments

+
self
+

NA the first input tensor

+
other
+

NA the second input tensor

+
+
+

bitwise_or(input, other, out=NULL) -> Tensor

Computes the bitwise OR of input and other. The input tensor must be of integral or Boolean types. For bool tensors, it computes the logical OR.

+
+
-
- +
- - + + diff --git a/dev/reference/torch_bitwise_xor.html b/dev/reference/torch_bitwise_xor.html index 86a986d80..f94fc7315 100644 --- a/dev/reference/torch_bitwise_xor.html +++ b/dev/reference/torch_bitwise_xor.html @@ -1,79 +1,18 @@ - - - - - - - -Bitwise_xor — torch_bitwise_xor • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Bitwise_xor — torch_bitwise_xor • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,54 +111,47 @@

Bitwise_xor

-
torch_bitwise_xor(self, other)
- -

Arguments

- - - - - - - - - - -
self

NA the first input tensor

other

NA the second input tensor

- -

bitwise_xor(input, other, out=NULL) -> Tensor

+
+
torch_bitwise_xor(self, other)
+
+
+

Arguments

+
self
+

NA the first input tensor

+
other
+

NA the second input tensor

+
+
+

bitwise_xor(input, other, out=NULL) -> Tensor

Computes the bitwise XOR of input and other. The input tensor must be of integral or Boolean types. For bool tensors, it computes the logical XOR.

+
+
-
- +
- - + + diff --git a/dev/reference/torch_blackman_window.html b/dev/reference/torch_blackman_window.html index f6bdbada2..099610453 100644 --- a/dev/reference/torch_blackman_window.html +++ b/dev/reference/torch_blackman_window.html @@ -1,79 +1,18 @@ - - - - - - - -Blackman_window — torch_blackman_window • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Blackman_window — torch_blackman_window • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,52 +111,41 @@

Blackman_window

-
torch_blackman_window(
-  window_length,
-  periodic = TRUE,
-  dtype = NULL,
-  layout = torch_strided(),
-  device = NULL,
-  requires_grad = FALSE
-)
- -

Arguments

- - - - - - - - - - - - - - - - - - - - - - - - - - -
window_length

(int) the size of returned window

periodic

(bool, optional) If TRUE, returns a window to be used as periodic function. If False, return a symmetric window.

dtype

(torch.dtype, optional) the desired data type of returned tensor. Default: if NULL, uses a global default (see torch_set_default_tensor_type). Only floating point types are supported.

layout

(torch.layout, optional) the desired layout of returned window tensor. Only torch_strided (dense layout) is supported.

device

(torch.device, optional) the desired device of returned tensor. Default: if NULL, uses the current device for the default tensor type (see torch_set_default_tensor_type). device will be the CPU for CPU tensor types and the current CUDA device for CUDA tensor types.

requires_grad

(bool, optional) If autograd should record operations on the returned tensor. Default: FALSE.

- -

Note

+
+
torch_blackman_window(
+  window_length,
+  periodic = TRUE,
+  dtype = NULL,
+  layout = torch_strided(),
+  device = NULL,
+  requires_grad = FALSE
+)
+
+
+

Arguments

+
window_length
+

(int) the size of returned window

+
periodic
+

(bool, optional) If TRUE, returns a window to be used as periodic function. If False, return a symmetric window.

+
dtype
+

(torch.dtype, optional) the desired data type of returned tensor. Default: if NULL, uses a global default (see torch_set_default_tensor_type). Only floating point types are supported.

+
layout
+

(torch.layout, optional) the desired layout of returned window tensor. Only torch_strided (dense layout) is supported.

+
device
+

(torch.device, optional) the desired device of returned tensor. Default: if NULL, uses the current device for the default tensor type (see torch_set_default_tensor_type). device will be the CPU for CPU tensor types and the current CUDA device for CUDA tensor types.

+
requires_grad
+

(bool, optional) If autograd should record operations on the returned tensor. Default: FALSE.

+
+
+

Note

-
If `window_length` \eqn{=1}, the returned window contains a single value 1.
-
- -

blackman_window(window_length, periodic=TRUE, dtype=NULL, layout=torch.strided, device=NULL, requires_grad=False) -> Tensor

+
If `window_length` \eqn{=1}, the returned window contains a single value 1.
+
+
+
+

blackman_window(window_length, periodic=TRUE, dtype=NULL, layout=torch.strided, device=NULL, requires_grad=False) -> Tensor

@@ -251,32 +162,29 @@ ready to be used as a periodic window with functions like above formula is in fact \(\mbox{window\_length} + 1\). Also, we always have torch_blackman_window(L, periodic=TRUE) equal to torch_blackman_window(L + 1, periodic=False)[:-1]).

+
+
-
- +
- - + + diff --git a/dev/reference/torch_block_diag.html b/dev/reference/torch_block_diag.html index ec0345d00..f671744ee 100644 --- a/dev/reference/torch_block_diag.html +++ b/dev/reference/torch_block_diag.html @@ -1,79 +1,18 @@ - - - - - - - -Block_diag — torch_block_diag • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Block_diag — torch_block_diag • torch - - - - - - + + - - -
-
- -
- -
+
@@ -189,66 +111,62 @@

Create a block diagonal matrix from provided tensors.

-
torch_block_diag(tensors)
- -

Arguments

- - - - - - -
tensors

(list of tensors) One or more tensors with 0, 1, or 2 -dimensions.

- - -

Examples

-
if (torch_is_installed()) {
-
-A <- torch_tensor(rbind(c(0, 1), c(1, 0)))
-B <- torch_tensor(rbind(c(3, 4, 5), c(6, 7, 8)))
-C <- torch_tensor(7)
-D <- torch_tensor(c(1, 2, 3))
-E <- torch_tensor(rbind(4, 5, 6))
-torch_block_diag(list(A, B, C, D, E))
-}
-#> torch_tensor
-#>  0  1  0  0  0  0  0  0  0  0
-#>  1  0  0  0  0  0  0  0  0  0
-#>  0  0  3  4  5  0  0  0  0  0
-#>  0  0  6  7  8  0  0  0  0  0
-#>  0  0  0  0  0  7  0  0  0  0
-#>  0  0  0  0  0  0  1  2  3  0
-#>  0  0  0  0  0  0  0  0  0  4
-#>  0  0  0  0  0  0  0  0  0  5
-#>  0  0  0  0  0  0  0  0  0  6
-#> [ CPUFloatType{9,10} ]
-
+
+
torch_block_diag(tensors)
+
+ +
+

Arguments

+
tensors
+

(list of tensors) One or more tensors with 0, 1, or 2 +dimensions.

+
+ +
+

Examples

+
if (torch_is_installed()) {
+
+A <- torch_tensor(rbind(c(0, 1), c(1, 0)))
+B <- torch_tensor(rbind(c(3, 4, 5), c(6, 7, 8)))
+C <- torch_tensor(7)
+D <- torch_tensor(c(1, 2, 3))
+E <- torch_tensor(rbind(4, 5, 6))
+torch_block_diag(list(A, B, C, D, E))
+}
+#> torch_tensor
+#>  0  1  0  0  0  0  0  0  0  0
+#>  1  0  0  0  0  0  0  0  0  0
+#>  0  0  3  4  5  0  0  0  0  0
+#>  0  0  6  7  8  0  0  0  0  0
+#>  0  0  0  0  0  7  0  0  0  0
+#>  0  0  0  0  0  0  1  2  3  0
+#>  0  0  0  0  0  0  0  0  0  4
+#>  0  0  0  0  0  0  0  0  0  5
+#>  0  0  0  0  0  0  0  0  0  6
+#> [ CPUFloatType{9,10} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_bmm.html b/dev/reference/torch_bmm.html index c3ef5606f..d5170653c 100644 --- a/dev/reference/torch_bmm.html +++ b/dev/reference/torch_bmm.html @@ -1,79 +1,18 @@ - - - - - - - -Bmm — torch_bmm • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Bmm — torch_bmm • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_bmm(self, mat2)
- -

Arguments

- - - - - - - - - - -
self

(Tensor) the first batch of matrices to be multiplied

mat2

(Tensor) the second batch of matrices to be multiplied

- -

Note

+
+
torch_bmm(self, mat2)
+
+
+

Arguments

+
self
+

(Tensor) the first batch of matrices to be multiplied

+
mat2
+

(Tensor) the second batch of matrices to be multiplied

+
+
+

Note

This function does not broadcast . -For broadcasting matrix products, see torch_matmul.

-

bmm(input, mat2, out=NULL) -> Tensor

- +For broadcasting matrix products, see torch_matmul.

+
+
+

bmm(input, mat2, out=NULL) -> Tensor

@@ -223,74 +142,73 @@ the same number of matrices.

$$ \mbox{out}_i = \mbox{input}_i \mathbin{@} \mbox{mat2}_i $$

+
-

Examples

-
if (torch_is_installed()) {
-
-input = torch_randn(c(10, 3, 4))
-mat2 = torch_randn(c(10, 4, 5))
-res = torch_bmm(input, mat2)
-res
-}
-#> torch_tensor
-#> (1,.,.) = 
-#>   4.7101  1.2719  1.2553 -1.8853 -1.0864
-#>   2.4834  0.9094 -1.2402  1.1361 -1.1803
-#>   3.1523  1.0687 -0.0883 -1.2969 -2.8504
-#> 
-#> (2,.,.) = 
-#>  -0.8574  2.7700 -2.4213 -0.7642 -0.5478
-#>   0.5348 -1.7877 -0.2510  0.6889  1.0793
-#>  -0.8720 -2.0425  0.3504  0.2370 -1.0926
-#> 
-#> (3,.,.) = 
-#>  -1.0773 -2.7929 -1.8812 -1.1311 -0.3457
-#>  -4.0041 -1.8878  0.1238 -0.1811  2.0995
-#>   3.1337  0.3895 -0.4637  1.8006 -4.2420
-#> 
-#> (4,.,.) = 
-#>   2.8617  2.8683  4.6492  3.4233  2.7582
-#>   2.5538  1.2732  4.5067 -0.0615 -0.6925
-#>   1.3528  0.8462  0.9483 -2.7502 -2.6945
-#> 
-#> (5,.,.) = 
-#>  -0.5374  0.9753 -1.5163  1.1165  4.5170
-#>   0.3424  0.0067  1.0019  1.2782 -1.2151
-#>   0.6167 -1.8804  0.9421 -2.2355 -5.0822
-#> 
-#> (6,.,.) = 
-#>   1.6531  0.7906  0.3333  1.3987  0.2642
-#>   3.2508  2.9889  2.0874 -1.7649  1.2378
-#>  -4.3740 -2.3497 -1.6982 -1.0726 -2.4815
-#> 
-#> ... [the output was truncated (use n=-1 to disable)]
-#> [ CPUFloatType{10,3,5} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+input = torch_randn(c(10, 3, 4))
+mat2 = torch_randn(c(10, 4, 5))
+res = torch_bmm(input, mat2)
+res
+}
+#> torch_tensor
+#> (1,.,.) = 
+#>  -1.1804  2.4008  1.2972 -1.2609  0.2916
+#>  -1.2435  1.7476 -0.0375  0.5632  0.8524
+#>  -0.2906  2.7009  1.5216  2.0198  0.8757
+#> 
+#> (2,.,.) = 
+#>   0.6727  0.5568 -3.1894 -4.0757 -1.5135
+#>   0.1410 -0.6714 -1.0290 -0.5648  0.8848
+#>  -0.1977  2.5337  1.3466 -2.0314 -3.1292
+#> 
+#> (3,.,.) = 
+#>  -1.8371 -0.0734  1.1069  1.8448  0.6464
+#>   3.1013  4.1337  0.6627 -0.7050 -1.3699
+#>   3.6031 -0.6864 -1.5408 -0.8107 -2.9430
+#> 
+#> (4,.,.) = 
+#>   1.1189 -2.2202  0.7229 -0.8875  2.6842
+#>  -1.2592  2.6973 -1.1588  0.7857 -3.7787
+#>   3.8589  5.3162  3.1421 -1.5760 -2.9945
+#> 
+#> (5,.,.) = 
+#>   0.7197  2.7396 -4.3375 -0.6431  6.7907
+#>  -1.1321 -1.2566  1.9878 -0.9290 -1.4026
+#>   2.0956  0.8502 -3.1667  1.3219  4.3534
+#> 
+#> (6,.,.) = 
+#>   0.9372 -1.8218  1.2632 -1.2736 -0.8857
+#>  -0.7833  0.2500  1.1682 -1.2441  0.1772
+#>   0.5542  1.9554 -1.3445  2.8310  3.1771
+#> 
+#> ... [the output was truncated (use n=-1 to disable)]
+#> [ CPUFloatType{10,3,5} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_broadcast_tensors.html b/dev/reference/torch_broadcast_tensors.html index 8b63cd73e..66329a362 100644 --- a/dev/reference/torch_broadcast_tensors.html +++ b/dev/reference/torch_broadcast_tensors.html @@ -1,79 +1,18 @@ - - - - - - - -Broadcast_tensors — torch_broadcast_tensors • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Broadcast_tensors — torch_broadcast_tensors • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,63 +111,60 @@

Broadcast_tensors

-
torch_broadcast_tensors(tensors)
- -

Arguments

- - - - - - -
tensors

a list containing any number of tensors of the same type

- -

broadcast_tensors(tensors) -> List of Tensors

+
+
torch_broadcast_tensors(tensors)
+
+
+

Arguments

+
tensors
+

a list containing any number of tensors of the same type

+
+
+

broadcast_tensors(tensors) -> List of Tensors

Broadcasts the given tensors according to broadcasting-semantics.

+
-

Examples

-
if (torch_is_installed()) {
-
-x = torch_arange(0, 3)$view(c(1, 4))
-y = torch_arange(0, 2)$view(c(3, 1))
-out = torch_broadcast_tensors(list(x, y))
-out[[1]]
-}
-#> torch_tensor
-#>  0  1  2  3
-#>  0  1  2  3
-#>  0  1  2  3
-#> [ CPUFloatType{3,4} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+x = torch_arange(0, 3)$view(c(1, 4))
+y = torch_arange(0, 2)$view(c(3, 1))
+out = torch_broadcast_tensors(list(x, y))
+out[[1]]
+}
+#> torch_tensor
+#>  0  1  2  3
+#>  0  1  2  3
+#>  0  1  2  3
+#> [ CPUFloatType{3,4} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_bucketize.html b/dev/reference/torch_bucketize.html index 54a83452e..653e41e8e 100644 --- a/dev/reference/torch_bucketize.html +++ b/dev/reference/torch_bucketize.html @@ -1,79 +1,18 @@ - - - - - - - -Bucketize — torch_bucketize • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Bucketize — torch_bucketize • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,85 +111,76 @@

Bucketize

-
torch_bucketize(self, boundaries, out_int32 = FALSE, right = FALSE)
+
+
torch_bucketize(self, boundaries, out_int32 = FALSE, right = FALSE)
+
-

Arguments

- - - - - - - - - - - - - - - - - - -
self

(Tensor or Scalar) N-D tensor or a Scalar containing the search value(s).

boundaries

(Tensor) 1-D tensor, must contain a monotonically increasing sequence.

out_int32

(bool, optional) – indicate the output data type. torch_int32() -if True, torch_int64() otherwise. Default value is FALSE, i.e. default output -data type is torch_int64().

right

(bool, optional) – if False, return the first suitable location +

+

Arguments

+
self
+

(Tensor or Scalar) N-D tensor or a Scalar containing the search value(s).

+
boundaries
+

(Tensor) 1-D tensor, must contain a monotonically increasing sequence.

+
out_int32
+

(bool, optional) – indicate the output data type. torch_int32() +if True, torch_int64() otherwise. Default value is FALSE, i.e. default output +data type is torch_int64().

+
right
+

(bool, optional) – if False, return the first suitable location that is found. If True, return the last such index. If no suitable index found, return 0 for non-numerical value (eg. nan, inf) or the size of boundaries (one pass the last index). In other words, if False, gets the lower bound index for each value in input from boundaries. If True, gets the upper bound index -instead. Default value is False.

- -

bucketize(input, boundaries, *, out_int32=FALSE, right=FALSE, out=None) -> Tensor

- +instead. Default value is False.

+
+
+

bucketize(input, boundaries, *, out_int32=FALSE, right=FALSE, out=None) -> Tensor

Returns the indices of the buckets to which each value in the input belongs, where the boundaries of the buckets are set by boundaries. Return a new tensor with the same size as input. If right is FALSE (default), then the left boundary is closed.

+
-

Examples

-
if (torch_is_installed()) {
-
-boundaries <- torch_tensor(c(1, 3, 5, 7, 9))
-boundaries
-v <- torch_tensor(rbind(c(3, 6, 9), c(3, 6, 9)))
-v
-torch_bucketize(v, boundaries)
-torch_bucketize(v, boundaries, right=TRUE)
-}
-#> torch_tensor
-#>  2  3  5
-#>  2  3  5
-#> [ CPULongType{2,3} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+boundaries <- torch_tensor(c(1, 3, 5, 7, 9))
+boundaries
+v <- torch_tensor(rbind(c(3, 6, 9), c(3, 6, 9)))
+v
+torch_bucketize(v, boundaries)
+torch_bucketize(v, boundaries, right=TRUE)
+}
+#> torch_tensor
+#>  2  3  5
+#>  2  3  5
+#> [ CPULongType{2,3} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_can_cast.html b/dev/reference/torch_can_cast.html index 10cd9721d..7a76b20b2 100644 --- a/dev/reference/torch_can_cast.html +++ b/dev/reference/torch_can_cast.html @@ -1,79 +1,18 @@ - - - - - - - -Can_cast — torch_can_cast • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Can_cast — torch_can_cast • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,62 +111,57 @@

Can_cast

-
torch_can_cast(from, to)
- -

Arguments

- - - - - - - - - - -
from

(dtype) The original torch_dtype.

to

(dtype) The target torch_dtype.

- -

can_cast(from, to) -> bool

+
+
torch_can_cast(from, to)
+
+
+

Arguments

+
from
+

(dtype) The original torch_dtype.

+
to
+

(dtype) The target torch_dtype.

+
+
+

can_cast(from, to) -> bool

Determines if a type conversion is allowed under PyTorch casting rules described in the type promotion documentation .

+
-

Examples

-
if (torch_is_installed()) {
-
-torch_can_cast(torch_double(), torch_float())
-torch_can_cast(torch_float(), torch_int())
-}
-#> [1] FALSE
-
+
+

Examples

+
if (torch_is_installed()) {
+
+torch_can_cast(torch_double(), torch_float())
+torch_can_cast(torch_float(), torch_int())
+}
+#> [1] FALSE
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_cartesian_prod.html b/dev/reference/torch_cartesian_prod.html index 52283da58..3ac605005 100644 --- a/dev/reference/torch_cartesian_prod.html +++ b/dev/reference/torch_cartesian_prod.html @@ -1,79 +1,18 @@ - - - - - - - -Cartesian_prod — torch_cartesian_prod • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Cartesian_prod — torch_cartesian_prod • torch - - - - - - + + - - -
-
- -
- -
+
@@ -189,61 +111,57 @@

Do cartesian product of the given sequence of tensors.

-
torch_cartesian_prod(tensors)
- -

Arguments

- - - - - - -
tensors

a list containing any number of 1 dimensional tensors.

- - -

Examples

-
if (torch_is_installed()) {
-
-a = c(1, 2, 3)
-b = c(4, 5)
-tensor_a = torch_tensor(a)
-tensor_b = torch_tensor(b)
-torch_cartesian_prod(list(tensor_a, tensor_b))
-}
-#> torch_tensor
-#>  1  4
-#>  1  5
-#>  2  4
-#>  2  5
-#>  3  4
-#>  3  5
-#> [ CPUFloatType{6,2} ]
-
+
+
torch_cartesian_prod(tensors)
+
+ +
+

Arguments

+
tensors
+

a list containing any number of 1 dimensional tensors.

+
+ +
+

Examples

+
if (torch_is_installed()) {
+
+a = c(1, 2, 3)
+b = c(4, 5)
+tensor_a = torch_tensor(a)
+tensor_b = torch_tensor(b)
+torch_cartesian_prod(list(tensor_a, tensor_b))
+}
+#> torch_tensor
+#>  1  4
+#>  1  5
+#>  2  4
+#>  2  5
+#>  3  4
+#>  3  5
+#> [ CPUFloatType{6,2} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_cat.html b/dev/reference/torch_cat.html index 91dabdbea..e9d03a701 100644 --- a/dev/reference/torch_cat.html +++ b/dev/reference/torch_cat.html @@ -1,79 +1,18 @@ - - - - - - - -Cat — torch_cat • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Cat — torch_cat • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_cat(tensors, dim = 1L)
- -

Arguments

- - - - - - - - - - -
tensors

(sequence of Tensors) any python sequence of tensors of the same type. Non-empty tensors provided must have the same shape, except in the cat dimension.

dim

(int, optional) the dimension over which the tensors are concatenated

- -

cat(tensors, dim=0, out=NULL) -> Tensor

+
+
torch_cat(tensors, dim = 1L)
+
+
+

Arguments

+
tensors
+

(sequence of Tensors) any python sequence of tensors of the same type. Non-empty tensors provided must have the same shape, except in the cat dimension.

+
dim
+

(int, optional) the dimension over which the tensors are concatenated

+
+
+

cat(tensors, dim=0, out=NULL) -> Tensor

Concatenates the given sequence of seq tensors in the given dimension. All tensors must either have the same shape (except in the concatenating dimension) or be empty.

-

torch_cat can be seen as an inverse operation for torch_split() -and torch_chunk.

+

torch_cat can be seen as an inverse operation for torch_split() +and torch_chunk.

torch_cat can be best understood via examples.

+
-

Examples

-
if (torch_is_installed()) {
-
-x = torch_randn(c(2, 3))
-x
-torch_cat(list(x, x, x), 1)
-torch_cat(list(x, x, x), 2)
-}
-#> torch_tensor
-#>  0.8514 -1.2676 -0.3305  0.8514 -1.2676 -0.3305  0.8514 -1.2676 -0.3305
-#> -1.1066  3.2175 -1.0893 -1.1066  3.2175 -1.0893 -1.1066  3.2175 -1.0893
-#> [ CPUFloatType{2,9} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+x = torch_randn(c(2, 3))
+x
+torch_cat(list(x, x, x), 1)
+torch_cat(list(x, x, x), 2)
+}
+#> torch_tensor
+#> -0.7550  1.0633  0.2062 -0.7550  1.0633  0.2062 -0.7550  1.0633  0.2062
+#>  0.6587 -1.1408  1.6991  0.6587 -1.1408  1.6991  0.6587 -1.1408  1.6991
+#> [ CPUFloatType{2,9} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_cdist.html b/dev/reference/torch_cdist.html index 301b15958..78fa271cb 100644 --- a/dev/reference/torch_cdist.html +++ b/dev/reference/torch_cdist.html @@ -1,79 +1,18 @@ - - - - - - - -Cdist — torch_cdist • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Cdist — torch_cdist • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_cdist(x1, x2, p = 2L, compute_mode = NULL)
- -

Arguments

- - - - - - - - - - - - - - - - - - -
x1

(Tensor) input tensor of shape \(B \times P \times M\).

x2

(Tensor) input tensor of shape \(B \times R \times M\).

p

NA p value for the p-norm distance to calculate between each vector pair \(\in [0, \infty]\).

compute_mode

NA 'use_mm_for_euclid_dist_if_necessary' - will use matrix multiplication approach to calculate euclidean distance (p = 2) if P > 25 or R > 25 'use_mm_for_euclid_dist' - will always use matrix multiplication approach to calculate euclidean distance (p = 2) 'donot_use_mm_for_euclid_dist' - will never use matrix multiplication approach to calculate euclidean distance (p = 2) Default: use_mm_for_euclid_dist_if_necessary.

- -

TEST

+
+
torch_cdist(x1, x2, p = 2L, compute_mode = NULL)
+
+
+

Arguments

+
x1
+

(Tensor) input tensor of shape \(B \times P \times M\).

+
x2
+

(Tensor) input tensor of shape \(B \times R \times M\).

+
p
+

NA p value for the p-norm distance to calculate between each vector pair \(\in [0, \infty]\).

+
compute_mode
+

NA 'use_mm_for_euclid_dist_if_necessary' - will use matrix multiplication approach to calculate euclidean distance (p = 2) if P > 25 or R > 25 'use_mm_for_euclid_dist' - will always use matrix multiplication approach to calculate euclidean distance (p = 2) 'donot_use_mm_for_euclid_dist' - will never use matrix multiplication approach to calculate euclidean distance (p = 2) Default: use_mm_for_euclid_dist_if_necessary.

+
+
+

TEST

Computes batched the p-norm distance between each pair of the two collections of row vectors.

+
+
-
- +
- - + + diff --git a/dev/reference/torch_ceil.html b/dev/reference/torch_ceil.html index 13675e44c..0fe239bd2 100644 --- a/dev/reference/torch_ceil.html +++ b/dev/reference/torch_ceil.html @@ -1,79 +1,18 @@ - - - - - - - -Ceil — torch_ceil • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Ceil — torch_ceil • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_ceil(self)
- -

Arguments

- - - - - - -
self

(Tensor) the input tensor.

- -

ceil(input, out=NULL) -> Tensor

+
+
torch_ceil(self)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
+
+

ceil(input, out=NULL) -> Tensor

@@ -210,46 +130,45 @@ the smallest integer greater than or equal to each element.

$$ \mbox{out}_{i} = \left\lceil \mbox{input}_{i} \right\rceil = \left\lfloor \mbox{input}_{i} \right\rfloor + 1 $$

+
-

Examples

-
if (torch_is_installed()) {
-
-a = torch_randn(c(4))
-a
-torch_ceil(a)
-}
-#> torch_tensor
-#> -0
-#>  1
-#> -0
-#>  1
-#> [ CPUFloatType{4} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+a = torch_randn(c(4))
+a
+torch_ceil(a)
+}
+#> torch_tensor
+#>  2
+#>  1
+#> -1
+#>  1
+#> [ CPUFloatType{4} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_celu.html b/dev/reference/torch_celu.html index f2084c5ba..58f1deb55 100644 --- a/dev/reference/torch_celu.html +++ b/dev/reference/torch_celu.html @@ -1,79 +1,18 @@ - - - - - - - -Celu — torch_celu • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Celu — torch_celu • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,53 +111,46 @@

Celu

-
torch_celu(self, alpha = 1)
- -

Arguments

- - - - - - - - - - -
self

the input tensor

alpha

the alpha value for the CELU formulation. Default: 1.0

- -

celu(input, alpha=1.) -> Tensor

+
+
torch_celu(self, alpha = 1)
+
+
+

Arguments

+
self
+

the input tensor

+
alpha
+

the alpha value for the CELU formulation. Default: 1.0

+
+
+

celu(input, alpha=1.) -> Tensor

-

See nnf_celu() for more info.

+

See nnf_celu() for more info.

+
+
-
- +
- - + + diff --git a/dev/reference/torch_celu_.html b/dev/reference/torch_celu_.html index 68c23430e..a970c14bb 100644 --- a/dev/reference/torch_celu_.html +++ b/dev/reference/torch_celu_.html @@ -1,79 +1,18 @@ - - - - - - - -Celu_ — torch_celu_ • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Celu_ — torch_celu_ • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_celu_(self, alpha = 1)
- -

Arguments

- - - - - - - - - - -
self

the input tensor

alpha

the alpha value for the CELU formulation. Default: 1.0

- -

celu_(input, alpha=1.) -> Tensor

+
+
torch_celu_(self, alpha = 1)
+
+
+

Arguments

+
self
+

the input tensor

+
alpha
+

the alpha value for the CELU formulation. Default: 1.0

+
+
+

celu_(input, alpha=1.) -> Tensor

-

In-place version of torch_celu().

+

In-place version of torch_celu().

+
+
-
- +
- - + + diff --git a/dev/reference/torch_chain_matmul.html b/dev/reference/torch_chain_matmul.html index 67b0acfd1..4101420f4 100644 --- a/dev/reference/torch_chain_matmul.html +++ b/dev/reference/torch_chain_matmul.html @@ -1,79 +1,18 @@ - - - - - - - -Chain_matmul — torch_chain_matmul • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Chain_matmul — torch_chain_matmul • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,19 +111,17 @@

Chain_matmul

-
torch_chain_matmul(matrices)
- -

Arguments

- - - - - - -
matrices

(Tensors...) a sequence of 2 or more 2-D tensors whose product is to be determined.

- -

TEST

+
+
torch_chain_matmul(matrices)
+
+
+

Arguments

+
matrices
+

(Tensors...) a sequence of 2 or more 2-D tensors whose product is to be determined.

+
+
+

TEST

@@ -210,47 +130,46 @@ using the matrix chain order algorithm which selects the order in which incurs t of arithmetic operations ([CLRS]_). Note that since this is a function to compute the product, \(N\) needs to be greater than or equal to 2; if equal to 2 then a trivial matrix-matrix product is returned. If \(N\) is 1, then this is a no-op - the original matrix is returned as is.

+
-

Examples

-
if (torch_is_installed()) {
-
-a = torch_randn(c(3, 4))
-b = torch_randn(c(4, 5))
-c = torch_randn(c(5, 6))
-d = torch_randn(c(6, 7))
-torch_chain_matmul(list(a, b, c, d))
-}
-#> torch_tensor
-#> -0.3777 -1.4092  1.5154  2.9518  7.8162 -2.8613 -5.8090
-#>  0.1198  1.7039  0.5408 -2.5631 -0.6127  7.7041  0.5558
-#>  0.2350  1.0389 -0.9496 -1.8136 -1.8948  1.8337  1.1657
-#> [ CPUFloatType{3,7} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+a = torch_randn(c(3, 4))
+b = torch_randn(c(4, 5))
+c = torch_randn(c(5, 6))
+d = torch_randn(c(6, 7))
+torch_chain_matmul(list(a, b, c, d))
+}
+#> torch_tensor
+#>   3.8934  10.6934  -7.2619   2.5499  -5.0013  -2.2418  -7.6920
+#>   0.3776  21.6973  16.8113   0.2529  -2.8479  22.2058 -20.9102
+#>  -3.9659   7.1272  16.7742  -6.1935  14.3516   4.0720   1.1775
+#> [ CPUFloatType{3,7} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_channel_shuffle.html b/dev/reference/torch_channel_shuffle.html index 441c7ba3e..2a75ba9e7 100644 --- a/dev/reference/torch_channel_shuffle.html +++ b/dev/reference/torch_channel_shuffle.html @@ -1,79 +1,18 @@ - - - - - - - -Channel_shuffle — torch_channel_shuffle • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Channel_shuffle — torch_channel_shuffle • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,96 +111,91 @@

Channel_shuffle

-
torch_channel_shuffle(self, groups)
- -

Arguments

- - - - - - - - - - -
self

(Tensor) the input tensor

groups

(int) number of groups to divide channels in and rearrange.

- -

Divide the channels in a tensor of shape

+
+
torch_channel_shuffle(self, groups)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor

+
groups
+

(int) number of groups to divide channels in and rearrange.

+
+
+

Divide the channels in a tensor of shape

math:(*, C , H, W) :

Divide the channels in a tensor of shape \((*, C , H, W)\) into g groups and rearrange them as \((*, C \frac g, g, H, W)\), while keeping the original tensor shape.

+
-

Examples

-
if (torch_is_installed()) {
-
-input <- torch_randn(c(1, 4, 2, 2))
-print(input)
-output <- torch_channel_shuffle(input, 2)
-print(output)
-}
-#> torch_tensor
-#> (1,1,.,.) = 
-#>   0.0759  0.7033
-#>   1.7052 -0.9880
-#> 
-#> (1,2,.,.) = 
-#>  -1.1317  0.2770
-#>   0.0039  0.0861
-#> 
-#> (1,3,.,.) = 
-#>  -0.1417 -0.8457
-#>  -1.4147 -1.0284
-#> 
-#> (1,4,.,.) = 
-#>  -0.3633 -0.0816
-#>  -2.5159 -1.0359
-#> [ CPUFloatType{1,4,2,2} ]
-#> torch_tensor
-#> (1,1,.,.) = 
-#>   0.0759  0.7033
-#>   1.7052 -0.9880
-#> 
-#> (1,2,.,.) = 
-#>  -0.1417 -0.8457
-#>  -1.4147 -1.0284
-#> 
-#> (1,3,.,.) = 
-#>  -1.1317  0.2770
-#>   0.0039  0.0861
-#> 
-#> (1,4,.,.) = 
-#>  -0.3633 -0.0816
-#>  -2.5159 -1.0359
-#> [ CPUFloatType{1,4,2,2} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+input <- torch_randn(c(1, 4, 2, 2))
+print(input)
+output <- torch_channel_shuffle(input, 2)
+print(output)
+}
+#> torch_tensor
+#> (1,1,.,.) = 
+#>  -0.6117  2.5418
+#>  -0.0918  1.6715
+#> 
+#> (1,2,.,.) = 
+#>  -0.9030  0.4923
+#>  -0.1221  0.5425
+#> 
+#> (1,3,.,.) = 
+#>  -1.0168  1.2916
+#>   1.4654 -0.1773
+#> 
+#> (1,4,.,.) = 
+#>  -1.0663 -0.2279
+#>   0.1211 -0.3612
+#> [ CPUFloatType{1,4,2,2} ]
+#> torch_tensor
+#> (1,1,.,.) = 
+#>  -0.6117  2.5418
+#>  -0.0918  1.6715
+#> 
+#> (1,2,.,.) = 
+#>  -1.0168  1.2916
+#>   1.4654 -0.1773
+#> 
+#> (1,3,.,.) = 
+#>  -0.9030  0.4923
+#>  -0.1221  0.5425
+#> 
+#> (1,4,.,.) = 
+#>  -1.0663 -0.2279
+#>   0.1211 -0.3612
+#> [ CPUFloatType{1,4,2,2} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_cholesky.html b/dev/reference/torch_cholesky.html index 46a2f1e53..bfad62cdd 100644 --- a/dev/reference/torch_cholesky.html +++ b/dev/reference/torch_cholesky.html @@ -1,79 +1,18 @@ - - - - - - - -Cholesky — torch_cholesky • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Cholesky — torch_cholesky • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,25 +111,21 @@

Cholesky

-
torch_cholesky(self, upper = FALSE)
- -

Arguments

- - - - - - - - - - -
self

(Tensor) the input tensor \(A\) of size \((*, n, n)\) where * is zero or more -batch dimensions consisting of symmetric positive-definite matrices.

upper

(bool, optional) flag that indicates whether to return a -upper or lower triangular matrix. Default: FALSE

- -

cholesky(input, upper=False, out=NULL) -> Tensor

+
+
torch_cholesky(self, upper = FALSE)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor \(A\) of size \((*, n, n)\) where * is zero or more +batch dimensions consisting of symmetric positive-definite matrices.

+
upper
+

(bool, optional) flag that indicates whether to return a +upper or lower triangular matrix. Default: FALSE

+
+
+

cholesky(input, upper=False, out=NULL) -> Tensor

@@ -228,50 +146,49 @@ matrices, then the returned tensor will be composed of upper-triangular Cholesky of each of the individual matrices. Similarly, when upper is FALSE, the returned tensor will be composed of lower-triangular Cholesky factors of each of the individual matrices.

+
-

Examples

-
if (torch_is_installed()) {
-
-a = torch_randn(c(3, 3))
-a = torch_mm(a, a$t()) # make symmetric positive-definite
-l = torch_cholesky(a)
-a
-l
-torch_mm(l, l$t())
-a = torch_randn(c(3, 2, 2))
-if (FALSE) {
-a = torch_matmul(a, a$transpose(-1, -2)) + 1e-03 # make symmetric positive-definite
-l = torch_cholesky(a)
-z = torch_matmul(l, l$transpose(-1, -2))
-torch_max(torch_abs(z - a)) # Max non-zero
-}
-}
-
+
+

Examples

+
if (torch_is_installed()) {
+
+a = torch_randn(c(3, 3))
+a = torch_mm(a, a$t()) # make symmetric positive-definite
+l = torch_cholesky(a)
+a
+l
+torch_mm(l, l$t())
+a = torch_randn(c(3, 2, 2))
+if (FALSE) {
+a = torch_matmul(a, a$transpose(-1, -2)) + 1e-03 # make symmetric positive-definite
+l = torch_cholesky(a)
+z = torch_matmul(l, l$transpose(-1, -2))
+torch_max(torch_abs(z - a)) # Max non-zero
+}
+}
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_cholesky_inverse.html b/dev/reference/torch_cholesky_inverse.html index acc869d58..b41741a73 100644 --- a/dev/reference/torch_cholesky_inverse.html +++ b/dev/reference/torch_cholesky_inverse.html @@ -1,79 +1,18 @@ - - - - - - - -Cholesky_inverse — torch_cholesky_inverse • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Cholesky_inverse — torch_cholesky_inverse • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,23 +111,19 @@

Cholesky_inverse

-
torch_cholesky_inverse(self, upper = FALSE)
- -

Arguments

- - - - - - - - - - -
self

(Tensor) the input 2-D tensor \(u\), a upper or lower triangular Cholesky factor

upper

(bool, optional) whether to return a lower (default) or upper triangular matrix

- -

cholesky_inverse(input, upper=False, out=NULL) -> Tensor

+
+
torch_cholesky_inverse(self, upper = FALSE)
+
+
+

Arguments

+
self
+

(Tensor) the input 2-D tensor \(u\), a upper or lower triangular Cholesky factor

+
upper
+

(bool, optional) whether to return a lower (default) or upper triangular matrix

+
+
+

cholesky_inverse(input, upper=False, out=NULL) -> Tensor

@@ -222,45 +140,44 @@ triangular such that the returned tensor is

$$ inv = (u^T u)^{{-1}} $$

+
-

Examples

-
if (torch_is_installed()) {
-
-if (FALSE) {
-a = torch_randn(c(3, 3))
-a = torch_mm(a, a$t()) + 1e-05 * torch_eye(3) # make symmetric positive definite
-u = torch_cholesky(a)
-a
-torch_cholesky_inverse(u)
-a$inverse()
-}
-}
-
+
+

Examples

+
if (torch_is_installed()) {
+
+if (FALSE) {
+a = torch_randn(c(3, 3))
+a = torch_mm(a, a$t()) + 1e-05 * torch_eye(3) # make symmetric positive definite
+u = torch_cholesky(a)
+a
+torch_cholesky_inverse(u)
+a$inverse()
+}
+}
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_cholesky_solve.html b/dev/reference/torch_cholesky_solve.html index b30e60f5a..122ca7afe 100644 --- a/dev/reference/torch_cholesky_solve.html +++ b/dev/reference/torch_cholesky_solve.html @@ -1,79 +1,18 @@ - - - - - - - -Cholesky_solve — torch_cholesky_solve • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Cholesky_solve — torch_cholesky_solve • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,27 +111,21 @@

Cholesky_solve

-
torch_cholesky_solve(self, input2, upper = FALSE)
- -

Arguments

- - - - - - - - - - - - - - -
self

(Tensor) input matrix \(b\) of size \((*, m, k)\), where \(*\) is zero or more batch dimensions

input2

(Tensor) input matrix \(u\) of size \((*, m, m)\), where \(*\) is zero of more batch dimensions composed of upper or lower triangular Cholesky factor

upper

(bool, optional) whether to consider the Cholesky factor as a lower or upper triangular matrix. Default: FALSE.

- -

cholesky_solve(input, input2, upper=False, out=NULL) -> Tensor

+
+
torch_cholesky_solve(self, input2, upper = FALSE)
+
+
+

Arguments

+
self
+

(Tensor) input matrix \(b\) of size \((*, m, k)\), where \(*\) is zero or more batch dimensions

+
input2
+

(Tensor) input matrix \(u\) of size \((*, m, m)\), where \(*\) is zero of more batch dimensions composed of upper or lower triangular Cholesky factor

+
upper
+

(bool, optional) whether to consider the Cholesky factor as a lower or upper triangular matrix. Default: FALSE.

+
+
+

cholesky_solve(input, input2, upper=False, out=NULL) -> Tensor

@@ -228,50 +144,49 @@ $$ torch_cholesky_solve(b, u) can take in 2D inputs b, u or inputs that are batches of 2D matrices. If the inputs are batches, then returns batched outputs c

+
-

Examples

-
if (torch_is_installed()) {
-
-a = torch_randn(c(3, 3))
-a = torch_mm(a, a$t()) # make symmetric positive definite
-u = torch_cholesky(a)
-a
-b = torch_randn(c(3, 2))
-b
-torch_cholesky_solve(b, u)
-torch_mm(a$inverse(), b)
-}
-#> torch_tensor
-#>  0.6713 -0.0665
-#> -36.2960  3.6688
-#>  6.5144 -1.1723
-#> [ CPUFloatType{3,2} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+a = torch_randn(c(3, 3))
+a = torch_mm(a, a$t()) # make symmetric positive definite
+u = torch_cholesky(a)
+a
+b = torch_randn(c(3, 2))
+b
+torch_cholesky_solve(b, u)
+torch_mm(a$inverse(), b)
+}
+#> torch_tensor
+#> -27.1156 -21.7349
+#> -30.0626 -23.2445
+#>  35.0691  26.9374
+#> [ CPUFloatType{3,2} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_chunk.html b/dev/reference/torch_chunk.html index d7e80d2df..7434ba2c7 100644 --- a/dev/reference/torch_chunk.html +++ b/dev/reference/torch_chunk.html @@ -1,79 +1,18 @@ - - - - - - - -Chunk — torch_chunk • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Chunk — torch_chunk • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_chunk(self, chunks, dim = 1L)
- -

Arguments

- - - - - - - - - - - - - - -
self

(Tensor) the tensor to split

chunks

(int) number of chunks to return

dim

(int) dimension along which to split the tensor

- -

chunk(input, chunks, dim=0) -> List of Tensors

+
+
torch_chunk(self, chunks, dim = 1L)
+
+
+

Arguments

+
self
+

(Tensor) the tensor to split

+
chunks
+

(int) number of chunks to return

+
dim
+

(int) dimension along which to split the tensor

+
+
+

chunk(input, chunks, dim=0) -> List of Tensors

@@ -217,32 +133,29 @@ the input tensor.

Last chunk will be smaller if the tensor size along the given dimension dim is not divisible by chunks.

+
+
-
- +
- - + + diff --git a/dev/reference/torch_clamp.html b/dev/reference/torch_clamp.html index 1948b018e..a63d33af4 100644 --- a/dev/reference/torch_clamp.html +++ b/dev/reference/torch_clamp.html @@ -1,79 +1,18 @@ - - - - - - - -Clamp — torch_clamp • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Clamp — torch_clamp • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_clamp(self, min = NULL, max = NULL)
- -

Arguments

- - - - - - - - - - - - - - -
self

(Tensor) the input tensor.

min

(Number) lower-bound of the range to be clamped to

max

(Number) upper-bound of the range to be clamped to

- -

clamp(input, min, max, out=NULL) -> Tensor

+
+
torch_clamp(self, min = NULL, max = NULL)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
min
+

(Number) lower-bound of the range to be clamped to

+
max
+

(Number) upper-bound of the range to be clamped to

+
+
+

clamp(input, min, max, out=NULL) -> Tensor

@@ -225,72 +141,73 @@ a resulting tensor:

$$ If input is of type FloatTensor or DoubleTensor, args min and max must be real numbers, otherwise they should be integers.

-

clamp(input, *, min, out=NULL) -> Tensor

- +
+
+

clamp(input, *, min, out=NULL) -> Tensor

Clamps all elements in input to be larger or equal min.

If input is of type FloatTensor or DoubleTensor, value should be a real number, otherwise it should be an integer.

-

clamp(input, *, max, out=NULL) -> Tensor

- +
+
+

clamp(input, *, max, out=NULL) -> Tensor

Clamps all elements in input to be smaller or equal max.

If input is of type FloatTensor or DoubleTensor, value should be a real number, otherwise it should be an integer.

+
-

Examples

-
if (torch_is_installed()) {
-
-a = torch_randn(c(4))
-a
-torch_clamp(a, min=-0.5, max=0.5)
-
-
-a = torch_randn(c(4))
-a
-torch_clamp(a, min=0.5)
-
-
-a = torch_randn(c(4))
-a
-torch_clamp(a, max=0.5)
-}
-#> torch_tensor
-#>  0.2336
-#> -1.8506
-#> -0.6078
-#>  0.5000
-#> [ CPUFloatType{4} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+a = torch_randn(c(4))
+a
+torch_clamp(a, min=-0.5, max=0.5)
+
+
+a = torch_randn(c(4))
+a
+torch_clamp(a, min=0.5)
+
+
+a = torch_randn(c(4))
+a
+torch_clamp(a, max=0.5)
+}
+#> torch_tensor
+#>  0.5000
+#>  0.5000
+#> -0.0240
+#> -0.5295
+#> [ CPUFloatType{4} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_clip.html b/dev/reference/torch_clip.html index db227a0f9..72f11e8a5 100644 --- a/dev/reference/torch_clip.html +++ b/dev/reference/torch_clip.html @@ -1,79 +1,18 @@ - - - - - - - -Clip — torch_clip • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Clip — torch_clip • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_clip(self, min = NULL, max = NULL)
- -

Arguments

- - - - - - - - - - - - - - -
self

(Tensor) the input tensor.

min

(Number) lower-bound of the range to be clamped to

max

(Number) upper-bound of the range to be clamped to

- -

clip(input, min, max, *, out=None) -> Tensor

+
+
torch_clip(self, min = NULL, max = NULL)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
min
+

(Number) lower-bound of the range to be clamped to

+
max
+

(Number) upper-bound of the range to be clamped to

+
+
+

clip(input, min, max, *, out=None) -> Tensor

-

Alias for torch_clamp().

+

Alias for torch_clamp().

+
+
-
- +
- - + + diff --git a/dev/reference/torch_clone.html b/dev/reference/torch_clone.html index 5675496ad..5e05493e1 100644 --- a/dev/reference/torch_clone.html +++ b/dev/reference/torch_clone.html @@ -1,79 +1,18 @@ - - - - - - - -Clone — torch_clone • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Clone — torch_clone • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_clone(self, memory_format = NULL)
- -

Arguments

- - - - - - - - - - -
self

(Tensor) the input tensor.

memory_format

a torch memory format. see torch_preserve_format().

- -

Note

+
+
torch_clone(self, memory_format = NULL)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
memory_format
+

a torch memory format. see torch_preserve_format().

+
+
+

Note

This function is differentiable, so gradients will flow back from the result of this operation to input. To create a tensor without an autograd relationship to input see Tensor$detach.

-

clone(input, *, memory_format=torch.preserve_format) -> Tensor

- +
+
+

clone(input, *, memory_format=torch.preserve_format) -> Tensor

Returns a copy of input.

+
+
-
- +
- - + + diff --git a/dev/reference/torch_combinations.html b/dev/reference/torch_combinations.html index ddaa47daa..2127f4bac 100644 --- a/dev/reference/torch_combinations.html +++ b/dev/reference/torch_combinations.html @@ -1,79 +1,18 @@ - - - - - - - -Combinations — torch_combinations • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Combinations — torch_combinations • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,77 +111,70 @@

Combinations

-
torch_combinations(self, r = 2L, with_replacement = FALSE)
- -

Arguments

- - - - - - - - - - - - - - -
self

(Tensor) 1D vector.

r

(int, optional) number of elements to combine

with_replacement

(boolean, optional) whether to allow duplication in combination

- -

combinations(input, r=2, with_replacement=False) -> seq

+
+
torch_combinations(self, r = 2L, with_replacement = FALSE)
+
+
+

Arguments

+
self
+

(Tensor) 1D vector.

+
r
+

(int, optional) number of elements to combine

+
with_replacement
+

(boolean, optional) whether to allow duplication in combination

+
+
+

combinations(input, r=2, with_replacement=False) -> seq

Compute combinations of length \(r\) of the given tensor. The behavior is similar to python's itertools.combinations when with_replacement is set to False, and itertools.combinations_with_replacement when with_replacement is set to TRUE.

+
-

Examples

-
if (torch_is_installed()) {
-
-a = c(1, 2, 3)
-tensor_a = torch_tensor(a)
-torch_combinations(tensor_a)
-torch_combinations(tensor_a, r=3)
-torch_combinations(tensor_a, with_replacement=TRUE)
-}
-#> torch_tensor
-#>  1  1
-#>  1  2
-#>  1  3
-#>  2  2
-#>  2  3
-#>  3  3
-#> [ CPUFloatType{6,2} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+a = c(1, 2, 3)
+tensor_a = torch_tensor(a)
+torch_combinations(tensor_a)
+torch_combinations(tensor_a, r=3)
+torch_combinations(tensor_a, with_replacement=TRUE)
+}
+#> torch_tensor
+#>  1  1
+#>  1  2
+#>  1  3
+#>  2  2
+#>  2  3
+#>  3  3
+#> [ CPUFloatType{6,2} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_complex.html b/dev/reference/torch_complex.html index e21c829a2..e21e2d917 100644 --- a/dev/reference/torch_complex.html +++ b/dev/reference/torch_complex.html @@ -1,79 +1,18 @@ - - - - - - - -Complex — torch_complex • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Complex — torch_complex • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_complex(real, imag)
- -

Arguments

- - - - - - - - - - -
real

(Tensor) The real part of the complex tensor. Must be float or double.

imag

(Tensor) The imaginary part of the complex tensor. Must be same dtype -as real.

- -

complex(real, imag, *, out=None) -> Tensor

+
+
torch_complex(real, imag)
+
+
+

Arguments

+
real
+

(Tensor) The real part of the complex tensor. Must be float or double.

+
imag
+

(Tensor) The imaginary part of the complex tensor. Must be same dtype +as real.

+
+
+

complex(real, imag, *, out=None) -> Tensor

Constructs a complex tensor with its real part equal to real and its imaginary part equal to imag.

+
-

Examples

-
if (torch_is_installed()) {
-
-real <- torch_tensor(c(1, 2), dtype=torch_float32())
-imag <- torch_tensor(c(3, 4), dtype=torch_float32())
-z <- torch_complex(real, imag)
-z
-z$dtype
-}
-#> torch_ComplexFloat
-
+
+

Examples

+
if (torch_is_installed()) {
+
+real <- torch_tensor(c(1, 2), dtype=torch_float32())
+imag <- torch_tensor(c(3, 4), dtype=torch_float32())
+z <- torch_complex(real, imag)
+z
+z$dtype
+}
+#> torch_ComplexFloat
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_conj.html b/dev/reference/torch_conj.html index 3db54ddfa..05bf4d567 100644 --- a/dev/reference/torch_conj.html +++ b/dev/reference/torch_conj.html @@ -1,79 +1,18 @@ - - - - - - - -Conj — torch_conj • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Conj — torch_conj • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_conj(self)
- -

Arguments

- - - - - - -
self

(Tensor) the input tensor.

- -

conj(input) -> Tensor

+
+
torch_conj(self)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
+
+

conj(input) -> Tensor

@@ -209,39 +129,38 @@

$$ \mbox{out}_{i} = conj(\mbox{input}_{i}) $$

+
-

Examples

-
if (torch_is_installed()) {
-if (FALSE) {
-torch_conj(torch_tensor(c(-1 + 1i, -2 + 2i, 3 - 3i)))
-}
-}
-
+
+

Examples

+
if (torch_is_installed()) {
+if (FALSE) {
+torch_conj(torch_tensor(c(-1 + 1i, -2 + 2i, 3 - 3i)))
+}
+}
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_conv1d.html b/dev/reference/torch_conv1d.html index 0f5710c6a..00afb5a7f 100644 --- a/dev/reference/torch_conv1d.html +++ b/dev/reference/torch_conv1d.html @@ -1,79 +1,18 @@ - - - - - - - -Conv1d — torch_conv1d • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Conv1d — torch_conv1d • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_conv1d(
-  input,
-  weight,
-  bias = list(),
-  stride = 1L,
-  padding = 0L,
-  dilation = 1L,
-  groups = 1L
-)
- -

Arguments

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
input

input tensor of shape \((\mbox{minibatch} , \mbox{in\_channels} , iW)\)

weight

filters of shape \((\mbox{out\_channels} , \frac{\mbox{in\_channels}}{\mbox{groups}} , kW)\)

bias

optional bias of shape \((\mbox{out\_channels})\). Default: NULL

stride

the stride of the convolving kernel. Can be a single number or a one-element tuple (sW,). Default: 1

padding

implicit paddings on both sides of the input. Can be a single number or a one-element tuple (padW,). Default: 0

dilation

the spacing between kernel elements. Can be a single number or a one-element tuple (dW,). Default: 1

groups

split input into groups, \(\mbox{in\_channels}\) should be divisible by the number of groups. Default: 1

- -

conv1d(input, weight, bias=NULL, stride=1, padding=0, dilation=1, groups=1) -> Tensor

+
+
torch_conv1d(
+  input,
+  weight,
+  bias = list(),
+  stride = 1L,
+  padding = 0L,
+  dilation = 1L,
+  groups = 1L
+)
+
+
+

Arguments

+
input
+

input tensor of shape \((\mbox{minibatch} , \mbox{in\_channels} , iW)\)

+
weight
+

filters of shape \((\mbox{out\_channels} , \frac{\mbox{in\_channels}}{\mbox{groups}} , kW)\)

+
bias
+

optional bias of shape \((\mbox{out\_channels})\). Default: NULL

+
stride
+

the stride of the convolving kernel. Can be a single number or a one-element tuple (sW,). Default: 1

+
padding
+

implicit paddings on both sides of the input. Can be a single number or a one-element tuple (padW,). Default: 0

+
dilation
+

the spacing between kernel elements. Can be a single number or a one-element tuple (dW,). Default: 1

+
groups
+

split input into groups, \(\mbox{in\_channels}\) should be divisible by the number of groups. Default: 1

+
+
+

conv1d(input, weight, bias=NULL, stride=1, padding=0, dilation=1, groups=1) -> Tensor

Applies a 1D convolution over an input signal composed of several input planes.

-

See nn_conv1d() for details and output shape.

+

See nn_conv1d() for details and output shape.

+
-

Examples

-
if (torch_is_installed()) {
-
-filters = torch_randn(c(33, 16, 3))
-inputs = torch_randn(c(20, 16, 50))
-nnf_conv1d(inputs, filters)
-}
-#> torch_tensor
-#> (1,.,.) = 
-#>  Columns 1 to 8  -7.8525  -2.0407   0.8150  -1.5617  -8.7560  12.2625  -2.5097   0.5251
-#>    9.4414   6.2884  -0.8566  -4.0809  -2.7999   3.8187  -0.7887   4.1019
-#>   -6.0896  -9.1828  -0.1717   6.7823   3.0234  -7.0734  -1.8927  -7.2024
-#>    5.4572   3.0925  -2.4005   4.2250   7.8562   2.9267  -5.2216  -0.4159
-#>   -3.2907  -0.2557   4.5709  -4.7395   7.1890  -2.5823  13.6924   0.9032
-#>    9.1754   4.1761   2.0614  -4.4622   4.5278  11.9110   4.7233 -22.2930
-#>    1.5346   7.9970  -7.1129  -2.6370   2.6200   5.3420   5.4175  -8.3752
-#>   -9.9433  -1.0131   0.1250   3.7050  14.4213  -1.2026  -5.3813  -6.1677
-#>   -2.0734  -7.3434   3.0369  10.7258  -2.2571   7.8338   6.5770   4.6638
-#>   14.5355  -9.2446 -11.8788  -1.4874   0.6724   0.4364 -13.0620  10.5158
-#>    3.1183  -6.3421   3.5872   1.2476  -8.8728  -0.6727  -2.1018   3.0694
-#>   -6.4806   5.2587   0.6850   0.4648   0.4876   7.5190  -4.9007  -6.9071
-#>   -4.4151   3.7822  -4.3640  10.6634  -9.7924   7.1546  -5.6291   0.2431
-#>    1.6135   5.3794 -12.0290   7.0067  -2.5272   7.5007  -5.4069  -0.6051
-#>  -10.7322 -13.6759   3.1178   7.4365  -8.3466   5.7762   6.1908 -13.9317
-#>    2.8588   4.8001   1.4602  -1.0226   5.0607  -0.0700  -3.6341  -0.8736
-#>    6.6313  -2.5016  -4.7764   3.9594  10.7264 -11.9547   1.5272  -5.7071
-#>    3.2704  -0.1894  -4.0513  -7.1200   1.3507  -2.7097  -6.7959   1.3229
-#>   -7.3841  -5.7800   5.2865  -4.4110  -4.0300  -5.9256   2.9355   9.6800
-#>   -3.4307  -0.9973   4.4428   1.2845   9.8502  -1.7181  -4.8242   0.7905
-#>   -4.1857  10.8171  -1.2946   0.1674  -2.8792  -2.9051 -12.2320  -3.5684
-#>    2.7573   4.8187  -4.4594   1.6466   7.3383  12.7499  -0.4632  -0.7312
-#>    4.9108   2.0215  -5.3181   5.9072 -11.0859   0.5918   2.1680  -1.0367
-#>    1.4069   2.5627   9.8556  -5.6374   4.6778   2.7842   0.3822  -0.6612
-#>    3.1161  -1.6331   9.6244 -10.1978   2.0901   3.0103   5.0626  -3.6221
-#>   -5.0599   1.8432  -8.5181  10.2846  -4.9048  -6.4187  -6.4874  11.4115
-#>    7.6255  -0.8659  -2.0644  11.1742  -5.3905  -0.8722  -0.9200  -3.7735
-#>   -0.8229  -0.7254  -7.2426   0.4983   8.5504  -2.4634  -2.9146  -9.7880
-#>  -11.7479  -9.0805   7.2011  -5.6097  -5.1247   4.5020   0.6660   8.3494
-#> ... [the output was truncated (use n=-1 to disable)]
-#> [ CPUFloatType{20,33,48} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+filters = torch_randn(c(33, 16, 3))
+inputs = torch_randn(c(20, 16, 50))
+nnf_conv1d(inputs, filters)
+}
+#> torch_tensor
+#> (1,.,.) = 
+#>  Columns 1 to 8   1.9853  -0.4145   3.4898  -3.1410   8.6812  -2.3423  -5.6584  10.3646
+#>    2.0027  -8.2080  -1.9526   4.0067   5.0721   5.4718   4.0759  -6.2809
+#>    8.2727  -4.4903   1.7663   1.4390  -1.3945   0.2365   8.5239  -2.9072
+#>  -12.1987   0.6573   5.6493  -4.4717  -9.6901  10.5695   6.0054  -4.4900
+#>   10.3204  -4.7072  -0.4309   5.2172   6.6748  -2.6728  -4.5023  -0.1650
+#>    8.9178  -1.1371  -7.2524   1.8454   7.2972 -10.1614   8.5542  10.4275
+#>   -3.2563  -1.1356  -7.5541 -16.1150   8.2792   9.6813   1.2226   3.9844
+#>    5.9068   0.7154  -0.8661  -4.8683   1.0732  -2.3573   1.5017 -17.0607
+#>    0.2960   9.6000  -6.2068  -0.5079  -6.3821   3.7258   6.0201  -4.2248
+#>    0.7526  -2.7993  -9.0437  -2.6109  -0.6761  13.2288 -21.4468   5.1298
+#>    3.3459  -1.3167   5.6159 -10.6618   6.5603  -7.3441   6.6849  -5.8503
+#>    3.8326  -4.3182   0.5829   3.3527  21.9380  -0.1036  -7.3275   5.0299
+#>   -0.2216 -11.9784  -2.7788  -3.2930   9.9663   2.8894   5.2879   0.6955
+#>   -1.9241   1.2050  -0.9701  -1.5404   9.7774  -2.7900  -1.3815  -7.2038
+#>   -4.1820   5.1908   1.8816  -5.8548  -3.6811   6.3057   1.4454  -4.0578
+#>    5.3453 -11.6965  -1.4017   5.0661   8.4545  -2.0280  -1.4592   4.9007
+#>   -7.8462   3.8918 -10.1120   9.6228 -10.6059  -4.1354  -3.1337   3.3622
+#>   -5.4985   3.1384  -1.7546   2.8298  -7.7870  13.2166 -14.4154   2.5063
+#>   -6.5086   2.2085  10.6032  -2.8578 -15.0458   1.5431  -8.5347   2.1013
+#>   -9.5277  -7.4451  11.0819   6.7900   1.6646   2.5842  -6.5905  -5.2784
+#>   -1.6813  -0.8671   1.1241   0.1566   1.2475  -1.8196   5.6795  -0.7130
+#>  -14.7110  -0.0383   7.7003  10.3171  -3.7681   9.6258   9.4546  -6.7951
+#>    7.1557   4.3944   7.4061  -1.7069  -5.3293  -6.4612  -8.9116   8.8942
+#>   -4.0033  -8.2283   7.4060   4.1749  -5.1196  -0.3640   4.2965   1.3732
+#>   10.4250   9.0730   4.2918   1.7370 -12.0283  -6.9838   9.9492   5.5577
+#>    1.4511  -2.6171  -7.8845  -5.2033  -2.4371  -2.7697  10.7783  -2.9823
+#>   -8.0807   0.6709  12.0511   0.6286   0.1480  -9.3920  -8.4591   9.6192
+#>    5.9110  -3.6756  -3.9411   7.1610  14.2643   4.2974  -9.6810  -5.7104
+#>   -2.9611 -10.7208   3.5580  12.1450  12.2906  -2.8964  -0.1299  11.9842
+#> ... [the output was truncated (use n=-1 to disable)]
+#> [ CPUFloatType{20,33,48} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_conv2d.html b/dev/reference/torch_conv2d.html index a9cc6aeb6..30e554280 100644 --- a/dev/reference/torch_conv2d.html +++ b/dev/reference/torch_conv2d.html @@ -1,79 +1,18 @@ - - - - - - - -Conv2d — torch_conv2d • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Conv2d — torch_conv2d • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_conv2d(
-  input,
-  weight,
-  bias = list(),
-  stride = 1L,
-  padding = 0L,
-  dilation = 1L,
-  groups = 1L
-)
- -

Arguments

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
input

input tensor of shape \((\mbox{minibatch} , \mbox{in\_channels} , iH , iW)\)

weight

filters of shape \((\mbox{out\_channels} , \frac{\mbox{in\_channels}}{\mbox{groups}} , kH , kW)\)

bias

optional bias tensor of shape \((\mbox{out\_channels})\). Default: NULL

stride

the stride of the convolving kernel. Can be a single number or a tuple (sH, sW). Default: 1

padding

implicit paddings on both sides of the input. Can be a single number or a tuple (padH, padW). Default: 0

dilation

the spacing between kernel elements. Can be a single number or a tuple (dH, dW). Default: 1

groups

split input into groups, \(\mbox{in\_channels}\) should be divisible by the number of groups. Default: 1

- -

conv2d(input, weight, bias=NULL, stride=1, padding=0, dilation=1, groups=1) -> Tensor

+
+
torch_conv2d(
+  input,
+  weight,
+  bias = list(),
+  stride = 1L,
+  padding = 0L,
+  dilation = 1L,
+  groups = 1L
+)
+
+
+

Arguments

+
input
+

input tensor of shape \((\mbox{minibatch} , \mbox{in\_channels} , iH , iW)\)

+
weight
+

filters of shape \((\mbox{out\_channels} , \frac{\mbox{in\_channels}}{\mbox{groups}} , kH , kW)\)

+
bias
+

optional bias tensor of shape \((\mbox{out\_channels})\). Default: NULL

+
stride
+

the stride of the convolving kernel. Can be a single number or a tuple (sH, sW). Default: 1

+
padding
+

implicit paddings on both sides of the input. Can be a single number or a tuple (padH, padW). Default: 0

+
dilation
+

the spacing between kernel elements. Can be a single number or a tuple (dH, dW). Default: 1

+
groups
+

split input into groups, \(\mbox{in\_channels}\) should be divisible by the number of groups. Default: 1

+
+
+

conv2d(input, weight, bias=NULL, stride=1, padding=0, dilation=1, groups=1) -> Tensor

Applies a 2D convolution over an input image composed of several input planes.

-

See nn_conv2d() for details and output shape.

+

See nn_conv2d() for details and output shape.

+
-

Examples

-
if (torch_is_installed()) {
-
-# With square kernels and equal stride
-filters = torch_randn(c(8,4,3,3))
-inputs = torch_randn(c(1,4,5,5))
-nnf_conv2d(inputs, filters, padding=1)
-}
-#> torch_tensor
-#> (1,1,.,.) = 
-#>   1.3010 -3.8266 -2.0754  2.3768 -1.5136
-#>  -5.1038  5.7941  0.6686 -3.2564 -0.9188
-#>   1.3512 -0.0968  5.4276  4.1043 -3.0454
-#>  -6.6700  0.0899  3.5636 -1.7755  0.6650
-#>   6.1587  6.5902  4.1504 -1.8508 -1.2869
-#> 
-#> (1,2,.,.) = 
-#>  -5.6143 -0.8724 -3.7113  0.2869  0.1920
-#>   6.7031  3.3272 -3.5086 -2.5507 -0.5642
-#>  -1.6727 -5.5105  2.1701 -1.1776 -10.1545
-#>   0.3751  1.1698 -5.5290  1.1856  0.5100
-#>  -0.5208 -4.1720 -2.4027  0.2828  1.7904
-#> 
-#> (1,3,.,.) = 
-#>   -1.2270   4.3284   1.8797  -6.1424  -0.0578
-#>    4.4318   3.0126  -0.1128  -7.7084   0.4294
-#>   -3.7026   8.1070  -5.1812   2.8599  13.3832
-#>    4.4232  -4.4565  10.4726  10.5606   9.0606
-#>    3.5237   4.5724  -6.0063 -10.0640   0.8633
-#> 
-#> (1,4,.,.) = 
-#>   5.8401 -2.3004  0.4396  3.0189  0.7347
-#>   3.2647 -3.4107  1.1328  5.5715 -3.8395
-#>  -3.2507  3.7227 -4.9675  3.0068 -5.1521
-#>   2.9304  1.8668 -5.0428 -2.4748  0.4221
-#>  -2.7381 -3.2545  3.4447 -2.3784  0.3404
-#> 
-#> (1,5,.,.) = 
-#>   5.0448  1.2105 -0.2328  2.6849 -2.4929
-#> ... [the output was truncated (use n=-1 to disable)]
-#> [ CPUFloatType{1,8,5,5} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+# With square kernels and equal stride
+filters = torch_randn(c(8,4,3,3))
+inputs = torch_randn(c(1,4,5,5))
+nnf_conv2d(inputs, filters, padding=1)
+}
+#> torch_tensor
+#> (1,1,.,.) = 
+#>   3.0084 -5.3392  0.8916 -5.9357  4.9299
+#>  -4.6841 -1.0547 -1.9839  0.4329  0.5662
+#>   5.7762 -5.7486  1.0964 -3.6455  0.4517
+#>   1.0485  4.4317  1.0435  3.1080 -1.0954
+#>   1.3437  5.9563  0.4232  4.4031 -1.6114
+#> 
+#> (1,2,.,.) = 
+#>    3.4789   2.0053  -2.5920  10.4240  -5.6458
+#>    2.3907   4.4177   9.9248  -2.8303  -0.8741
+#>    6.8289  -4.8249  -4.0972   6.0992  -5.1429
+#>    0.5024   0.8175 -14.3830   2.9596 -12.0636
+#>  -10.1116  -5.4844  -8.6464 -12.7355  -0.8968
+#> 
+#> (1,3,.,.) = 
+#>  -3.5986 -0.5763 -2.8229 -0.1336  2.9402
+#>   5.3503 -7.3509  6.7232 -2.6656 -0.4504
+#>  -2.1034  4.9948 -8.7319 -2.7165 -4.7009
+#>  -1.0407  3.2368 -6.8384 -7.8150 -0.4372
+#>  -0.1875 -8.2452 -6.6283 -6.9655  0.3963
+#> 
+#> (1,4,.,.) = 
+#>  -0.7238 -5.2456  4.1168  8.7662 -5.4334
+#>  -7.9181 -1.0623  3.3308 -5.0665  3.3577
+#>   5.2597  1.6785  9.1345 -8.4690 -1.6616
+#>  -0.3970 -5.0369 -1.2243 -9.3130  5.8999
+#>  -3.6919 -7.8341  3.2629 -2.5463  4.2951
+#> 
+#> (1,5,.,.) = 
+#>   1.4886 -3.1286  6.6257  1.4238  3.0997
+#> ... [the output was truncated (use n=-1 to disable)]
+#> [ CPUFloatType{1,8,5,5} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_conv3d.html b/dev/reference/torch_conv3d.html index f2b0117c0..b40929580 100644 --- a/dev/reference/torch_conv3d.html +++ b/dev/reference/torch_conv3d.html @@ -1,79 +1,18 @@ - - - - - - - -Conv3d — torch_conv3d • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Conv3d — torch_conv3d • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_conv3d(
-  input,
-  weight,
-  bias = list(),
-  stride = 1L,
-  padding = 0L,
-  dilation = 1L,
-  groups = 1L
-)
- -

Arguments

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
input

input tensor of shape \((\mbox{minibatch} , \mbox{in\_channels} , iT , iH , iW)\)

weight

filters of shape \((\mbox{out\_channels} , \frac{\mbox{in\_channels}}{\mbox{groups}} , kT , kH , kW)\)

bias

optional bias tensor of shape \((\mbox{out\_channels})\). Default: NULL

stride

the stride of the convolving kernel. Can be a single number or a tuple (sT, sH, sW). Default: 1

padding

implicit paddings on both sides of the input. Can be a single number or a tuple (padT, padH, padW). Default: 0

dilation

the spacing between kernel elements. Can be a single number or a tuple (dT, dH, dW). Default: 1

groups

split input into groups, \(\mbox{in\_channels}\) should be divisible by the number of groups. Default: 1

- -

conv3d(input, weight, bias=NULL, stride=1, padding=0, dilation=1, groups=1) -> Tensor

+
+
torch_conv3d(
+  input,
+  weight,
+  bias = list(),
+  stride = 1L,
+  padding = 0L,
+  dilation = 1L,
+  groups = 1L
+)
+
+
+

Arguments

+
input
+

input tensor of shape \((\mbox{minibatch} , \mbox{in\_channels} , iT , iH , iW)\)

+
weight
+

filters of shape \((\mbox{out\_channels} , \frac{\mbox{in\_channels}}{\mbox{groups}} , kT , kH , kW)\)

+
bias
+

optional bias tensor of shape \((\mbox{out\_channels})\). Default: NULL

+
stride
+

the stride of the convolving kernel. Can be a single number or a tuple (sT, sH, sW). Default: 1

+
padding
+

implicit paddings on both sides of the input. Can be a single number or a tuple (padT, padH, padW). Default: 0

+
dilation
+

the spacing between kernel elements. Can be a single number or a tuple (dT, dH, dW). Default: 1

+
groups
+

split input into groups, \(\mbox{in\_channels}\) should be divisible by the number of groups. Default: 1

+
+
+

conv3d(input, weight, bias=NULL, stride=1, padding=0, dilation=1, groups=1) -> Tensor

Applies a 3D convolution over an input image composed of several input planes.

-

See nn_conv3d() for details and output shape.

+

See nn_conv3d() for details and output shape.

+
-

Examples

-
if (torch_is_installed()) {
-
-# filters = torch_randn(c(33, 16, 3, 3, 3))
-# inputs = torch_randn(c(20, 16, 50, 10, 20))
-# nnf_conv3d(inputs, filters)
-}
-#> NULL
-
+
+

Examples

+
if (torch_is_installed()) {
+
+# filters = torch_randn(c(33, 16, 3, 3, 3))
+# inputs = torch_randn(c(20, 16, 50, 10, 20))
+# nnf_conv3d(inputs, filters)
+}
+#> NULL
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_conv_tbc.html b/dev/reference/torch_conv_tbc.html index 0e2a7918d..159567970 100644 --- a/dev/reference/torch_conv_tbc.html +++ b/dev/reference/torch_conv_tbc.html @@ -1,79 +1,18 @@ - - - - - - - -Conv_tbc — torch_conv_tbc • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Conv_tbc — torch_conv_tbc • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,62 +111,51 @@

Conv_tbc

-
torch_conv_tbc(self, weight, bias, pad = 0L)
- -

Arguments

- - - - - - - - - - - - - - - - - - -
self

NA input tensor of shape \((\mbox{sequence length} \times batch \times \mbox{in\_channels})\)

weight

NA filter of shape (\(\mbox{kernel width} \times \mbox{in\_channels} \times \mbox{out\_channels}\))

bias

NA bias of shape (\(\mbox{out\_channels}\))

pad

NA number of timesteps to pad. Default: 0

- -

TEST

+
+
torch_conv_tbc(self, weight, bias, pad = 0L)
+
+
+

Arguments

+
self
+

NA input tensor of shape \((\mbox{sequence length} \times batch \times \mbox{in\_channels})\)

+
weight
+

NA filter of shape (\(\mbox{kernel width} \times \mbox{in\_channels} \times \mbox{out\_channels}\))

+
bias
+

NA bias of shape (\(\mbox{out\_channels}\))

+
pad
+

NA number of timesteps to pad. Default: 0

+
+
+

TEST

Applies a 1-dimensional sequence convolution over an input sequence. Input and output dimensions are (Time, Batch, Channels) - hence TBC.

+
+
-
- +
- - + + diff --git a/dev/reference/torch_conv_transpose1d.html b/dev/reference/torch_conv_transpose1d.html index d3dba5e0c..658d35216 100644 --- a/dev/reference/torch_conv_transpose1d.html +++ b/dev/reference/torch_conv_transpose1d.html @@ -1,79 +1,18 @@ - - - - - - - -Conv_transpose1d — torch_conv_transpose1d • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Conv_transpose1d — torch_conv_transpose1d • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,129 +111,112 @@

Conv_transpose1d

-
torch_conv_transpose1d(
-  input,
-  weight,
-  bias = list(),
-  stride = 1L,
-  padding = 0L,
-  output_padding = 0L,
-  groups = 1L,
-  dilation = 1L
-)
- -

Arguments

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
input

input tensor of shape \((\mbox{minibatch} , \mbox{in\_channels} , iW)\)

weight

filters of shape \((\mbox{in\_channels} , \frac{\mbox{out\_channels}}{\mbox{groups}} , kW)\)

bias

optional bias of shape \((\mbox{out\_channels})\). Default: NULL

stride

the stride of the convolving kernel. Can be a single number or a tuple (sW,). Default: 1

padding

dilation * (kernel_size - 1) - padding zero-padding will be added to both sides of each dimension in the input. Can be a single number or a tuple (padW,). Default: 0

output_padding

additional size added to one side of each dimension in the output shape. Can be a single number or a tuple (out_padW). Default: 0

groups

split input into groups, \(\mbox{in\_channels}\) should be divisible by the number of groups. Default: 1

dilation

the spacing between kernel elements. Can be a single number or a tuple (dW,). Default: 1

- -

conv_transpose1d(input, weight, bias=NULL, stride=1, padding=0, output_padding=0, groups=1, dilation=1) -> Tensor

+
+
torch_conv_transpose1d(
+  input,
+  weight,
+  bias = list(),
+  stride = 1L,
+  padding = 0L,
+  output_padding = 0L,
+  groups = 1L,
+  dilation = 1L
+)
+
+
+

Arguments

+
input
+

input tensor of shape \((\mbox{minibatch} , \mbox{in\_channels} , iW)\)

+
weight
+

filters of shape \((\mbox{in\_channels} , \frac{\mbox{out\_channels}}{\mbox{groups}} , kW)\)

+
bias
+

optional bias of shape \((\mbox{out\_channels})\). Default: NULL

+
stride
+

the stride of the convolving kernel. Can be a single number or a tuple (sW,). Default: 1

+
padding
+

dilation * (kernel_size - 1) - padding zero-padding will be added to both sides of each dimension in the input. Can be a single number or a tuple (padW,). Default: 0

+
output_padding
+

additional size added to one side of each dimension in the output shape. Can be a single number or a tuple (out_padW). Default: 0

+
groups
+

split input into groups, \(\mbox{in\_channels}\) should be divisible by the number of groups. Default: 1

+
dilation
+

the spacing between kernel elements. Can be a single number or a tuple (dW,). Default: 1

+
+
+

conv_transpose1d(input, weight, bias=NULL, stride=1, padding=0, output_padding=0, groups=1, dilation=1) -> Tensor

Applies a 1D transposed convolution operator over an input signal composed of several input planes, sometimes also called "deconvolution".

-

See nn_conv_transpose1d() for details and output shape.

+

See nn_conv_transpose1d() for details and output shape.

+
-

Examples

-
if (torch_is_installed()) {
-
-inputs = torch_randn(c(20, 16, 50))
-weights = torch_randn(c(16, 33, 5))
-nnf_conv_transpose1d(inputs, weights)
-}
-#> torch_tensor
-#> (1,.,.) = 
-#>  Columns 1 to 8  -1.0826  -3.2328  -3.1780   0.0298  -8.2496   5.5252   3.8265 -16.0103
-#>   -8.5469   0.1609   8.9542  -5.2216  19.1733   6.7107   6.8135 -15.0976
-#>   -2.9840  -7.8190  -8.3076   2.8882 -16.1129   1.2617   0.8731   2.6579
-#>   -1.0351   6.5417   0.7302   9.6141 -14.6469  -8.6066   4.2328  -5.5201
-#>    4.9492   9.2436  -1.0317  -2.8284   6.6090   5.7863 -24.2305   0.0088
-#>   -1.9106   3.9358  -6.7325   6.2673 -10.3832   1.3956   4.0447  15.1818
-#>   -2.1144   2.8540  18.4233   8.6695   1.7338   9.5815   2.0380   1.4900
-#>    5.2017   0.4362  -4.8418  -1.2964   0.6606  -3.5772 -12.4188   0.3288
-#>    3.1737   0.4119   2.6829   2.9172  22.7073 -10.6735   6.8735  -5.9445
-#>    2.1190   2.3197  -3.2908 -15.7091  11.0776   7.3606   2.0950  -3.0806
-#>   -0.3880 -15.1609  -8.9384  -3.4452   6.9085  15.2111  -3.5011   9.9428
-#>   -1.3822  -6.1490  -6.0171  -0.3526  -1.9978  -0.7748   5.2712   9.7836
-#>    0.5850  -2.6186   1.2230  -7.9513  -7.2304   4.6257  -3.8087   5.1504
-#>    5.0742   3.4272   0.1988   5.0003  10.3331   0.3624 -17.0828   4.9309
-#>   -2.1510  -6.3021  -3.3675   0.2285  -4.2040   6.4637  -7.7324   6.1154
-#>    0.4576 -10.4537  -9.5633  13.5898  16.5553   8.1340   9.4123   5.8942
-#>   -1.3384 -11.5494  -3.2358  -7.8198   1.6578   4.1971   5.2327 -12.0638
-#>   -0.7149  -1.4571  20.1630  -5.7633  -4.3603   3.1665 -10.3730  14.2092
-#>    8.4559   5.7431 -13.6568 -15.2266   6.5101   3.5963  -7.4127  -5.1881
-#>   -3.6863   3.6167  -6.5865   3.9422  11.6411   5.9919  -2.3535   6.7854
-#>    2.2983   1.1177  -3.0682 -11.6921   0.8689  11.6850  -5.7185  -8.9297
-#>    8.5941  -5.6829 -20.0004   1.0551  -3.7755 -18.6705   0.8061   5.8681
-#>   -8.0366   3.6885  -2.1077   7.3701  -8.4471  -3.3633 -10.6362  10.2637
-#>    0.3454 -15.4397  -4.5829 -10.9853  -5.3428  12.4051  -5.9169  15.0745
-#>    3.9859   4.8788  14.9213 -15.5092 -20.9979  18.4543  -0.2538 -15.4775
-#>   -3.2215   4.1086   6.8447   8.8186 -14.7425   9.6034   0.9043   6.4579
-#>   -1.8873   6.2358  -0.2238  15.5462  -7.2763 -10.3539   4.6643  -5.6230
-#>    0.9980   8.0700   8.9527  -9.4624  -3.3798   5.6563   1.8500  -5.8979
-#>   -3.0767  -3.6875  11.8195   2.3209  12.3317 -10.0017   1.0081   6.3692
-#> ... [the output was truncated (use n=-1 to disable)]
-#> [ CPUFloatType{20,33,54} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+inputs = torch_randn(c(20, 16, 50))
+weights = torch_randn(c(16, 33, 5))
+nnf_conv_transpose1d(inputs, weights)
+}
+#> torch_tensor
+#> (1,.,.) = 
+#>  Columns 1 to 6  1.4234e+00 -1.5031e+00 -6.3616e-01 -1.6005e+01 -1.7653e+00 -1.1944e+01
+#>  -2.6130e+00  2.1109e+00  5.0137e+00 -8.3263e+00  3.1316e+00 -6.7171e+00
+#>  -7.7618e-02 -3.6638e+00  3.7729e+00 -6.2228e+00  1.4163e+01 -1.2355e+01
+#>   8.0153e+00  1.8125e+00 -5.2152e+00 -6.1568e+00 -5.3453e+00 -3.1439e-01
+#>  -4.8352e+00  7.3619e-01  4.5109e+00  1.3390e+00 -1.2117e+00  6.1506e+00
+#>  -2.3411e+00  4.9159e+00 -4.8826e+00 -2.8050e+00  1.4312e+01  3.6273e+00
+#>  -4.3436e+00 -2.9203e+00  3.0042e+00 -1.0826e+01 -3.2666e+00  3.9990e+00
+#>  -1.7722e+00 -2.3305e+00  5.1786e+00 -9.0884e+00 -5.4102e+00  2.9818e+00
+#>   1.2349e+00  4.8561e+00 -1.6917e+01  1.1370e+01 -1.1253e+01 -1.0506e+00
+#>  -5.0320e-01 -5.4563e+00  2.2738e+00 -6.8237e+00  5.2816e+00 -2.3220e+01
+#>  -5.2823e+00 -1.6666e+00 -5.6597e+00 -2.6170e+00 -6.4845e+00 -4.1117e+00
+#>   1.0925e+00 -1.3915e+00  3.9011e+00  1.1433e+01  1.4513e+00  1.2619e+01
+#>  -1.6974e+00  6.7357e+00 -6.2011e+00 -9.4999e-01 -3.8088e+00 -3.8713e+00
+#>   3.2832e+00 -7.8925e+00  3.5728e+00 -3.6817e+00  3.9862e-01  1.4450e+00
+#>   4.0368e+00  1.3909e+01 -4.8242e-01  7.8844e+00 -5.5844e+00  2.1601e+01
+#>   3.8193e+00 -1.6119e+00  7.8622e+00 -4.2775e+00 -4.7867e+00  3.9014e+00
+#>  -1.3596e+00  3.1102e-02  7.2094e+00 -4.2222e+00  9.9116e+00  4.0948e+00
+#>   5.1430e+00 -7.9472e-01 -1.7387e+00 -5.0144e-01  5.8753e+00  3.1581e+00
+#>  -4.0289e+00  1.2223e+01 -1.2749e+01  3.5464e+00 -1.4313e+00 -3.6972e+00
+#>   7.3912e+00  6.3914e-01  5.8189e+00 -5.0191e+00  1.4044e+01 -1.5735e+00
+#>  -4.0717e+00 -6.0249e+00 -4.7371e+00  2.7147e-01 -1.1632e+01 -8.3076e+00
+#>   8.9647e-01 -1.8814e+00  5.1120e+00  1.4819e+00  9.9320e-01 -8.1805e-01
+#>   3.3988e-01 -4.4315e+00  8.0483e+00 -8.9666e+00  3.7973e+00  5.9623e+00
+#>  -1.1679e+00 -3.1561e+00 -2.7813e+00  1.5826e+00 -2.9887e+00  1.7741e+00
+#>   2.6976e+00 -3.1211e-01 -1.0025e+01  1.8118e+00 -5.4081e+00  6.9539e+00
+#>  -4.7193e+00 -2.1988e+00 -1.4907e+01  1.5257e+00 -4.3648e+00  1.0104e+01
+#>   8.9952e+00  6.7141e+00  7.4326e+00  8.3896e+00  1.1992e+01  1.3093e+00
+#>  -4.8924e+00 -1.9185e+00 -4.1971e+00 -7.3296e+00  4.8186e+00 -1.1817e+01
+#>  -1.8650e+00 -5.4170e-01  3.7811e+00 -3.6127e+00  9.1621e+00  6.1826e-02
+#> ... [the output was truncated (use n=-1 to disable)]
+#> [ CPUFloatType{20,33,54} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_conv_transpose2d.html b/dev/reference/torch_conv_transpose2d.html index 461b64feb..1da43682f 100644 --- a/dev/reference/torch_conv_transpose2d.html +++ b/dev/reference/torch_conv_transpose2d.html @@ -1,79 +1,18 @@ - - - - - - - -Conv_transpose2d — torch_conv_transpose2d • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Conv_transpose2d — torch_conv_transpose2d • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,130 +111,113 @@

Conv_transpose2d

-
torch_conv_transpose2d(
-  input,
-  weight,
-  bias = list(),
-  stride = 1L,
-  padding = 0L,
-  output_padding = 0L,
-  groups = 1L,
-  dilation = 1L
-)
- -

Arguments

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
input

input tensor of shape \((\mbox{minibatch} , \mbox{in\_channels} , iH , iW)\)

weight

filters of shape \((\mbox{in\_channels} , \frac{\mbox{out\_channels}}{\mbox{groups}} , kH , kW)\)

bias

optional bias of shape \((\mbox{out\_channels})\). Default: NULL

stride

the stride of the convolving kernel. Can be a single number or a tuple (sH, sW). Default: 1

padding

dilation * (kernel_size - 1) - padding zero-padding will be added to both sides of each dimension in the input. Can be a single number or a tuple (padH, padW). Default: 0

output_padding

additional size added to one side of each dimension in the output shape. Can be a single number or a tuple (out_padH, out_padW). Default: 0

groups

split input into groups, \(\mbox{in\_channels}\) should be divisible by the number of groups. Default: 1

dilation

the spacing between kernel elements. Can be a single number or a tuple (dH, dW). Default: 1

- -

conv_transpose2d(input, weight, bias=NULL, stride=1, padding=0, output_padding=0, groups=1, dilation=1) -> Tensor

+
+
torch_conv_transpose2d(
+  input,
+  weight,
+  bias = list(),
+  stride = 1L,
+  padding = 0L,
+  output_padding = 0L,
+  groups = 1L,
+  dilation = 1L
+)
+
+
+

Arguments

+
input
+

input tensor of shape \((\mbox{minibatch} , \mbox{in\_channels} , iH , iW)\)

+
weight
+

filters of shape \((\mbox{in\_channels} , \frac{\mbox{out\_channels}}{\mbox{groups}} , kH , kW)\)

+
bias
+

optional bias of shape \((\mbox{out\_channels})\). Default: NULL

+
stride
+

the stride of the convolving kernel. Can be a single number or a tuple (sH, sW). Default: 1

+
padding
+

dilation * (kernel_size - 1) - padding zero-padding will be added to both sides of each dimension in the input. Can be a single number or a tuple (padH, padW). Default: 0

+
output_padding
+

additional size added to one side of each dimension in the output shape. Can be a single number or a tuple (out_padH, out_padW). Default: 0

+
groups
+

split input into groups, \(\mbox{in\_channels}\) should be divisible by the number of groups. Default: 1

+
dilation
+

the spacing between kernel elements. Can be a single number or a tuple (dH, dW). Default: 1

+
+
+

conv_transpose2d(input, weight, bias=NULL, stride=1, padding=0, output_padding=0, groups=1, dilation=1) -> Tensor

Applies a 2D transposed convolution operator over an input image composed of several input planes, sometimes also called "deconvolution".

-

See nn_conv_transpose2d() for details and output shape.

+

See nn_conv_transpose2d() for details and output shape.

+
-

Examples

-
if (torch_is_installed()) {
-
-# With square kernels and equal stride
-inputs = torch_randn(c(1, 4, 5, 5))
-weights = torch_randn(c(4, 8, 3, 3))
-nnf_conv_transpose2d(inputs, weights, padding=1)
-}
-#> torch_tensor
-#> (1,1,.,.) = 
-#>    2.2788  -1.9283   7.3256   5.1428  -2.9257
-#>   -0.6896   1.4029  -5.3229  10.2390  -1.2402
-#>   -1.2060  10.2222  -4.7248  -1.5488   3.8320
-#>   -1.4776   1.1281   1.8286  -4.8006   8.1204
-#>    5.9955   0.2092   0.9957  -2.9968  -1.0158
-#> 
-#> (1,2,.,.) = 
-#>  -4.0071 -2.0428 -1.4256 -1.4038 -0.1210
-#>  -5.2884 -1.0475  7.1233  1.1916  5.0784
-#>   3.7178 -1.1443  2.2506 -3.7226  0.3739
-#>  -4.2545  2.0034  2.7678 -2.2835 -0.9902
-#>  -3.2392  3.3695  1.1751 -1.6468 -2.7825
-#> 
-#> (1,3,.,.) = 
-#>   0.5532 -7.5668  2.3785  3.4235  2.2801
-#>  -0.4576  0.1908  3.4579  6.5030  2.8629
-#>   5.5145  5.7911 -5.0308 -4.4961  0.1457
-#>   0.1480 -0.5277 -3.9319  6.4784 -1.5596
-#>  -0.1217  0.2231 -2.0216  2.9053 -0.2022
-#> 
-#> (1,4,.,.) = 
-#>   0.3142 -8.9630 -1.8311 -2.6733 -1.9425
-#>  -6.8940  1.7532 -5.0590 -4.0202 -4.1672
-#>   5.6343 -3.8787 -7.2058 -10.6780  1.3036
-#>  -1.8006 -1.8730 -5.1896  5.3562 -0.2618
-#>  -5.8934  0.0295  0.0948  1.0247 -2.2523
-#> 
-#> (1,5,.,.) = 
-#>   5.1338 -0.8517  5.0228  3.4769  3.7733
-#> ... [the output was truncated (use n=-1 to disable)]
-#> [ CPUFloatType{1,8,5,5} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+# With square kernels and equal stride
+inputs = torch_randn(c(1, 4, 5, 5))
+weights = torch_randn(c(4, 8, 3, 3))
+nnf_conv_transpose2d(inputs, weights, padding=1)
+}
+#> torch_tensor
+#> (1,1,.,.) = 
+#>   -1.3726   4.1691  -0.6799  -8.8039   9.7267
+#>    1.2701  11.1259   1.8226   1.1498   5.5541
+#>    4.8290   8.9775   3.8598  -3.7915   6.4184
+#>    0.7798   0.1942  -8.4466   8.5685  13.7212
+#>   -6.0247  -1.9721   9.1484   1.8498  -1.4937
+#> 
+#> (1,2,.,.) = 
+#>    4.2714  -3.3043   3.0402  -2.7384  -1.8807
+#>   10.8012   0.9600  -0.7262  -0.3902   1.1458
+#>   -0.3774   1.3983  -5.0742  16.1730  -9.9699
+#>   -1.2521   2.6366  -1.6142  -0.5783   1.0759
+#>   -1.4430   6.3296  -2.1135  -9.1693   6.9743
+#> 
+#> (1,3,.,.) = 
+#>   -1.6246  -0.3577   0.6327   1.5703  -5.3536
+#>    2.6579  -2.6281  -3.6799   3.9506  -9.8939
+#>    0.3707  -3.6971  -5.7174  -5.9126  -2.3601
+#>   -4.1118  -6.3271  11.9254  -8.0915  -9.3881
+#>    1.6068  -2.7051  -2.1547  -1.2867  -4.6118
+#> 
+#> (1,4,.,.) = 
+#>  -2.7534 -0.3291  0.1000 -3.3781  0.2460
+#>  -5.2972 -0.0770  1.5451  7.3312  0.5779
+#>   2.8656  7.4773  4.1043 -3.4999  1.5514
+#>  -7.0985  2.1793 -3.9563  9.2614 -2.9280
+#>  -3.6937 -2.7629 -0.0644 -0.4670  1.9274
+#> 
+#> (1,5,.,.) = 
+#>  -0.8408 -1.6140 -6.8559  3.9026  3.2767
+#> ... [the output was truncated (use n=-1 to disable)]
+#> [ CPUFloatType{1,8,5,5} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_conv_transpose3d.html b/dev/reference/torch_conv_transpose3d.html index 512efe938..5353d8d99 100644 --- a/dev/reference/torch_conv_transpose3d.html +++ b/dev/reference/torch_conv_transpose3d.html @@ -1,79 +1,18 @@ - - - - - - - -Conv_transpose3d — torch_conv_transpose3d • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Conv_transpose3d — torch_conv_transpose3d • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,97 +111,80 @@

Conv_transpose3d

-
torch_conv_transpose3d(
-  input,
-  weight,
-  bias = list(),
-  stride = 1L,
-  padding = 0L,
-  output_padding = 0L,
-  groups = 1L,
-  dilation = 1L
-)
- -

Arguments

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
input

input tensor of shape \((\mbox{minibatch} , \mbox{in\_channels} , iT , iH , iW)\)

weight

filters of shape \((\mbox{in\_channels} , \frac{\mbox{out\_channels}}{\mbox{groups}} , kT , kH , kW)\)

bias

optional bias of shape \((\mbox{out\_channels})\). Default: NULL

stride

the stride of the convolving kernel. Can be a single number or a tuple (sT, sH, sW). Default: 1

padding

dilation * (kernel_size - 1) - padding zero-padding will be added to both sides of each dimension in the input. Can be a single number or a tuple (padT, padH, padW). Default: 0

output_padding

additional size added to one side of each dimension in the output shape. Can be a single number or a tuple (out_padT, out_padH, out_padW). Default: 0

groups

split input into groups, \(\mbox{in\_channels}\) should be divisible by the number of groups. Default: 1

dilation

the spacing between kernel elements. Can be a single number or a tuple (dT, dH, dW). Default: 1

- -

conv_transpose3d(input, weight, bias=NULL, stride=1, padding=0, output_padding=0, groups=1, dilation=1) -> Tensor

+
+
torch_conv_transpose3d(
+  input,
+  weight,
+  bias = list(),
+  stride = 1L,
+  padding = 0L,
+  output_padding = 0L,
+  groups = 1L,
+  dilation = 1L
+)
+
+
+

Arguments

+
input
+

input tensor of shape \((\mbox{minibatch} , \mbox{in\_channels} , iT , iH , iW)\)

+
weight
+

filters of shape \((\mbox{in\_channels} , \frac{\mbox{out\_channels}}{\mbox{groups}} , kT , kH , kW)\)

+
bias
+

optional bias of shape \((\mbox{out\_channels})\). Default: NULL

+
stride
+

the stride of the convolving kernel. Can be a single number or a tuple (sT, sH, sW). Default: 1

+
padding
+

dilation * (kernel_size - 1) - padding zero-padding will be added to both sides of each dimension in the input. Can be a single number or a tuple (padT, padH, padW). Default: 0

+
output_padding
+

additional size added to one side of each dimension in the output shape. Can be a single number or a tuple (out_padT, out_padH, out_padW). Default: 0

+
groups
+

split input into groups, \(\mbox{in\_channels}\) should be divisible by the number of groups. Default: 1

+
dilation
+

the spacing between kernel elements. Can be a single number or a tuple (dT, dH, dW). Default: 1

+
+
+

conv_transpose3d(input, weight, bias=NULL, stride=1, padding=0, output_padding=0, groups=1, dilation=1) -> Tensor

Applies a 3D transposed convolution operator over an input image composed of several input planes, sometimes also called "deconvolution"

-

See nn_conv_transpose3d() for details and output shape.

+

See nn_conv_transpose3d() for details and output shape.

+
-

Examples

-
if (torch_is_installed()) {
-if (FALSE) {
-inputs = torch_randn(c(20, 16, 50, 10, 20))
-weights = torch_randn(c(16, 33, 3, 3, 3))
-nnf_conv_transpose3d(inputs, weights)
-}
-}
-
+
+

Examples

+
if (torch_is_installed()) {
+if (FALSE) {
+inputs = torch_randn(c(20, 16, 50, 10, 20))
+weights = torch_randn(c(16, 33, 3, 3, 3))
+nnf_conv_transpose3d(inputs, weights)
+}
+}
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_cos.html b/dev/reference/torch_cos.html index 22abb0cb7..434754e1f 100644 --- a/dev/reference/torch_cos.html +++ b/dev/reference/torch_cos.html @@ -1,79 +1,18 @@ - - - - - - - -Cos — torch_cos • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Cos — torch_cos • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_cos(self)
- -

Arguments

- - - - - - -
self

(Tensor) the input tensor.

- -

cos(input, out=NULL) -> Tensor

+
+
torch_cos(self)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
+
+

cos(input, out=NULL) -> Tensor

@@ -209,46 +129,45 @@

$$ \mbox{out}_{i} = \cos(\mbox{input}_{i}) $$

+
-

Examples

-
if (torch_is_installed()) {
-
-a = torch_randn(c(4))
-a
-torch_cos(a)
-}
-#> torch_tensor
-#>  0.8024
-#>  0.8990
-#>  0.2236
-#>  0.8580
-#> [ CPUFloatType{4} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+a = torch_randn(c(4))
+a
+torch_cos(a)
+}
+#> torch_tensor
+#>  0.9920
+#>  0.9991
+#>  0.7859
+#>  0.9709
+#> [ CPUFloatType{4} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_cosh.html b/dev/reference/torch_cosh.html index b3315590a..d3c4ebc0c 100644 --- a/dev/reference/torch_cosh.html +++ b/dev/reference/torch_cosh.html @@ -1,79 +1,18 @@ - - - - - - - -Cosh — torch_cosh • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Cosh — torch_cosh • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_cosh(self)
- -

Arguments

- - - - - - -
self

(Tensor) the input tensor.

- -

cosh(input, out=NULL) -> Tensor

+
+
torch_cosh(self)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
+
+

cosh(input, out=NULL) -> Tensor

@@ -210,46 +130,45 @@

$$ \mbox{out}_{i} = \cosh(\mbox{input}_{i}) $$

+
-

Examples

-
if (torch_is_installed()) {
-
-a = torch_randn(c(4))
-a
-torch_cosh(a)
-}
-#> torch_tensor
-#>  1.5223
-#>  1.0311
-#>  1.0992
-#>  2.1630
-#> [ CPUFloatType{4} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+a = torch_randn(c(4))
+a
+torch_cosh(a)
+}
+#> torch_tensor
+#>  1.2383
+#>  1.2462
+#>  1.3107
+#>  1.0561
+#> [ CPUFloatType{4} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_cosine_similarity.html b/dev/reference/torch_cosine_similarity.html index 884b13498..24019e967 100644 --- a/dev/reference/torch_cosine_similarity.html +++ b/dev/reference/torch_cosine_similarity.html @@ -1,79 +1,18 @@ - - - - - - - -Cosine_similarity — torch_cosine_similarity • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Cosine_similarity — torch_cosine_similarity • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,31 +111,23 @@

Cosine_similarity

-
torch_cosine_similarity(x1, x2, dim = 2L, eps = 0)
- -

Arguments

- - - - - - - - - - - - - - - - - - -
x1

(Tensor) First input.

x2

(Tensor) Second input (of size matching x1).

dim

(int, optional) Dimension of vectors. Default: 1

eps

(float, optional) Small value to avoid division by zero. Default: 1e-8

- -

cosine_similarity(x1, x2, dim=1, eps=1e-8) -> Tensor

+
+
torch_cosine_similarity(x1, x2, dim = 2L, eps = 0)
+
+
+

Arguments

+
x1
+

(Tensor) First input.

+
x2
+

(Tensor) Second input (of size matching x1).

+
dim
+

(int, optional) Dimension of vectors. Default: 1

+
eps
+

(float, optional) Small value to avoid division by zero. Default: 1e-8

+
+
+

cosine_similarity(x1, x2, dim=1, eps=1e-8) -> Tensor

@@ -221,74 +135,73 @@

$$ \mbox{similarity} = \frac{x_1 \cdot x_2}{\max(\Vert x_1 \Vert _2 \cdot \Vert x_2 \Vert _2, \epsilon)} $$

+
-

Examples

-
if (torch_is_installed()) {
-
-input1 = torch_randn(c(100, 128))
-input2 = torch_randn(c(100, 128))
-output = torch_cosine_similarity(input1, input2)
-output
-}
-#> torch_tensor
-#> -0.1184
-#>  0.1200
-#> -0.0379
-#> -0.0425
-#>  0.0001
-#> -0.0877
-#>  0.0792
-#> -0.0593
-#>  0.0396
-#>  0.1051
-#>  0.1250
-#> -0.0644
-#>  0.0106
-#> -0.1027
-#> -0.0870
-#>  0.0140
-#>  0.0807
-#>  0.0402
-#> -0.0976
-#>  0.0128
-#> -0.0453
-#> -0.0566
-#> -0.0092
-#> -0.0925
-#> -0.0542
-#> -0.0686
-#> -0.0115
-#>  0.0797
-#>  0.1791
-#>  0.0080
-#> ... [the output was truncated (use n=-1 to disable)]
-#> [ CPUFloatType{100} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+input1 = torch_randn(c(100, 128))
+input2 = torch_randn(c(100, 128))
+output = torch_cosine_similarity(input1, input2)
+output
+}
+#> torch_tensor
+#>  0.1401
+#> -0.0774
+#> -0.0501
+#> -0.0187
+#>  0.0501
+#> -0.1047
+#> -0.0906
+#> -0.0484
+#> -0.0588
+#>  0.0217
+#>  0.1372
+#> -0.0457
+#> -0.0843
+#> -0.1109
+#> -0.1297
+#>  0.0795
+#> -0.0365
+#> -0.0491
+#>  0.0171
+#>  0.0443
+#> -0.0111
+#> -0.0364
+#> -0.0006
+#> -0.0901
+#>  0.0134
+#>  0.0503
+#>  0.1285
+#>  0.0019
+#> -0.1816
+#> -0.0819
+#> ... [the output was truncated (use n=-1 to disable)]
+#> [ CPUFloatType{100} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_count_nonzero.html b/dev/reference/torch_count_nonzero.html index d7fff42b3..3c6404e47 100644 --- a/dev/reference/torch_count_nonzero.html +++ b/dev/reference/torch_count_nonzero.html @@ -1,79 +1,18 @@ - - - - - - - -Count_nonzero — torch_count_nonzero • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Count_nonzero — torch_count_nonzero • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,70 +111,65 @@

Count_nonzero

-
torch_count_nonzero(self, dim = NULL)
- -

Arguments

- - - - - - - - - - -
self

(Tensor) the input tensor.

dim

(int or tuple of ints, optional) Dim or tuple of dims along which -to count non-zeros.

- -

count_nonzero(input, dim=None) -> Tensor

+
+
torch_count_nonzero(self, dim = NULL)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
dim
+

(int or tuple of ints, optional) Dim or tuple of dims along which +to count non-zeros.

+
+
+

count_nonzero(input, dim=None) -> Tensor

Counts the number of non-zero values in the tensor input along the given dim. If no dim is specified then all non-zeros in the tensor are counted.

+
-

Examples

-
if (torch_is_installed()) {
-
-x <- torch_zeros(3,3)
-x[torch_randn(3,3) > 0.5] = 1
-x
-torch_count_nonzero(x)
-torch_count_nonzero(x, dim=1)
-}
-#> torch_tensor
-#>  1
-#>  1
-#>  0
-#> [ CPULongType{3} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+x <- torch_zeros(3,3)
+x[torch_randn(3,3) > 0.5] = 1
+x
+torch_count_nonzero(x)
+torch_count_nonzero(x, dim=1)
+}
+#> torch_tensor
+#>  1
+#>  3
+#>  1
+#> [ CPULongType{3} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_cross.html b/dev/reference/torch_cross.html index 0db345fcb..575d2cd3d 100644 --- a/dev/reference/torch_cross.html +++ b/dev/reference/torch_cross.html @@ -1,79 +1,18 @@ - - - - - - - -Cross — torch_cross • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Cross — torch_cross • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_cross(self, other, dim = NULL)
- -

Arguments

- - - - - - - - - - - - - - -
self

(Tensor) the input tensor.

other

(Tensor) the second input tensor

dim

(int, optional) the dimension to take the cross-product in.

- -

cross(input, other, dim=-1, out=NULL) -> Tensor

+
+
torch_cross(self, other, dim = NULL)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
other
+

(Tensor) the second input tensor

+
dim
+

(int, optional) the dimension to take the cross-product in.

+
+
+

cross(input, other, dim=-1, out=NULL) -> Tensor

@@ -219,49 +135,48 @@ and other.

dim dimension should be 3.

If dim is not given, it defaults to the first dimension found with the size 3.

+
-

Examples

-
if (torch_is_installed()) {
-
-a = torch_randn(c(4, 3))
-a
-b = torch_randn(c(4, 3))
-b
-torch_cross(a, b, dim=2)
-torch_cross(a, b)
-}
-#> torch_tensor
-#>  1.6620  4.7874 -4.1398
-#> -2.3831  0.6922  0.5992
-#>  0.8354  0.3776 -1.1564
-#> -0.7426  0.8224  1.7921
-#> [ CPUFloatType{4,3} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+a = torch_randn(c(4, 3))
+a
+b = torch_randn(c(4, 3))
+b
+torch_cross(a, b, dim=2)
+torch_cross(a, b)
+}
+#> torch_tensor
+#>  0.9962  0.8935  0.5735
+#>  3.0543  0.1183  2.5553
+#>  1.5996  1.6032  0.5181
+#>  0.6109 -0.2408  0.0755
+#> [ CPUFloatType{4,3} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_cummax.html b/dev/reference/torch_cummax.html index 5d80da259..aedd46cf6 100644 --- a/dev/reference/torch_cummax.html +++ b/dev/reference/torch_cummax.html @@ -1,79 +1,18 @@ - - - - - - - -Cummax — torch_cummax • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Cummax — torch_cummax • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_cummax(self, dim)
- -

Arguments

- - - - - - - - - - -
self

(Tensor) the input tensor.

dim

(int) the dimension to do the operation over

- -

cummax(input, dim) -> (Tensor, LongTensor)

+
+
torch_cummax(self, dim)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
dim
+

(int) the dimension to do the operation over

+
+
+

cummax(input, dim) -> (Tensor, LongTensor)

@@ -215,68 +133,67 @@ location of each maximum value found in the dimension dim.

$$ y_i = max(x_1, x_2, x_3, \dots, x_i) $$

+
-

Examples

-
if (torch_is_installed()) {
-
-a = torch_randn(c(10))
-a
-torch_cummax(a, dim=1)
-}
-#> [[1]]
-#> torch_tensor
-#> -0.3404
-#> -0.3404
-#> -0.3404
-#>  1.2517
-#>  1.2517
-#>  1.2517
-#>  1.2517
-#>  1.2517
-#>  1.2517
-#>  1.2517
-#> [ CPUFloatType{10} ]
-#> 
-#> [[2]]
-#> torch_tensor
-#>  0
-#>  0
-#>  0
-#>  3
-#>  3
-#>  3
-#>  3
-#>  3
-#>  3
-#>  3
-#> [ CPULongType{10} ]
-#> 
-
+
+

Examples

+
if (torch_is_installed()) {
+
+a = torch_randn(c(10))
+a
+torch_cummax(a, dim=1)
+}
+#> [[1]]
+#> torch_tensor
+#>  0.9719
+#>  0.9719
+#>  0.9719
+#>  0.9719
+#>  0.9719
+#>  2.4032
+#>  2.4032
+#>  2.4032
+#>  2.4032
+#>  2.4032
+#> [ CPUFloatType{10} ]
+#> 
+#> [[2]]
+#> torch_tensor
+#>  0
+#>  0
+#>  0
+#>  0
+#>  0
+#>  5
+#>  5
+#>  5
+#>  5
+#>  5
+#> [ CPULongType{10} ]
+#> 
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_cummin.html b/dev/reference/torch_cummin.html index dbe981b58..38db46612 100644 --- a/dev/reference/torch_cummin.html +++ b/dev/reference/torch_cummin.html @@ -1,79 +1,18 @@ - - - - - - - -Cummin — torch_cummin • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Cummin — torch_cummin • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_cummin(self, dim)
- -

Arguments

- - - - - - - - - - -
self

(Tensor) the input tensor.

dim

(int) the dimension to do the operation over

- -

cummin(input, dim) -> (Tensor, LongTensor)

+
+
torch_cummin(self, dim)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
dim
+

(int) the dimension to do the operation over

+
+
+

cummin(input, dim) -> (Tensor, LongTensor)

@@ -215,68 +133,67 @@ location of each maximum value found in the dimension dim.

$$ y_i = min(x_1, x_2, x_3, \dots, x_i) $$

+
-

Examples

-
if (torch_is_installed()) {
-
-a = torch_randn(c(10))
-a
-torch_cummin(a, dim=1)
-}
-#> [[1]]
-#> torch_tensor
-#> -0.6391
-#> -1.2281
-#> -1.2281
-#> -1.2281
-#> -1.3487
-#> -1.3487
-#> -1.3487
-#> -1.3487
-#> -1.3487
-#> -1.3487
-#> [ CPUFloatType{10} ]
-#> 
-#> [[2]]
-#> torch_tensor
-#>  0
-#>  1
-#>  1
-#>  1
-#>  4
-#>  4
-#>  4
-#>  4
-#>  4
-#>  4
-#> [ CPULongType{10} ]
-#> 
-
+
+

Examples

+
if (torch_is_installed()) {
+
+a = torch_randn(c(10))
+a
+torch_cummin(a, dim=1)
+}
+#> [[1]]
+#> torch_tensor
+#>  1.5906
+#> -0.5795
+#> -0.7169
+#> -0.7169
+#> -0.7169
+#> -0.7169
+#> -0.7169
+#> -1.2209
+#> -1.2209
+#> -1.2209
+#> [ CPUFloatType{10} ]
+#> 
+#> [[2]]
+#> torch_tensor
+#>  0
+#>  1
+#>  2
+#>  2
+#>  2
+#>  2
+#>  2
+#>  7
+#>  7
+#>  7
+#> [ CPULongType{10} ]
+#> 
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_cumprod.html b/dev/reference/torch_cumprod.html index 099e1e7d3..176a22f78 100644 --- a/dev/reference/torch_cumprod.html +++ b/dev/reference/torch_cumprod.html @@ -1,79 +1,18 @@ - - - - - - - -Cumprod — torch_cumprod • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Cumprod — torch_cumprod • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_cumprod(self, dim, dtype = NULL)
- -

Arguments

- - - - - - - - - - - - - - -
self

(Tensor) the input tensor.

dim

(int) the dimension to do the operation over

dtype

(torch.dtype, optional) the desired data type of returned tensor. If specified, the input tensor is casted to dtype before the operation is performed. This is useful for preventing data type overflows. Default: NULL.

- -

cumprod(input, dim, out=NULL, dtype=NULL) -> Tensor

+
+
torch_cumprod(self, dim, dtype = NULL)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
dim
+

(int) the dimension to do the operation over

+
dtype
+

(torch.dtype, optional) the desired data type of returned tensor. If specified, the input tensor is casted to dtype before the operation is performed. This is useful for preventing data type overflows. Default: NULL.

+
+
+

cumprod(input, dim, out=NULL, dtype=NULL) -> Tensor

@@ -220,52 +136,51 @@ a vector of size N, with elements.

$$ y_i = x_1 \times x_2\times x_3\times \dots \times x_i $$

+
-

Examples

-
if (torch_is_installed()) {
-
-a = torch_randn(c(10))
-a
-torch_cumprod(a, dim=1)
-}
-#> torch_tensor
-#>  7.4728e-01
-#> -1.6046e+00
-#> -3.8913e-01
-#>  3.3774e-01
-#> -5.0653e-03
-#> -5.6490e-03
-#>  1.8383e-04
-#> -2.7820e-05
-#> -8.6142e-06
-#> -1.6616e-05
-#> [ CPUFloatType{10} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+a = torch_randn(c(10))
+a
+torch_cumprod(a, dim=1)
+}
+#> torch_tensor
+#> -0.0460
+#>  0.1204
+#>  0.0138
+#>  0.0022
+#>  0.0026
+#> -0.0002
+#>  0.0002
+#> -0.0001
+#> -0.0000
+#>  0.0000
+#> [ CPUFloatType{10} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_cumsum.html b/dev/reference/torch_cumsum.html index 0f6cf653a..0ad4b5f04 100644 --- a/dev/reference/torch_cumsum.html +++ b/dev/reference/torch_cumsum.html @@ -1,79 +1,18 @@ - - - - - - - -Cumsum — torch_cumsum • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Cumsum — torch_cumsum • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_cumsum(self, dim, dtype = NULL)
- -

Arguments

- - - - - - - - - - - - - - -
self

(Tensor) the input tensor.

dim

(int) the dimension to do the operation over

dtype

(torch.dtype, optional) the desired data type of returned tensor. If specified, the input tensor is casted to dtype before the operation is performed. This is useful for preventing data type overflows. Default: NULL.

- -

cumsum(input, dim, out=NULL, dtype=NULL) -> Tensor

+
+
torch_cumsum(self, dim, dtype = NULL)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
dim
+

(int) the dimension to do the operation over

+
dtype
+

(torch.dtype, optional) the desired data type of returned tensor. If specified, the input tensor is casted to dtype before the operation is performed. This is useful for preventing data type overflows. Default: NULL.

+
+
+

cumsum(input, dim, out=NULL, dtype=NULL) -> Tensor

@@ -220,52 +136,51 @@ a vector of size N, with elements.

$$ y_i = x_1 + x_2 + x_3 + \dots + x_i $$

+
-

Examples

-
if (torch_is_installed()) {
-
-a = torch_randn(c(10))
-a
-torch_cumsum(a, dim=1)
-}
-#> torch_tensor
-#> -0.7437
-#> -1.7625
-#> -2.3490
-#> -1.0311
-#> -1.6541
-#> -0.5724
-#>  0.2588
-#>  0.8501
-#>  0.8480
-#>  0.8757
-#> [ CPUFloatType{10} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+a = torch_randn(c(10))
+a
+torch_cumsum(a, dim=1)
+}
+#> torch_tensor
+#>  1.0243
+#>  2.7605
+#>  1.7986
+#>  0.7469
+#>  0.4758
+#>  1.7117
+#>  0.0738
+#> -0.2902
+#> -0.4753
+#> -0.1214
+#> [ CPUFloatType{10} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_deg2rad.html b/dev/reference/torch_deg2rad.html index ef9d4ef02..e8ae8ded0 100644 --- a/dev/reference/torch_deg2rad.html +++ b/dev/reference/torch_deg2rad.html @@ -1,79 +1,18 @@ - - - - - - - -Deg2rad — torch_deg2rad • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Deg2rad — torch_deg2rad • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_deg2rad(self)
- -

Arguments

- - - - - - -
self

(Tensor) the input tensor.

- -

deg2rad(input, *, out=None) -> Tensor

+
+
torch_deg2rad(self)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
+
+

deg2rad(input, *, out=None) -> Tensor

Returns a new tensor with each of the elements of input converted from angles in degrees to radians.

+
-

Examples

-
if (torch_is_installed()) {
-
-a <- torch_tensor(rbind(c(180.0, -180.0), c(360.0, -360.0), c(90.0, -90.0)))
-torch_deg2rad(a)
-}
-#> torch_tensor
-#>  3.1416 -3.1416
-#>  6.2832 -6.2832
-#>  1.5708 -1.5708
-#> [ CPUFloatType{3,2} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+a <- torch_tensor(rbind(c(180.0, -180.0), c(360.0, -360.0), c(90.0, -90.0)))
+torch_deg2rad(a)
+}
+#> torch_tensor
+#>  3.1416 -3.1416
+#>  6.2832 -6.2832
+#>  1.5708 -1.5708
+#> [ CPUFloatType{3,2} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_dequantize.html b/dev/reference/torch_dequantize.html index 4c40c078d..c54b40071 100644 --- a/dev/reference/torch_dequantize.html +++ b/dev/reference/torch_dequantize.html @@ -1,79 +1,18 @@ - - - - - - - -Dequantize — torch_dequantize • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Dequantize — torch_dequantize • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,55 +111,51 @@

Dequantize

-
torch_dequantize(tensor)
- -

Arguments

- - - - - - -
tensor

(Tensor) A quantized Tensor or a list oof quantized tensors

- -

dequantize(tensor) -> Tensor

+
+
torch_dequantize(tensor)
+
+
+

Arguments

+
tensor
+

(Tensor) A quantized Tensor or a list oof quantized tensors

+
+
+

dequantize(tensor) -> Tensor

Returns an fp32 Tensor by dequantizing a quantized Tensor

-

dequantize(tensors) -> sequence of Tensors

- +
+
+

dequantize(tensors) -> sequence of Tensors

Given a list of quantized Tensors, dequantize them and return a list of fp32 Tensors

+
+
-
- +
- - + + diff --git a/dev/reference/torch_det.html b/dev/reference/torch_det.html index 2458f2799..8f5dce3d0 100644 --- a/dev/reference/torch_det.html +++ b/dev/reference/torch_det.html @@ -1,79 +1,18 @@ - - - - - - - -Det — torch_det • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Det — torch_det • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_det(self)
- -

Arguments

- - - - - - -
self

(Tensor) the input tensor of size (*, n, n) where * is zero or more batch dimensions.

- -

Note

+
+
torch_det(self)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor of size (*, n, n) where * is zero or more batch dimensions.

+
+
+

Note

-
Backward through `det` internally uses SVD results when `input` is
+
Backward through `det` internally uses SVD results when `input` is
 not invertible. In this case, double backward through `det` will be
 unstable in when `input` doesn't have distinct singular values. See
 `~torch.svd` for details.
-
- -

det(input) -> Tensor

+
+
+
+

det(input) -> Tensor

Calculates determinant of a square matrix or batches of square matrices.

+
-

Examples

-
if (torch_is_installed()) {
-
-A = torch_randn(c(3, 3))
-torch_det(A)
-A = torch_randn(c(3, 2, 2))
-A
-A$det()
-}
-#> torch_tensor
-#> -0.7524
-#>  3.0036
-#> -0.7466
-#> [ CPUFloatType{3} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+A = torch_randn(c(3, 3))
+torch_det(A)
+A = torch_randn(c(3, 2, 2))
+A
+A$det()
+}
+#> torch_tensor
+#>  2.1413
+#> -1.0651
+#>  2.5635
+#> [ CPUFloatType{3} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_device.html b/dev/reference/torch_device.html index e26504dc6..984977256 100644 --- a/dev/reference/torch_device.html +++ b/dev/reference/torch_device.html @@ -1,80 +1,19 @@ - - - - - - - -Create a Device object — torch_device • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Create a Device object — torch_device • torch - - - - - - - - + + -
-
- -
- -
+
@@ -191,67 +113,61 @@ is or will be allocated." /> is or will be allocated.

-
torch_device(type, index = NULL)
+
+
torch_device(type, index = NULL)
+
-

Arguments

- - - - - - - - - - -
type

(character) a device type "cuda" or "cpu"

index

(integer) optional device ordinal for the device type. If the device ordinal +

+

Arguments

+
type
+

(character) a device type "cuda" or "cpu"

+
index
+

(integer) optional device ordinal for the device type. If the device ordinal is not present, this object will always represent the current device for the device type, even after torch_cuda_set_device() is called; e.g., a torch_tensor constructed with device 'cuda' is equivalent to 'cuda:X' where X is the result of torch_cuda_current_device().

-

A torch_device can be constructed via a string or via a string and device ordinal

- - -

Examples

-
if (torch_is_installed()) {
-
-# Via string
-torch_device("cuda:1")
-torch_device("cpu")
-torch_device("cuda") # current cuda device
-
-# Via string and device ordinal
-torch_device("cuda", 0)
-torch_device("cpu", 0)
-
-}
-#> torch_device(type='cpu', index=0)
-
+

A torch_device can be constructed via a string or via a string and device ordinal

+
+ +
+

Examples

+
if (torch_is_installed()) {
+
+# Via string
+torch_device("cuda:1")
+torch_device("cpu")
+torch_device("cuda") # current cuda device
+
+# Via string and device ordinal
+torch_device("cuda", 0)
+torch_device("cpu", 0)
+
+}
+#> torch_device(type='cpu', index=0)
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_diag.html b/dev/reference/torch_diag.html index 565462946..fa26b59b9 100644 --- a/dev/reference/torch_diag.html +++ b/dev/reference/torch_diag.html @@ -1,79 +1,18 @@ - - - - - - - -Diag — torch_diag • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Diag — torch_diag • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_diag(self, diagonal = 0L)
- -

Arguments

- - - - - - - - - - -
self

(Tensor) the input tensor.

diagonal

(int, optional) the diagonal to consider

- -

diag(input, diagonal=0, out=NULL) -> Tensor

+
+
torch_diag(self, diagonal = 0L)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
diagonal
+

(int, optional) the diagonal to consider

+
+
+

diag(input, diagonal=0, out=NULL) -> Tensor

-
    -
  • If input is a vector (1-D tensor), then returns a 2-D square tensor +

    • If input is a vector (1-D tensor), then returns a 2-D square tensor with the elements of input as the diagonal.

    • If input is a matrix (2-D tensor), then returns a 1-D tensor with the diagonal elements of input.

    • -
    - -

    The argument diagonal controls which diagonal to consider:

      -
    • If diagonal = 0, it is the main diagonal.

    • +

    The argument diagonal controls which diagonal to consider:

    • If diagonal = 0, it is the main diagonal.

    • If diagonal > 0, it is above the main diagonal.

    • If diagonal < 0, it is below the main diagonal.

    • -
    - +
+
-
- +
- - + + diff --git a/dev/reference/torch_diag_embed.html b/dev/reference/torch_diag_embed.html index f7e5f3160..fb735e238 100644 --- a/dev/reference/torch_diag_embed.html +++ b/dev/reference/torch_diag_embed.html @@ -1,79 +1,18 @@ - - - - - - - -Diag_embed — torch_diag_embed • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Diag_embed — torch_diag_embed • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,31 +111,23 @@

Diag_embed

-
torch_diag_embed(self, offset = 0L, dim1 = -2L, dim2 = -1L)
- -

Arguments

- - - - - - - - - - - - - - - - - - -
self

(Tensor) the input tensor. Must be at least 1-dimensional.

offset

(int, optional) which diagonal to consider. Default: 0 (main diagonal).

dim1

(int, optional) first dimension with respect to which to take diagonal. Default: -2.

dim2

(int, optional) second dimension with respect to which to take diagonal. Default: -1.

- -

diag_embed(input, offset=0, dim1=-2, dim2=-1) -> Tensor

+
+
torch_diag_embed(self, offset = 0L, dim1 = -2L, dim2 = -1L)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor. Must be at least 1-dimensional.

+
offset
+

(int, optional) which diagonal to consider. Default: 0 (main diagonal).

+
dim1
+

(int, optional) first dimension with respect to which to take diagonal. Default: -2.

+
dim2
+

(int, optional) second dimension with respect to which to take diagonal. Default: -1.

+
+
+

diag_embed(input, offset=0, dim1=-2, dim2=-1) -> Tensor

@@ -221,13 +135,10 @@ dim1 and dim2) are filled by input. To facilitate creating batched diagonal matrices, the 2D planes formed by the last two dimensions of the returned tensor are chosen by default.

-

The argument offset controls which diagonal to consider:

    -
  • If offset = 0, it is the main diagonal.

  • +

    The argument offset controls which diagonal to consider:

    • If offset = 0, it is the main diagonal.

    • If offset > 0, it is above the main diagonal.

    • If offset < 0, it is below the main diagonal.

    • -
    - -

    The size of the new matrix will be calculated to make the specified diagonal +

The size of the new matrix will be calculated to make the specified diagonal of the size of the last input dimension. Note that for offset other than \(0\), the order of dim1 and dim2 matters. Exchanging them is equivalent to changing the @@ -236,57 +147,56 @@ sign of offset.

the same arguments yields a matrix identical to input. However, torch_diagonal has different default dimensions, so those need to be explicitly specified.

+
-

Examples

-
if (torch_is_installed()) {
-
-a = torch_randn(c(2, 3))
-torch_diag_embed(a)
-torch_diag_embed(a, offset=1, dim1=1, dim2=3)
-}
-#> torch_tensor
-#> (1,.,.) = 
-#>   0.0000  0.1475  0.0000  0.0000
-#>   0.0000  0.6404  0.0000  0.0000
-#> 
-#> (2,.,.) = 
-#>   0.0000  0.0000  1.2464  0.0000
-#>   0.0000  0.0000 -1.0443  0.0000
-#> 
-#> (3,.,.) = 
-#>   0.0000  0.0000  0.0000  0.2586
-#>   0.0000  0.0000  0.0000  1.2482
-#> 
-#> (4,.,.) = 
-#>   0  0  0  0
-#>   0  0  0  0
-#> [ CPUFloatType{4,2,4} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+a = torch_randn(c(2, 3))
+torch_diag_embed(a)
+torch_diag_embed(a, offset=1, dim1=1, dim2=3)
+}
+#> torch_tensor
+#> (1,.,.) = 
+#>   0.0000 -0.9834  0.0000  0.0000
+#>   0.0000  1.4305  0.0000  0.0000
+#> 
+#> (2,.,.) = 
+#>   0.0000  0.0000  0.8077  0.0000
+#>   0.0000  0.0000 -0.6973  0.0000
+#> 
+#> (3,.,.) = 
+#>   0.0000  0.0000  0.0000 -0.9459
+#>   0.0000  0.0000  0.0000  0.9271
+#> 
+#> (4,.,.) = 
+#>   0  0  0  0
+#>   0  0  0  0
+#> [ CPUFloatType{4,2,4} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_diagflat.html b/dev/reference/torch_diagflat.html index 28761e355..cb2a1304f 100644 --- a/dev/reference/torch_diagflat.html +++ b/dev/reference/torch_diagflat.html @@ -1,79 +1,18 @@ - - - - - - - -Diagflat — torch_diagflat • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Diagflat — torch_diagflat • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,82 +111,71 @@

Diagflat

-
torch_diagflat(self, offset = 0L)
- -

Arguments

- - - - - - - - - - -
self

(Tensor) the input tensor.

offset

(int, optional) the diagonal to consider. Default: 0 (main diagonal).

- -

diagflat(input, offset=0) -> Tensor

+
+
torch_diagflat(self, offset = 0L)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
offset
+

(int, optional) the diagonal to consider. Default: 0 (main diagonal).

+
+
+

diagflat(input, offset=0) -> Tensor

-
    -
  • If input is a vector (1-D tensor), then returns a 2-D square tensor +

    • If input is a vector (1-D tensor), then returns a 2-D square tensor with the elements of input as the diagonal.

    • If input is a tensor with more than one dimension, then returns a 2-D tensor with diagonal elements equal to a flattened input.

    • -
    - -

    The argument offset controls which diagonal to consider:

      -
    • If offset = 0, it is the main diagonal.

    • +

    The argument offset controls which diagonal to consider:

    • If offset = 0, it is the main diagonal.

    • If offset > 0, it is above the main diagonal.

    • If offset < 0, it is below the main diagonal.

    • -
    - - -

    Examples

    -
    if (torch_is_installed()) {
    -
    -a = torch_randn(c(3))
    -a
    -torch_diagflat(a)
    -torch_diagflat(a, 1)
    -a = torch_randn(c(2, 2))
    -a
    -torch_diagflat(a)
    -}
    -#> torch_tensor
    -#>  0.2683  0.0000  0.0000  0.0000
    -#>  0.0000 -0.6468  0.0000  0.0000
    -#>  0.0000  0.0000  0.1648  0.0000
    -#>  0.0000  0.0000  0.0000  1.3355
    -#> [ CPUFloatType{4,4} ]
    -
    +
+ +
+

Examples

+
if (torch_is_installed()) {
+
+a = torch_randn(c(3))
+a
+torch_diagflat(a)
+torch_diagflat(a, 1)
+a = torch_randn(c(2, 2))
+a
+torch_diagflat(a)
+}
+#> torch_tensor
+#>  0.5539  0.0000  0.0000  0.0000
+#>  0.0000  1.0772  0.0000  0.0000
+#>  0.0000  0.0000 -0.2999  0.0000
+#>  0.0000  0.0000  0.0000 -2.5768
+#> [ CPUFloatType{4,4} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_diagonal.html b/dev/reference/torch_diagonal.html index 50e2f0ee6..14608a273 100644 --- a/dev/reference/torch_diagonal.html +++ b/dev/reference/torch_diagonal.html @@ -1,79 +1,18 @@ - - - - - - - -Diagonal — torch_diagonal • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Diagonal — torch_diagonal • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,105 +111,92 @@

Diagonal

-
torch_diagonal(self, outdim, dim1 = 1L, dim2 = 2L, offset = 0L)
- -

Arguments

- - - - - - - - - - - - - - - - - - - - - - -
self

(Tensor) the input tensor. Must be at least 2-dimensional.

outdim

dimension name if self is a named tensor.

dim1

(int, optional) first dimension with respect to which to take diagonal. Default: 0.

dim2

(int, optional) second dimension with respect to which to take diagonal. Default: 1.

offset

(int, optional) which diagonal to consider. Default: 0 (main diagonal).

- -

diagonal(input, offset=0, dim1=0, dim2=1) -> Tensor

+
+
torch_diagonal(self, outdim, dim1 = 1L, dim2 = 2L, offset = 0L)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor. Must be at least 2-dimensional.

+
outdim
+

dimension name if self is a named tensor.

+
dim1
+

(int, optional) first dimension with respect to which to take diagonal. Default: 0.

+
dim2
+

(int, optional) second dimension with respect to which to take diagonal. Default: 1.

+
offset
+

(int, optional) which diagonal to consider. Default: 0 (main diagonal).

+
+
+

diagonal(input, offset=0, dim1=0, dim2=1) -> Tensor

Returns a partial view of input with the its diagonal elements with respect to dim1 and dim2 appended as a dimension at the end of the shape.

-

The argument offset controls which diagonal to consider:

    -
  • If offset = 0, it is the main diagonal.

  • +

    The argument offset controls which diagonal to consider:

    • If offset = 0, it is the main diagonal.

    • If offset > 0, it is above the main diagonal.

    • If offset < 0, it is below the main diagonal.

    • -
    - -

    Applying torch_diag_embed to the output of this function with +

Applying torch_diag_embed to the output of this function with the same arguments yields a diagonal matrix with the diagonal entries of the input. However, torch_diag_embed has different default dimensions, so those need to be explicitly specified.

+
-

Examples

-
if (torch_is_installed()) {
-
-a = torch_randn(c(3, 3))
-a
-torch_diagonal(a, offset = 0)
-torch_diagonal(a, offset = 1)
-x = torch_randn(c(2, 5, 4, 2))
-torch_diagonal(x, offset=-1, dim1=1, dim2=2)
-}
-#> torch_tensor
-#> (1,.,.) = 
-#>   0.3008
-#>  -0.1631
-#> 
-#> (2,.,.) = 
-#>   0.6683
-#>  -1.5185
-#> 
-#> (3,.,.) = 
-#>   1.3402
-#>  -0.8849
-#> 
-#> (4,.,.) = 
-#>  -0.6020
-#>   0.3549
-#> [ CPUFloatType{4,2,1} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+a = torch_randn(c(3, 3))
+a
+torch_diagonal(a, offset = 0)
+torch_diagonal(a, offset = 1)
+x = torch_randn(c(2, 5, 4, 2))
+torch_diagonal(x, offset=-1, dim1=1, dim2=2)
+}
+#> torch_tensor
+#> (1,.,.) = 
+#>  0.01 *
+#>  -5.6102
+#>   -170.4098
+#> 
+#> (2,.,.) = 
+#>   1.7879
+#>   0.4863
+#> 
+#> (3,.,.) = 
+#>  -0.6161
+#>  -0.1745
+#> 
+#> (4,.,.) = 
+#>   0.0258
+#>   0.5843
+#> [ CPUFloatType{4,2,1} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_diff.html b/dev/reference/torch_diff.html index 7696f04c2..065487e89 100644 --- a/dev/reference/torch_diff.html +++ b/dev/reference/torch_diff.html @@ -1,80 +1,19 @@ - - - - - - - -Computes the n-th forward difference along the given dimension. — torch_diff • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Computes the n-th forward difference along the given dimension. — torch_diff • torch - - - - - - - - + + -
-
- -
- -
+
@@ -191,84 +113,73 @@ Higher-order differences are calculated by using torch_diff() recursively." /> Higher-order differences are calculated by using torch_diff() recursively.

-
torch_diff(self, n = 1L, dim = -1L, prepend = list(), append = list())
+
+
torch_diff(self, n = 1L, dim = -1L, prepend = list(), append = list())
+
-

Arguments

- - - - - - - - - - - - - - - - - - - - - - -
self

the tensor to compute the differences on

n

the number of times to recursively compute the difference

dim

the dimension to compute the difference along. Default is the last dimension.

prepend

values to prepend to input along dim before computing the +

+

Arguments

+
self
+

the tensor to compute the differences on

+
n
+

the number of times to recursively compute the difference

+
dim
+

the dimension to compute the difference along. Default is the last dimension.

+
prepend
+

values to prepend to input along dim before computing the difference. Their dimensions must be equivalent to that of input, and their -shapes must match input’s shape except on dim.

append

values to append to input along dim before computing the +shapes must match input’s shape except on dim.

+
append
+

values to append to input along dim before computing the difference. Their dimensions must be equivalent to that of input, and their -shapes must match input’s shape except on dim.

- -

Note

- +shapes must match input’s shape except on dim.

+
+
+

Note

Only n = 1 is currently supported

+
-

Examples

-
if (torch_is_installed()) {
-a <- torch_tensor(c(1,2,3))
-torch_diff(a)
-
-b <- torch_tensor(c(4, 5))
-torch_diff(a, append = b)
-
-c <- torch_tensor(rbind(c(1,2,3), c(3,4,5)))
-torch_diff(c, dim = 1)
-torch_diff(c, dim = 2) 
-
-}
-#> torch_tensor
-#>  1  1
-#>  1  1
-#> [ CPUFloatType{2,2} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+a <- torch_tensor(c(1,2,3))
+torch_diff(a)
+
+b <- torch_tensor(c(4, 5))
+torch_diff(a, append = b)
+
+c <- torch_tensor(rbind(c(1,2,3), c(3,4,5)))
+torch_diff(c, dim = 1)
+torch_diff(c, dim = 2) 
+
+}
+#> torch_tensor
+#>  1  1
+#>  1  1
+#> [ CPUFloatType{2,2} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_digamma.html b/dev/reference/torch_digamma.html index a8934f49b..d9989c2e2 100644 --- a/dev/reference/torch_digamma.html +++ b/dev/reference/torch_digamma.html @@ -1,79 +1,18 @@ - - - - - - - -Digamma — torch_digamma • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Digamma — torch_digamma • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_digamma(self)
- -

Arguments

- - - - - - -
self

(Tensor) the tensor to compute the digamma function on

- -

digamma(input, out=NULL) -> Tensor

+
+
torch_digamma(self)
+
+
+

Arguments

+
self
+

(Tensor) the tensor to compute the digamma function on

+
+
+

digamma(input, out=NULL) -> Tensor

@@ -209,43 +129,42 @@

$$ \psi(x) = \frac{d}{dx} \ln\left(\Gamma\left(x\right)\right) = \frac{\Gamma'(x)}{\Gamma(x)} $$

+
-

Examples

-
if (torch_is_installed()) {
-
-a = torch_tensor(c(1, 0.5))
-torch_digamma(a)
-}
-#> torch_tensor
-#> -0.5772
-#> -1.9635
-#> [ CPUFloatType{2} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+a = torch_tensor(c(1, 0.5))
+torch_digamma(a)
+}
+#> torch_tensor
+#> -0.5772
+#> -1.9635
+#> [ CPUFloatType{2} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_dist.html b/dev/reference/torch_dist.html index 2fe75f1ef..bfd7186b3 100644 --- a/dev/reference/torch_dist.html +++ b/dev/reference/torch_dist.html @@ -1,79 +1,18 @@ - - - - - - - -Dist — torch_dist • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Dist — torch_dist • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_dist(self, other, p = 2L)
- -

Arguments

- - - - - - - - - - - - - - -
self

(Tensor) the input tensor.

other

(Tensor) the Right-hand-side input tensor

p

(float, optional) the norm to be computed

- -

dist(input, other, p=2) -> Tensor

+
+
torch_dist(self, other, p = 2L)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
other
+

(Tensor) the Right-hand-side input tensor

+
p
+

(float, optional) the norm to be computed

+
+
+

dist(input, other, p=2) -> Tensor

Returns the p-norm of (input - other)

The shapes of input and other must be broadcastable .

+
-

Examples

-
if (torch_is_installed()) {
-
-x = torch_randn(c(4))
-x
-y = torch_randn(c(4))
-y
-torch_dist(x, y, 3.5)
-torch_dist(x, y, 3)
-torch_dist(x, y, 0)
-torch_dist(x, y, 1)
-}
-#> torch_tensor
-#> 1.87642
-#> [ CPUFloatType{} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+x = torch_randn(c(4))
+x
+y = torch_randn(c(4))
+y
+torch_dist(x, y, 3.5)
+torch_dist(x, y, 3)
+torch_dist(x, y, 0)
+torch_dist(x, y, 1)
+}
+#> torch_tensor
+#> 7.78286
+#> [ CPUFloatType{} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_div.html b/dev/reference/torch_div.html index 8dd32a13b..e9f78f5a7 100644 --- a/dev/reference/torch_div.html +++ b/dev/reference/torch_div.html @@ -1,79 +1,18 @@ - - - - - - - -Div — torch_div • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Div — torch_div • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_div(self, other, rounding_mode)
+
+
torch_div(self, other, rounding_mode)
+
-

Arguments

- - - - - - - - - - - - - - -
self

(Tensor) the input tensor.

other

(Number) the number to be divided to each element of input

rounding_mode

(str, optional) – Type of rounding applied to the result:

    -
  • NULL - default behavior. Performs no rounding and, if both input and +

    +

    Arguments

    +
    self
    +

    (Tensor) the input tensor.

    +
    other
    +

    (Number) the number to be divided to each element of input

    +
    rounding_mode
    +

    (str, optional) – Type of rounding applied to the result:

    • NULL - default behavior. Performs no rounding and, if both input and other are integer types, promotes the inputs to the default scalar type. Equivalent to true division in Python (the / operator) and NumPy’s np.true_divide.

    • @@ -213,12 +130,10 @@ Equivalent to true division in Python (the / operator) and NumPy’s C-style integer division.

    • "floor" - rounds the results of the division down. Equivalent to floor division in Python (the // operator) and NumPy’s np.floor_divide.

    • -
- -

div(input, other, out=NULL) -> Tensor

- + +
+
+

div(input, other, out=NULL) -> Tensor

@@ -238,13 +153,14 @@ following rules described in the type promotion documentation . If out is specified, the result must be castable to the torch_dtype of the specified output tensor. Integral division by zero leads to undefined behavior.

-

Warning

- +
+
+

Warning

Integer division using div is deprecated, and in a future release div will -perform true division like torch_true_divide(). -Use torch_floor_divide() to perform integer division, +perform true division like torch_true_divide(). +Use torch_floor_divide() to perform integer division, instead.

$$ \mbox{out}_i = \frac{\mbox{input}_i}{\mbox{other}} @@ -255,53 +171,52 @@ described in the type promotion documentation . If out is specified, the result must be castable to the torch_dtype of the specified output tensor. Integral division by zero leads to undefined behavior.

+
-

Examples

-
if (torch_is_installed()) {
-
-a = torch_randn(c(5))
-a
-torch_div(a, 0.5)
-
-
-a = torch_randn(c(4, 4))
-a
-b = torch_randn(c(4))
-b
-torch_div(a, b)
-}
-#> torch_tensor
-#>   1.3734   0.7856   0.3981 -11.5037
-#>  -1.4715  -1.4632   0.6354  16.9294
-#>  -4.8421   0.2883  -1.0024  -7.8869
-#>   2.0493  -0.4843   0.4296 -19.8034
-#> [ CPUFloatType{4,4} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+a = torch_randn(c(5))
+a
+torch_div(a, 0.5)
+
+
+a = torch_randn(c(4, 4))
+a
+b = torch_randn(c(4))
+b
+torch_div(a, b)
+}
+#> torch_tensor
+#> -21.0201  -1.1992  -0.5805  -1.8830
+#> -49.4112  -1.0154  -2.6516   1.1126
+#>  22.5517  -1.3136  -1.4411  -3.0914
+#>  -2.2162   1.9874   0.3000   0.4237
+#> [ CPUFloatType{4,4} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_divide.html b/dev/reference/torch_divide.html index 2e148177a..d0ef796ac 100644 --- a/dev/reference/torch_divide.html +++ b/dev/reference/torch_divide.html @@ -1,79 +1,18 @@ - - - - - - - -Divide — torch_divide • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Divide — torch_divide • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_divide(self, other, rounding_mode)
- -

Arguments

- - - - - - - - - - - - - - -
self

(Tensor) the input tensor.

other

(Number) the number to be divided to each element of input

rounding_mode

(str, optional) – Type of rounding applied to the result:

    -
  • NULL - default behavior. Performs no rounding and, if both input and +

    +
    torch_divide(self, other, rounding_mode)
    +
    + +
    +

    Arguments

    +
    self
    +

    (Tensor) the input tensor.

    +
    other
    +

    (Number) the number to be divided to each element of input

    +
    rounding_mode
    +

    (str, optional) – Type of rounding applied to the result:

    • NULL - default behavior. Performs no rounding and, if both input and other are integer types, promotes the inputs to the default scalar type. Equivalent to true division in Python (the / operator) and NumPy’s np.true_divide.

    • @@ -213,42 +130,37 @@ Equivalent to true division in Python (the / operator) and NumPy’s C-style integer division.

    • "floor" - rounds the results of the division down. Equivalent to floor division in Python (the // operator) and NumPy’s np.floor_divide.

    • -
- -

divide(input, other, *, out=None) -> Tensor

- + +
+
+

divide(input, other, *, out=None) -> Tensor

-

Alias for torch_div().

+

Alias for torch_div().

+
+
-
- +
- - + + diff --git a/dev/reference/torch_dot.html b/dev/reference/torch_dot.html index b4a06f9ca..710bf6dd1 100644 --- a/dev/reference/torch_dot.html +++ b/dev/reference/torch_dot.html @@ -1,79 +1,18 @@ - - - - - - - -Dot — torch_dot • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Dot — torch_dot • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_dot(self, tensor)
- -

Arguments

- - - - - - - - - - -
self

the input tensor

tensor

the other input tensor

- -

Note

+
+
torch_dot(self, tensor)
+
+
+

Arguments

+
self
+

the input tensor

+
tensor
+

the other input tensor

+
+
+

Note

This function does not broadcast .

-

dot(input, tensor) -> Tensor

- +
+
+

dot(input, tensor) -> Tensor

Computes the dot product (inner product) of two tensors.

+
-

Examples

-
if (torch_is_installed()) {
-
-torch_dot(torch_tensor(c(2, 3)), torch_tensor(c(2, 1)))
-}
-#> torch_tensor
-#> 7
-#> [ CPUFloatType{} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+torch_dot(torch_tensor(c(2, 3)), torch_tensor(c(2, 1)))
+}
+#> torch_tensor
+#> 7
+#> [ CPUFloatType{} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_dstack.html b/dev/reference/torch_dstack.html index 9089a6d56..d3e6f5b39 100644 --- a/dev/reference/torch_dstack.html +++ b/dev/reference/torch_dstack.html @@ -1,79 +1,18 @@ - - - - - - - -Dstack — torch_dstack • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Dstack — torch_dstack • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_dstack(tensors)
- -

Arguments

- - - - - - -
tensors

(sequence of Tensors) sequence of tensors to concatenate

- -

dstack(tensors, *, out=None) -> Tensor

+
+
torch_dstack(tensors)
+
+
+

Arguments

+
tensors
+

(sequence of Tensors) sequence of tensors to concatenate

+
+
+

dstack(tensors, *, out=None) -> Tensor

Stack tensors in sequence depthwise (along third axis).

This is equivalent to concatenation along the third axis after 1-D and 2-D -tensors have been reshaped by torch_atleast_3d().

+tensors have been reshaped by torch_atleast_3d().

+
-

Examples

-
if (torch_is_installed()) {
-
-a <- torch_tensor(c(1, 2, 3))
-b <- torch_tensor(c(4, 5, 6))
-torch_dstack(list(a,b))
-a <- torch_tensor(rbind(1,2,3))
-b <- torch_tensor(rbind(4,5,6))
-torch_dstack(list(a,b))
-}
-#> torch_tensor
-#> (1,.,.) = 
-#>   1  4
-#> 
-#> (2,.,.) = 
-#>   2  5
-#> 
-#> (3,.,.) = 
-#>   3  6
-#> [ CPUFloatType{3,1,2} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+a <- torch_tensor(c(1, 2, 3))
+b <- torch_tensor(c(4, 5, 6))
+torch_dstack(list(a,b))
+a <- torch_tensor(rbind(1,2,3))
+b <- torch_tensor(rbind(4,5,6))
+torch_dstack(list(a,b))
+}
+#> torch_tensor
+#> (1,.,.) = 
+#>   1  4
+#> 
+#> (2,.,.) = 
+#>   2  5
+#> 
+#> (3,.,.) = 
+#>   3  6
+#> [ CPUFloatType{3,1,2} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_dtype.html b/dev/reference/torch_dtype.html index aaa7035dd..aa1b7f473 100644 --- a/dev/reference/torch_dtype.html +++ b/dev/reference/torch_dtype.html @@ -1,79 +1,18 @@ - - - - - - - -Torch data types — torch_dtype • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Torch data types — torch_dtype • torch - - - - - - + + - - -
-
- -
- -
+
@@ -189,69 +111,66 @@

Returns the correspondent data type.

-
torch_float32()
+    
+
torch_float32()
 
-torch_float()
+torch_float()
 
-torch_float64()
+torch_float64()
 
-torch_double()
+torch_double()
 
-torch_float16()
+torch_float16()
 
-torch_half()
+torch_half()
 
-torch_uint8()
+torch_uint8()
 
-torch_int8()
+torch_int8()
 
-torch_int16()
+torch_int16()
 
-torch_short()
+torch_short()
 
-torch_int32()
+torch_int32()
 
-torch_int()
+torch_int()
 
-torch_int64()
+torch_int64()
 
-torch_long()
+torch_long()
 
-torch_bool()
+torch_bool()
 
-torch_quint8()
+torch_quint8()
 
-torch_qint8()
-
-torch_qint32()
+torch_qint8() +torch_qint32()
+
+ -
- +
- - + + diff --git a/dev/reference/torch_eig.html b/dev/reference/torch_eig.html index e6dd83566..926670a61 100644 --- a/dev/reference/torch_eig.html +++ b/dev/reference/torch_eig.html @@ -1,79 +1,18 @@ - - - - - - - -Eig — torch_eig • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Eig — torch_eig • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_eig(self, eigenvectors = FALSE)
- -

Arguments

- - - - - - - - - - -
self

(Tensor) the square matrix of shape \((n \times n)\) for which the eigenvalues and eigenvectors will be computed

eigenvectors

(bool) TRUE to compute both eigenvalues and eigenvectors; otherwise, only eigenvalues will be computed

- -

Note

+
+
torch_eig(self, eigenvectors = FALSE)
+
+
+

Arguments

+
self
+

(Tensor) the square matrix of shape \((n \times n)\) for which the eigenvalues and eigenvectors will be computed

+
eigenvectors
+

(bool) TRUE to compute both eigenvalues and eigenvectors; otherwise, only eigenvalues will be computed

+
+
+

Note

-
Since eigenvalues and eigenvectors might be complex, backward pass is supported only
+
Since eigenvalues and eigenvectors might be complex, backward pass is supported only
 for [`torch_symeig`]
-
- -

eig(input, eigenvectors=False, out=NULL) -> (Tensor, Tensor)

+
+
+
+

eig(input, eigenvectors=False, out=NULL) -> (Tensor, Tensor)

Computes the eigenvalues and eigenvectors of a real square matrix.

+
+
-
- +
- - + + diff --git a/dev/reference/torch_einsum.html b/dev/reference/torch_einsum.html index 969cf7c45..d7fd7aa86 100644 --- a/dev/reference/torch_einsum.html +++ b/dev/reference/torch_einsum.html @@ -1,79 +1,18 @@ - - - - - - - -Einsum — torch_einsum • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Einsum — torch_einsum • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_einsum(equation, tensors)
- -

Arguments

- - - - - - - - - - -
equation

(string) The equation is given in terms of lower case letters (indices) to be associated with each dimension of the operands and result. The left hand side lists the operands dimensions, separated by commas. There should be one index letter per tensor dimension. The right hand side follows after -> and gives the indices for the output. If the -> and right hand side are omitted, it implicitly defined as the alphabetically sorted list of all indices appearing exactly once in the left hand side. The indices not apprearing in the output are summed over after multiplying the operands entries. If an index appears several times for the same operand, a diagonal is taken. Ellipses ... represent a fixed number of dimensions. If the right hand side is inferred, the ellipsis dimensions are at the beginning of the output.

tensors

(Tensor) The operands to compute the Einstein sum of.

- -

einsum(equation, *operands) -> Tensor

+
+
torch_einsum(equation, tensors)
+
+
+

Arguments

+
equation
+

(string) The equation is given in terms of lower case letters (indices) to be associated with each dimension of the operands and result. The left hand side lists the operands dimensions, separated by commas. There should be one index letter per tensor dimension. The right hand side follows after -> and gives the indices for the output. If the -> and right hand side are omitted, it implicitly defined as the alphabetically sorted list of all indices appearing exactly once in the left hand side. The indices not apprearing in the output are summed over after multiplying the operands entries. If an index appears several times for the same operand, a diagonal is taken. Ellipses ... represent a fixed number of dimensions. If the right hand side is inferred, the ellipsis dimensions are at the beginning of the output.

+
tensors
+

(Tensor) The operands to compute the Einstein sum of.

+
+
+

einsum(equation, *operands) -> Tensor

This function provides a way of computing multilinear expressions (i.e. sums of products) using the Einstein summation convention.

+
-

Examples

-
if (torch_is_installed()) {
-
-x = torch_randn(c(5))
-y = torch_randn(c(4))
-torch_einsum('i,j->ij', list(x, y))  # outer product
-A = torch_randn(c(3,5,4))
-l = torch_randn(c(2,5))
-r = torch_randn(c(2,4))
-torch_einsum('bn,anm,bm->ba', list(l, A, r)) # compare torch_nn$functional$bilinear
-As = torch_randn(c(3,2,5))
-Bs = torch_randn(c(3,5,4))
-torch_einsum('bij,bjk->bik', list(As, Bs)) # batch matrix multiplication
-A = torch_randn(c(3, 3))
-torch_einsum('ii->i', list(A)) # diagonal
-A = torch_randn(c(4, 3, 3))
-torch_einsum('...ii->...i', list(A)) # batch diagonal
-A = torch_randn(c(2, 3, 4, 5))
-torch_einsum('...ij->...ji', list(A))$shape # batch permute
-
-}
-#> [1] 2 3 5 4
-
+
+

Examples

+
if (torch_is_installed()) {
+
+x = torch_randn(c(5))
+y = torch_randn(c(4))
+torch_einsum('i,j->ij', list(x, y))  # outer product
+A = torch_randn(c(3,5,4))
+l = torch_randn(c(2,5))
+r = torch_randn(c(2,4))
+torch_einsum('bn,anm,bm->ba', list(l, A, r)) # compare torch_nn$functional$bilinear
+As = torch_randn(c(3,2,5))
+Bs = torch_randn(c(3,5,4))
+torch_einsum('bij,bjk->bik', list(As, Bs)) # batch matrix multiplication
+A = torch_randn(c(3, 3))
+torch_einsum('ii->i', list(A)) # diagonal
+A = torch_randn(c(4, 3, 3))
+torch_einsum('...ii->...i', list(A)) # batch diagonal
+A = torch_randn(c(2, 3, 4, 5))
+torch_einsum('...ij->...ji', list(A))$shape # batch permute
+
+}
+#> [1] 2 3 5 4
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_empty.html b/dev/reference/torch_empty.html index d073162ba..14b498e36 100644 --- a/dev/reference/torch_empty.html +++ b/dev/reference/torch_empty.html @@ -1,79 +1,18 @@ - - - - - - - -Empty — torch_empty • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Empty — torch_empty • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_empty(
-  ...,
-  names = NULL,
-  dtype = NULL,
-  layout = torch_strided(),
-  device = NULL,
-  requires_grad = FALSE
-)
- -

Arguments

- - - - - - - - - - - - - - - - - - - - - - - - - - -
...

a sequence of integers defining the shape of the output tensor.

names

optional character vector naming each dimension.

dtype

(torch.dtype, optional) the desired data type of returned tensor. Default: if NULL, uses a global default (see torch_set_default_tensor_type).

layout

(torch.layout, optional) the desired layout of returned Tensor. Default: torch_strided.

device

(torch.device, optional) the desired device of returned tensor. Default: if NULL, uses the current device for the default tensor type (see torch_set_default_tensor_type). device will be the CPU for CPU tensor types and the current CUDA device for CUDA tensor types.

requires_grad

(bool, optional) If autograd should record operations on the returned tensor. Default: FALSE.

- -

empty(*size, out=NULL, dtype=NULL, layout=torch.strided, device=NULL, requires_grad=False, pin_memory=False) -> Tensor

+
+
torch_empty(
+  ...,
+  names = NULL,
+  dtype = NULL,
+  layout = torch_strided(),
+  device = NULL,
+  requires_grad = FALSE
+)
+
+
+

Arguments

+
...
+

a sequence of integers defining the shape of the output tensor.

+
names
+

optional character vector naming each dimension.

+
dtype
+

(torch.dtype, optional) the desired data type of returned tensor. Default: if NULL, uses a global default (see torch_set_default_tensor_type).

+
layout
+

(torch.layout, optional) the desired layout of returned Tensor. Default: torch_strided.

+
device
+

(torch.device, optional) the desired device of returned tensor. Default: if NULL, uses the current device for the default tensor type (see torch_set_default_tensor_type). device will be the CPU for CPU tensor types and the current CUDA device for CUDA tensor types.

+
requires_grad
+

(bool, optional) If autograd should record operations on the returned tensor. Default: FALSE.

+
+
+

empty(*size, out=NULL, dtype=NULL, layout=torch.strided, device=NULL, requires_grad=False, pin_memory=False) -> Tensor

Returns a tensor filled with uninitialized data. The shape of the tensor is defined by the variable argument size.

+
-

Examples

-
if (torch_is_installed()) {
-
-torch_empty(c(2, 3))
-}
-#> torch_tensor
-#>  0  0  0
-#>  0  0  0
-#> [ CPUFloatType{2,3} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+torch_empty(c(2, 3))
+}
+#> torch_tensor
+#> -1.6713e+34  4.5879e-41  3.2762e-35
+#>  4.5880e-41  3.2762e-35  4.5880e-41
+#> [ CPUFloatType{2,3} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_empty_like.html b/dev/reference/torch_empty_like.html index c316d1b94..16c2a441b 100644 --- a/dev/reference/torch_empty_like.html +++ b/dev/reference/torch_empty_like.html @@ -1,79 +1,18 @@ - - - - - - - -Empty_like — torch_empty_like • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Empty_like — torch_empty_like • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,88 +111,75 @@

Empty_like

-
torch_empty_like(
-  input,
-  dtype = NULL,
-  layout = torch_strided(),
-  device = NULL,
-  requires_grad = FALSE,
-  memory_format = torch_preserve_format()
-)
- -

Arguments

- - - - - - - - - - - - - - - - - - - - - - - - - - -
input

(Tensor) the size of input will determine size of the output tensor.

dtype

(torch.dtype, optional) the desired data type of returned Tensor. Default: if NULL, defaults to the dtype of input.

layout

(torch.layout, optional) the desired layout of returned tensor. Default: if NULL, defaults to the layout of input.

device

(torch.device, optional) the desired device of returned tensor. Default: if NULL, defaults to the device of input.

requires_grad

(bool, optional) If autograd should record operations on the returned tensor. Default: FALSE.

memory_format

(torch.memory_format, optional) the desired memory format of returned Tensor. Default: torch_preserve_format.

- -

empty_like(input, dtype=NULL, layout=NULL, device=NULL, requires_grad=False, memory_format=torch.preserve_format) -> Tensor

+
+
torch_empty_like(
+  input,
+  dtype = NULL,
+  layout = torch_strided(),
+  device = NULL,
+  requires_grad = FALSE,
+  memory_format = torch_preserve_format()
+)
+
+
+

Arguments

+
input
+

(Tensor) the size of input will determine size of the output tensor.

+
dtype
+

(torch.dtype, optional) the desired data type of returned Tensor. Default: if NULL, defaults to the dtype of input.

+
layout
+

(torch.layout, optional) the desired layout of returned tensor. Default: if NULL, defaults to the layout of input.

+
device
+

(torch.device, optional) the desired device of returned tensor. Default: if NULL, defaults to the device of input.

+
requires_grad
+

(bool, optional) If autograd should record operations on the returned tensor. Default: FALSE.

+
memory_format
+

(torch.memory_format, optional) the desired memory format of returned Tensor. Default: torch_preserve_format.

+
+
+

empty_like(input, dtype=NULL, layout=NULL, device=NULL, requires_grad=False, memory_format=torch.preserve_format) -> Tensor

Returns an uninitialized tensor with the same size as input. torch_empty_like(input) is equivalent to torch_empty(input.size(), dtype=input.dtype, layout=input.layout, device=input.device).

+
-

Examples

-
if (torch_is_installed()) {
-
-torch_empty(list(2,3), dtype = torch_int64())
-}
-#> torch_tensor
-#> -8.0705e+18 -6.9175e+18  1.4056e+14
-#>  1.4056e+14  1.4056e+14  0.0000e+00
-#> [ CPULongType{2,3} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+torch_empty(list(2,3), dtype = torch_int64())
+}
+#> torch_tensor
+#>  8.5899e+09  1.4062e+14  1.4062e+14
+#>  1.0000e+00  3.4360e+10  1.0000e+00
+#> [ CPULongType{2,3} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_empty_strided.html b/dev/reference/torch_empty_strided.html index 380efc2b8..d709c7ecb 100644 --- a/dev/reference/torch_empty_strided.html +++ b/dev/reference/torch_empty_strided.html @@ -1,79 +1,18 @@ - - - - - - - -Empty_strided — torch_empty_strided • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Empty_strided — torch_empty_strided • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,51 +111,37 @@

Empty_strided

-
torch_empty_strided(
-  size,
-  stride,
-  dtype = NULL,
-  layout = torch_strided(),
-  device = NULL,
-  requires_grad = FALSE,
-  pin_memory = FALSE
-)
- -

Arguments

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
size

(tuple of ints) the shape of the output tensor

stride

(tuple of ints) the strides of the output tensor

dtype

(torch.dtype, optional) the desired data type of returned tensor. Default: if NULL, uses a global default (see torch_set_default_tensor_type).

layout

(torch.layout, optional) the desired layout of returned Tensor. Default: torch_strided.

device

(torch.device, optional) the desired device of returned tensor. Default: if NULL, uses the current device for the default tensor type (see torch_set_default_tensor_type). device will be the CPU for CPU tensor types and the current CUDA device for CUDA tensor types.

requires_grad

(bool, optional) If autograd should record operations on the returned tensor. Default: FALSE.

pin_memory

(bool, optional) If set, returned tensor would be allocated in the pinned memory. Works only for CPU tensors. Default: FALSE.

- -

empty_strided(size, stride, dtype=NULL, layout=NULL, device=NULL, requires_grad=False, pin_memory=False) -> Tensor

+
+
torch_empty_strided(
+  size,
+  stride,
+  dtype = NULL,
+  layout = torch_strided(),
+  device = NULL,
+  requires_grad = FALSE,
+  pin_memory = FALSE
+)
+
+
+

Arguments

+
size
+

(tuple of ints) the shape of the output tensor

+
stride
+

(tuple of ints) the strides of the output tensor

+
dtype
+

(torch.dtype, optional) the desired data type of returned tensor. Default: if NULL, uses a global default (see torch_set_default_tensor_type).

+
layout
+

(torch.layout, optional) the desired layout of returned Tensor. Default: torch_strided.

+
device
+

(torch.device, optional) the desired device of returned tensor. Default: if NULL, uses the current device for the default tensor type (see torch_set_default_tensor_type). device will be the CPU for CPU tensor types and the current CUDA device for CUDA tensor types.

+
requires_grad
+

(bool, optional) If autograd should record operations on the returned tensor. Default: FALSE.

+
pin_memory
+

(bool, optional) If set, returned tensor would be allocated in the pinned memory. Works only for CPU tensors. Default: FALSE.

+
+
+

empty_strided(size, stride, dtype=NULL, layout=NULL, device=NULL, requires_grad=False, pin_memory=False) -> Tensor

@@ -241,50 +149,50 @@ defined by the variable argument size and stride respectively. torch_empty_strided(size, stride) is equivalent to torch_empty(size).as_strided(size, stride).

-

Warning

- +
+
+

Warning

More than one element of the created tensor may refer to a single memory location. As a result, in-place operations (especially ones that are vectorized) may result in incorrect behavior. If you need to write to the tensors, please clone them first.

+
-

Examples

-
if (torch_is_installed()) {
-
-a = torch_empty_strided(list(2, 3), list(1, 2))
-a
-a$stride(1)
-a$size(1)
-}
-#> [1] 2
-
+
+

Examples

+
if (torch_is_installed()) {
+
+a = torch_empty_strided(list(2, 3), list(1, 2))
+a
+a$stride(1)
+a$size(1)
+}
+#> [1] 2
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_eq.html b/dev/reference/torch_eq.html index 200c256d9..8cd959be4 100644 --- a/dev/reference/torch_eq.html +++ b/dev/reference/torch_eq.html @@ -1,79 +1,18 @@ - - - - - - - -Eq — torch_eq • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Eq — torch_eq • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_eq(self, other)
- -

Arguments

- - - - - - - - - - -
self

(Tensor) the tensor to compare

other

(Tensor or float) the tensor or value to compare -Must be a ByteTensor

- -

eq(input, other, out=NULL) -> Tensor

+
+
torch_eq(self, other)
+
+
+

Arguments

+
self
+

(Tensor) the tensor to compare

+
other
+

(Tensor or float) the tensor or value to compare +Must be a ByteTensor

+
+
+

eq(input, other, out=NULL) -> Tensor

Computes element-wise equality

The second argument can be a number or a tensor whose shape is broadcastable with the first argument.

+
-

Examples

-
if (torch_is_installed()) {
-
-torch_eq(torch_tensor(c(1,2,3,4)), torch_tensor(c(1, 3, 2, 4)))
-}
-#> torch_tensor
-#>  1
-#>  0
-#>  0
-#>  1
-#> [ CPUBoolType{4} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+torch_eq(torch_tensor(c(1,2,3,4)), torch_tensor(c(1, 3, 2, 4)))
+}
+#> torch_tensor
+#>  1
+#>  0
+#>  0
+#>  1
+#> [ CPUBoolType{4} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_equal.html b/dev/reference/torch_equal.html index 5ca70ed06..ff98182f0 100644 --- a/dev/reference/torch_equal.html +++ b/dev/reference/torch_equal.html @@ -1,79 +1,18 @@ - - - - - - - -Equal — torch_equal • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Equal — torch_equal • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_equal(self, other)
- -

Arguments

- - - - - - - - - - -
self

the input tensor

other

the other input tensor

- -

equal(input, other) -> bool

+
+
torch_equal(self, other)
+
+
+

Arguments

+
self
+

the input tensor

+
other
+

the other input tensor

+
+
+

equal(input, other) -> bool

TRUE if two tensors have the same size and elements, FALSE otherwise.

+
-

Examples

-
if (torch_is_installed()) {
-
-torch_equal(torch_tensor(c(1, 2)), torch_tensor(c(1, 2)))
-}
-#> [1] TRUE
-
+
+

Examples

+
if (torch_is_installed()) {
+
+torch_equal(torch_tensor(c(1, 2)), torch_tensor(c(1, 2)))
+}
+#> [1] TRUE
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_erf.html b/dev/reference/torch_erf.html index 819abbead..bb0040f57 100644 --- a/dev/reference/torch_erf.html +++ b/dev/reference/torch_erf.html @@ -1,79 +1,18 @@ - - - - - - - -Erf — torch_erf • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Erf — torch_erf • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_erf(self)
- -

Arguments

- - - - - - -
self

(Tensor) the input tensor.

- -

erf(input, out=NULL) -> Tensor

+
+
torch_erf(self)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
+
+

erf(input, out=NULL) -> Tensor

@@ -209,43 +129,42 @@

$$ \mathrm{erf}(x) = \frac{2}{\sqrt{\pi}} \int_{0}^{x} e^{-t^2} dt $$

+
-

Examples

-
if (torch_is_installed()) {
-
-torch_erf(torch_tensor(c(0, -1., 10.)))
-}
-#> torch_tensor
-#>  0.0000
-#> -0.8427
-#>  1.0000
-#> [ CPUFloatType{3} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+torch_erf(torch_tensor(c(0, -1., 10.)))
+}
+#> torch_tensor
+#>  0.0000
+#> -0.8427
+#>  1.0000
+#> [ CPUFloatType{3} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_erfc.html b/dev/reference/torch_erfc.html index 2aa55847f..1b9771149 100644 --- a/dev/reference/torch_erfc.html +++ b/dev/reference/torch_erfc.html @@ -1,79 +1,18 @@ - - - - - - - -Erfc — torch_erfc • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Erfc — torch_erfc • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_erfc(self)
- -

Arguments

- - - - - - -
self

(Tensor) the input tensor.

- -

erfc(input, out=NULL) -> Tensor

+
+
torch_erfc(self)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
+
+

erfc(input, out=NULL) -> Tensor

@@ -210,43 +130,42 @@ The complementary error function is defined as follows:

$$ \mathrm{erfc}(x) = 1 - \frac{2}{\sqrt{\pi}} \int_{0}^{x} e^{-t^2} dt $$

+
-

Examples

-
if (torch_is_installed()) {
-
-torch_erfc(torch_tensor(c(0, -1., 10.)))
-}
-#> torch_tensor
-#>  1.0000e+00
-#>  1.8427e+00
-#>  1.4013e-45
-#> [ CPUFloatType{3} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+torch_erfc(torch_tensor(c(0, -1., 10.)))
+}
+#> torch_tensor
+#>  1.0000e+00
+#>  1.8427e+00
+#>  1.4013e-45
+#> [ CPUFloatType{3} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_erfinv.html b/dev/reference/torch_erfinv.html index 319213a23..a62f045a6 100644 --- a/dev/reference/torch_erfinv.html +++ b/dev/reference/torch_erfinv.html @@ -1,79 +1,18 @@ - - - - - - - -Erfinv — torch_erfinv • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Erfinv — torch_erfinv • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_erfinv(self)
- -

Arguments

- - - - - - -
self

(Tensor) the input tensor.

- -

erfinv(input, out=NULL) -> Tensor

+
+
torch_erfinv(self)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
+
+

erfinv(input, out=NULL) -> Tensor

@@ -210,43 +130,42 @@ The inverse error function is defined in the range \((-1, 1)\) as:

$$ \mathrm{erfinv}(\mathrm{erf}(x)) = x $$

+
-

Examples

-
if (torch_is_installed()) {
-
-torch_erfinv(torch_tensor(c(0, 0.5, -1.)))
-}
-#> torch_tensor
-#>  0.0000
-#>  0.4769
-#>    -inf
-#> [ CPUFloatType{3} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+torch_erfinv(torch_tensor(c(0, 0.5, -1.)))
+}
+#> torch_tensor
+#>  0.0000
+#>  0.4769
+#>    -inf
+#> [ CPUFloatType{3} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_exp.html b/dev/reference/torch_exp.html index de97c9367..9d3f5f12c 100644 --- a/dev/reference/torch_exp.html +++ b/dev/reference/torch_exp.html @@ -1,79 +1,18 @@ - - - - - - - -Exp — torch_exp • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Exp — torch_exp • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_exp(self)
- -

Arguments

- - - - - - -
self

(Tensor) the input tensor.

- -

exp(input, out=NULL) -> Tensor

+
+
torch_exp(self)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
+
+

exp(input, out=NULL) -> Tensor

@@ -210,42 +130,41 @@ of the input tensor input.

$$ y_{i} = e^{x_{i}} $$

+
-

Examples

-
if (torch_is_installed()) {
-
-torch_exp(torch_tensor(c(0, log(2))))
-}
-#> torch_tensor
-#>  1
-#>  2
-#> [ CPUFloatType{2} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+torch_exp(torch_tensor(c(0, log(2))))
+}
+#> torch_tensor
+#>  1
+#>  2
+#> [ CPUFloatType{2} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_exp2.html b/dev/reference/torch_exp2.html index afb76ab80..b16055a51 100644 --- a/dev/reference/torch_exp2.html +++ b/dev/reference/torch_exp2.html @@ -1,79 +1,18 @@ - - - - - - - -Exp2 — torch_exp2 • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Exp2 — torch_exp2 • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_exp2(self)
- -

Arguments

- - - - - - -
self

(Tensor) the input tensor.

- -

exp2(input, *, out=None) -> Tensor

+
+
torch_exp2(self)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
+
+

exp2(input, *, out=None) -> Tensor

@@ -209,44 +129,43 @@

$$ y_{i} = 2^{x_{i}} $$

+
-

Examples

-
if (torch_is_installed()) {
-
-torch_exp2(torch_tensor(c(0, log2(2.), 3, 4)))
-}
-#> torch_tensor
-#>   1
-#>   2
-#>   8
-#>  16
-#> [ CPUFloatType{4} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+torch_exp2(torch_tensor(c(0, log2(2.), 3, 4)))
+}
+#> torch_tensor
+#>   1
+#>   2
+#>   8
+#>  16
+#> [ CPUFloatType{4} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_expm1.html b/dev/reference/torch_expm1.html index 44f3d2723..b25d4a922 100644 --- a/dev/reference/torch_expm1.html +++ b/dev/reference/torch_expm1.html @@ -1,79 +1,18 @@ - - - - - - - -Expm1 — torch_expm1 • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Expm1 — torch_expm1 • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_expm1(self)
- -

Arguments

- - - - - - -
self

(Tensor) the input tensor.

- -

expm1(input, out=NULL) -> Tensor

+
+
torch_expm1(self)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
+
+

expm1(input, out=NULL) -> Tensor

@@ -210,42 +130,41 @@ of input.

$$ y_{i} = e^{x_{i}} - 1 $$

+
-

Examples

-
if (torch_is_installed()) {
-
-torch_expm1(torch_tensor(c(0, log(2))))
-}
-#> torch_tensor
-#>  0
-#>  1
-#> [ CPUFloatType{2} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+torch_expm1(torch_tensor(c(0, log(2))))
+}
+#> torch_tensor
+#>  0
+#>  1
+#> [ CPUFloatType{2} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_eye.html b/dev/reference/torch_eye.html index ef63173a3..31e1f04c9 100644 --- a/dev/reference/torch_eye.html +++ b/dev/reference/torch_eye.html @@ -1,79 +1,18 @@ - - - - - - - -Eye — torch_eye • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Eye — torch_eye • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_eye(
-  n,
-  m = n,
-  dtype = NULL,
-  layout = torch_strided(),
-  device = NULL,
-  requires_grad = FALSE
-)
- -

Arguments

- - - - - - - - - - - - - - - - - - - - - - - - - - -
n

(int) the number of rows

m

(int, optional) the number of columns with default being n

dtype

(torch.dtype, optional) the desired data type of returned tensor. Default: if NULL, uses a global default (see torch_set_default_tensor_type).

layout

(torch.layout, optional) the desired layout of returned Tensor. Default: torch_strided.

device

(torch.device, optional) the desired device of returned tensor. Default: if NULL, uses the current device for the default tensor type (see torch_set_default_tensor_type). device will be the CPU for CPU tensor types and the current CUDA device for CUDA tensor types.

requires_grad

(bool, optional) If autograd should record operations on the returned tensor. Default: FALSE.

- -

eye(n, m=NULL, out=NULL, dtype=NULL, layout=torch.strided, device=NULL, requires_grad=False) -> Tensor

+
+
torch_eye(
+  n,
+  m = n,
+  dtype = NULL,
+  layout = torch_strided(),
+  device = NULL,
+  requires_grad = FALSE
+)
+
+
+

Arguments

+
n
+

(int) the number of rows

+
m
+

(int, optional) the number of columns with default being n

+
dtype
+

(torch.dtype, optional) the desired data type of returned tensor. Default: if NULL, uses a global default (see torch_set_default_tensor_type).

+
layout
+

(torch.layout, optional) the desired layout of returned Tensor. Default: torch_strided.

+
device
+

(torch.device, optional) the desired device of returned tensor. Default: if NULL, uses the current device for the default tensor type (see torch_set_default_tensor_type). device will be the CPU for CPU tensor types and the current CUDA device for CUDA tensor types.

+
requires_grad
+

(bool, optional) If autograd should record operations on the returned tensor. Default: FALSE.

+
+
+

eye(n, m=NULL, out=NULL, dtype=NULL, layout=torch.strided, device=NULL, requires_grad=False) -> Tensor

Returns a 2-D tensor with ones on the diagonal and zeros elsewhere.

+
-

Examples

-
if (torch_is_installed()) {
-
-torch_eye(3)
-}
-#> torch_tensor
-#>  1  0  0
-#>  0  1  0
-#>  0  0  1
-#> [ CPUFloatType{3,3} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+torch_eye(3)
+}
+#> torch_tensor
+#>  1  0  0
+#>  0  1  0
+#>  0  0  1
+#> [ CPUFloatType{3,3} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_fft.html b/dev/reference/torch_fft.html deleted file mode 100644 index f56e51f26..000000000 --- a/dev/reference/torch_fft.html +++ /dev/null @@ -1,322 +0,0 @@ - - - - - - - - -Fft — torch_fft • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - -
- -
-
- - -
-

Fft

-
- -
torch_fft(self, signal_ndim, normalized = FALSE)
- -

Arguments

- - - - - - - - - - - - - - -
self

(Tensor) the input tensor of at least signal_ndim + 1 dimensions

signal_ndim

(int) the number of dimensions in each signal. signal_ndim can only be 1, 2 or 3

normalized

(bool, optional) controls whether to return normalized results. Default: FALSE

- -

Note

- - -
For CUDA tensors, an LRU cache is used for cuFFT plans to speed up
-repeatedly running FFT methods on tensors of same geometry with same
-configuration. See cufft-plan-cache for more details on how to
-monitor and control the cache.
-
- -

fft(input, signal_ndim, normalized=False) -> Tensor

- - - - -

Complex-to-complex Discrete Fourier Transform

-

This method computes the complex-to-complex discrete Fourier transform. -Ignoring the batch dimensions, it computes the following expression:

-

$$ - X[\omega_1, \dots, \omega_d] = - \sum_{n_1=0}^{N_1-1} \dots \sum_{n_d=0}^{N_d-1} x[n_1, \dots, n_d] - e^{-j\ 2 \pi \sum_{i=0}^d \frac{\omega_i n_i}{N_i}}, -$$ -where \(d\) = signal_ndim is number of dimensions for the -signal, and \(N_i\) is the size of signal dimension \(i\).

-

This method supports 1D, 2D and 3D complex-to-complex transforms, indicated -by signal_ndim. input must be a tensor with last dimension -of size 2, representing the real and imaginary components of complex -numbers, and should have at least signal_ndim + 1 dimensions with optionally -arbitrary number of leading batch dimensions. If normalized is set to -TRUE, this normalizes the result by dividing it with -\(\sqrt{\prod_{i=1}^K N_i}\) so that the operator is unitary.

-

Returns the real and the imaginary parts together as one tensor of the same -shape of input.

-

The inverse of this function is torch_ifft.

-

Warning

- - - -

For CPU tensors, this method is currently only available with MKL. Use -torch_backends.mkl.is_available to check if MKL is installed.

- -

Examples

-
if (torch_is_installed()) { - -# unbatched 2D FFT -x = torch_randn(c(4, 3, 2)) -torch_fft(x, 2) -# batched 1D FFT -torch_fft(x, 1) -# arbitrary number of batch dimensions, 2D FFT -x = torch_randn(c(3, 3, 5, 5, 2)) -torch_fft(x, 2) - -} -
#> torch_tensor -#> (1,1,1,.,.) = -#> 5.1798 -0.9818 -#> -1.6249 10.5638 -#> 0.0123 3.9055 -#> 5.1700 -8.4138 -#> -4.8670 5.2947 -#> -#> (2,1,1,.,.) = -#> -11.6410 2.5917 -#> -3.6874 3.6093 -#> -1.0265 -0.2814 -#> 8.0958 -1.7365 -#> 1.2423 2.8675 -#> -#> (3,1,1,.,.) = -#> -5.5626 4.0090 -#> 2.2682 -11.9331 -#> -2.7152 8.0993 -#> 5.8430 1.8109 -#> 7.8418 5.9927 -#> -#> (1,2,1,.,.) = -#> 4.1790 -2.7687 -#> 0.7335 -1.0919 -#> -5.1091 12.8679 -#> 0.4303 5.3978 -#> -0.1444 -1.7745 -#> -#> (2,2,1,.,.) = -#> 0.8005 -4.2031 -#> ... [the output was truncated (use n=-1 to disable)] -#> [ CPUFloatType{3,3,5,5,2} ]
-
- -
- - -
- - -
-

Site built with pkgdown 1.6.1.

-
- -
-
- - - - - - - - diff --git a/dev/reference/torch_fft_fft.html b/dev/reference/torch_fft_fft.html index 821e569af..15e73c4de 100644 --- a/dev/reference/torch_fft_fft.html +++ b/dev/reference/torch_fft_fft.html @@ -1,79 +1,18 @@ - - - - - - - -Fft — torch_fft_fft • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Fft — torch_fft_fft • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,86 +111,76 @@

Computes the one dimensional discrete Fourier transform of input.

-
torch_fft_fft(self, n = NULL, dim = -1L, norm = NULL)
+
+
torch_fft_fft(self, n = NULL, dim = -1L, norm = NULL)
+
-

Arguments

- - - - - - - - - - - - - - - - - - -
self

(Tensor) the input tensor

n

(int) Signal length. If given, the input will either be zero-padded -or trimmed to this length before computing the FFT.

dim

(int, optional) The dimension along which to take the one dimensional FFT.

norm

(str, optional) Normalization mode. For the forward transform, these -correspond to:

    -
  • "forward" - normalize by 1/n

  • +
    +

    Arguments

    +
    self
    +

    (Tensor) the input tensor

    +
    n
    +

    (int) Signal length. If given, the input will either be zero-padded +or trimmed to this length before computing the FFT.

    +
    dim
    +

    (int, optional) The dimension along which to take the one dimensional FFT.

    +
    norm
    +

    (str, optional) Normalization mode. For the forward transform, these +correspond to:

    • "forward" - normalize by 1/n

    • "backward" - no normalization

    • "ortho" - normalize by 1/sqrt(n) (making the FFT orthonormal) Calling the backward transform (ifft()) with the same normalization mode will apply an overall normalization of 1/n between the two transforms. This is required to make IFFT the exact inverse. Default is "backward" (no normalization).

    • -
- -

Note

- + +
+
+

Note

The Fourier domain representation of any real signal satisfies the Hermitian property: X[i] = conj(X[-i]). This function always returns both the positive and negative frequency terms even though, for real inputs, the negative frequencies are redundant. rfft() returns the more compact one-sided representation where only the positive frequencies are returned.

+
-

Examples

-
if (torch_is_installed()) {
-t <- torch_arange(start = 0, end = 3)
-t
-torch_fft_fft(t, norm = "backward")
-
-}
-#> torch_tensor
-#>  6
-#> -2
-#> -2
-#> -2
-#> [ CPUComplexFloatType{4} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+t <- torch_arange(start = 0, end = 3)
+t
+torch_fft_fft(t, norm = "backward")
+
+}
+#> torch_tensor
+#>  6
+#> -2
+#> -2
+#> -2
+#> [ CPUComplexFloatType{4} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_fft_ifft.html b/dev/reference/torch_fft_ifft.html index 60e8f3a49..8dc5a3dd3 100644 --- a/dev/reference/torch_fft_ifft.html +++ b/dev/reference/torch_fft_ifft.html @@ -1,79 +1,18 @@ - - - - - - - -Ifft — torch_fft_ifft • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Ifft — torch_fft_ifft • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,82 +111,71 @@

Computes the one dimensional inverse discrete Fourier transform of input.

-
torch_fft_ifft(self, n = NULL, dim = -1L, norm = NULL)
+
+
torch_fft_ifft(self, n = NULL, dim = -1L, norm = NULL)
+
-

Arguments

- - - - - - - - - - - - - - - - - - -
self

(Tensor) the input tensor

n

(int, optional) – Signal length. If given, the input will either be -zero-padded or trimmed to this length before computing the IFFT.

dim

(int, optional) – The dimension along which to take the one -dimensional IFFT.

norm

(str, optional) – Normalization mode. For the backward transform, -these correspond to:

    -
  • "forward" - no normalization

  • +
    +

    Arguments

    +
    self
    +

    (Tensor) the input tensor

    +
    n
    +

    (int, optional) – Signal length. If given, the input will either be +zero-padded or trimmed to this length before computing the IFFT.

    +
    dim
    +

    (int, optional) – The dimension along which to take the one +dimensional IFFT.

    +
    norm
    +

    (str, optional) – Normalization mode. For the backward transform, +these correspond to:

    • "forward" - no normalization

    • "backward" - normalize by 1/n

    • "ortho" - normalize by 1/sqrt(n) (making the IFFT orthonormal) Calling the forward transform with the same normalization mode will apply an overall normalization of 1/n between the two transforms. This is required to make ifft() the exact inverse. Default is "backward" (normalize by 1/n).

    • -
- - -

Examples

-
if (torch_is_installed()) {
-t <- torch_arange(start = 0, end = 3)
-t
-x <- torch_fft_fft(t, norm = "backward")
-torch_fft_ifft(x)
-
-
-}
-#> torch_tensor
-#>  0
-#>  1
-#>  2
-#>  3
-#> [ CPUComplexFloatType{4} ]
-
+ +
+ +
+

Examples

+
if (torch_is_installed()) {
+t <- torch_arange(start = 0, end = 3)
+t
+x <- torch_fft_fft(t, norm = "backward")
+torch_fft_ifft(x)
+
+
+}
+#> torch_tensor
+#>  0
+#>  1
+#>  2
+#>  3
+#> [ CPUComplexFloatType{4} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_fft_irfft.html b/dev/reference/torch_fft_irfft.html index 2e6e08167..1214094db 100644 --- a/dev/reference/torch_fft_irfft.html +++ b/dev/reference/torch_fft_irfft.html @@ -1,82 +1,21 @@ - - - - - - - -Irfft — torch_fft_irfft • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Irfft — torch_fft_irfft • torch - - - - - - - - - - - - - - - - - + + -
-
- -
- -
+
-

Computes the inverse of torch_fft_rfft(). +

Computes the inverse of torch_fft_rfft(). Input is interpreted as a one-sided Hermitian signal in the Fourier domain, -as produced by torch_fft_rfft(). By the Hermitian property, the output will +as produced by torch_fft_rfft(). By the Hermitian property, the output will be real-valued.

-
torch_fft_irfft(self, n = NULL, dim = -1L, norm = NULL)
+
+
torch_fft_irfft(self, n = NULL, dim = -1L, norm = NULL)
+
-

Arguments

- - - - - - - - - - - - - - - - - - -
self

(Tensor) the input tensor representing a half-Hermitian signal

n

(int) Output signal length. This determines the length of the output +

+

Arguments

+
self
+

(Tensor) the input tensor representing a half-Hermitian signal

+
n
+

(int) Output signal length. This determines the length of the output signal. If given, the input will either be zero-padded or trimmed to this -length before computing the real IFFT. Defaults to even output: n=2*(input.size(dim) - 1).

dim

(int, optional) – The dimension along which to take the one -dimensional real IFFT.

norm

(str, optional) – Normalization mode. For the backward transform, -these correspond to:

    -
  • "forward" - no normalization

  • +length before computing the real IFFT. Defaults to even output: n=2*(input.size(dim) - 1).

    +
    dim
    +

    (int, optional) – The dimension along which to take the one +dimensional real IFFT.

    +
    norm
    +

    (str, optional) – Normalization mode. For the backward transform, +these correspond to:

    • "forward" - no normalization

    • "backward" - normalize by 1/n

    • "ortho" - normalize by 1/sqrt(n) (making the real IFFT orthonormal) -Calling the forward transform (torch_fft_rfft()) with the same normalization +Calling the forward transform (torch_fft_rfft()) with the same normalization mode will apply an overall normalization of 1/n between the two transforms. This is required to make irfft() the exact inverse. Default is "backward" (normalize by 1/n).

    • -
- -

Note

- + +
+
+

Note

Some input frequencies must be real-valued to satisfy the Hermitian property. In these cases the imaginary component will be ignored. For example, any imaginary component in the zero-frequency term cannot be represented in a real @@ -241,48 +154,47 @@ original data, as given by n. This is because each input shape could correspond to either an odd or even length signal. By default, the signal is assumed to be even length and odd signals will not round-trip properly. So, it is recommended to always pass the signal length n.

+
-

Examples

-
if (torch_is_installed()) {
-t <- torch_arange(start = 0, end = 4)
-x <- torch_fft_rfft(t)
-torch_fft_irfft(x)
-torch_fft_irfft(x, n = t$numel())
-
-}
-#> torch_tensor
-#>  0
-#>  1
-#>  2
-#>  3
-#>  4
-#> [ CPUFloatType{5} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+t <- torch_arange(start = 0, end = 4)
+x <- torch_fft_rfft(t)
+torch_fft_irfft(x)
+torch_fft_irfft(x, n = t$numel())
+
+}
+#> torch_tensor
+#>  0
+#>  1
+#>  2
+#>  3
+#>  4
+#> [ CPUFloatType{5} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_fft_rfft.html b/dev/reference/torch_fft_rfft.html index aed081b71..7ece690e4 100644 --- a/dev/reference/torch_fft_rfft.html +++ b/dev/reference/torch_fft_rfft.html @@ -1,79 +1,18 @@ - - - - - - - -Rfft — torch_fft_rfft • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Rfft — torch_fft_rfft • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,83 +111,73 @@

Computes the one dimensional Fourier transform of real-valued input.

-
torch_fft_rfft(self, n = NULL, dim = -1L, norm = NULL)
+
+
torch_fft_rfft(self, n = NULL, dim = -1L, norm = NULL)
+
-

Arguments

- - - - - - - - - - - - - - - - - - -
self

(Tensor) the real input tensor

n

(int) Signal length. If given, the input will either be zero-padded -or trimmed to this length before computing the real FFT.

dim

(int, optional) – The dimension along which to take the one -dimensional real FFT.

norm

norm (str, optional) – Normalization mode. For the forward -transform, these correspond to:

    -
  • "forward" - normalize by 1/n

  • +
    +

    Arguments

    +
    self
    +

    (Tensor) the real input tensor

    +
    n
    +

    (int) Signal length. If given, the input will either be zero-padded +or trimmed to this length before computing the real FFT.

    +
    dim
    +

    (int, optional) – The dimension along which to take the one +dimensional real FFT.

    +
    norm
    +

    norm (str, optional) – Normalization mode. For the forward +transform, these correspond to:

    • "forward" - normalize by 1/n

    • "backward" - no normalization

    • "ortho" - normalize by 1/sqrt(n) (making the FFT orthonormal) -Calling the backward transform (torch_fft_irfft()) with the same +Calling the backward transform (torch_fft_irfft()) with the same normalization mode will apply an overall normalization of 1/n between the two transforms. This is required to make irfft() the exact inverse. Default is "backward" (no normalization).

    • -
- -

Details

- + +
+
+

Details

The FFT of a real signal is Hermitian-symmetric, X[i] = conj(X[-i]) so the output contains only the positive frequencies below the Nyquist frequency. -To compute the full output, use torch_fft_fft().

+To compute the full output, use torch_fft_fft().

+
-

Examples

-
if (torch_is_installed()) {
-t <- torch_arange(start = 0, end = 3)
-torch_fft_rfft(t)
-
-}
-#> torch_tensor
-#>  6
-#> -2
-#> -2
-#> [ CPUComplexFloatType{3} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+t <- torch_arange(start = 0, end = 3)
+torch_fft_rfft(t)
+
+}
+#> torch_tensor
+#>  6
+#> -2
+#> -2
+#> [ CPUComplexFloatType{3} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_finfo.html b/dev/reference/torch_finfo.html index fc96713c1..c2612fe30 100644 --- a/dev/reference/torch_finfo.html +++ b/dev/reference/torch_finfo.html @@ -1,80 +1,19 @@ - - - - - - - -Floating point type info — torch_finfo • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Floating point type info — torch_finfo • torch - - - - - - + + - - -
-
- -
- -
+
@@ -191,43 +113,37 @@ floating point torch.dtype" /> floating point torch.dtype

-
torch_finfo(dtype)
- -

Arguments

- - - - - - -
dtype

dtype to check information

+
+
torch_finfo(dtype)
+
+
+

Arguments

+
dtype
+

dtype to check information

+
+
-
- +
- - + + diff --git a/dev/reference/torch_fix.html b/dev/reference/torch_fix.html index e9e4849a9..6449bce82 100644 --- a/dev/reference/torch_fix.html +++ b/dev/reference/torch_fix.html @@ -1,79 +1,18 @@ - - - - - - - -Fix — torch_fix • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Fix — torch_fix • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_fix(self)
- -

Arguments

- - - - - - -
self

(Tensor) the input tensor.

- -

fix(input, *, out=None) -> Tensor

+
+
torch_fix(self)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
+
+

fix(input, *, out=None) -> Tensor

-

Alias for torch_trunc()

+

Alias for torch_trunc()

+
+
-
- +
- - + + diff --git a/dev/reference/torch_flatten.html b/dev/reference/torch_flatten.html index 1df981bb5..230d40db7 100644 --- a/dev/reference/torch_flatten.html +++ b/dev/reference/torch_flatten.html @@ -1,79 +1,18 @@ - - - - - - - -Flatten — torch_flatten • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Flatten — torch_flatten • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_flatten(self, dims, start_dim = 1L, end_dim = -1L, out_dim)
- -

Arguments

- - - - - - - - - - - - - - - - - - - - - - -
self

(Tensor) the input tensor.

dims

if tensor is named you can pass the name of the dimensions to -flatten

start_dim

(int) the first dim to flatten

end_dim

(int) the last dim to flatten

out_dim

the name of the resulting dimension if a named tensor.

- -

flatten(input, start_dim=0, end_dim=-1) -> Tensor

+
+
torch_flatten(self, dims, start_dim = 1L, end_dim = -1L, out_dim)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
dims
+

if tensor is named you can pass the name of the dimensions to +flatten

+
start_dim
+

(int) the first dim to flatten

+
end_dim
+

(int) the last dim to flatten

+
out_dim
+

the name of the resulting dimension if a named tensor.

+
+
+

flatten(input, start_dim=0, end_dim=-1) -> Tensor

Flattens a contiguous range of dims in a tensor.

+
-

Examples

-
if (torch_is_installed()) {
-
-t = torch_tensor(matrix(c(1, 2), ncol = 2))
-torch_flatten(t)
-torch_flatten(t, start_dim=2)
-}
-#> torch_tensor
-#>  1  2
-#> [ CPUFloatType{1,2} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+t = torch_tensor(matrix(c(1, 2), ncol = 2))
+torch_flatten(t)
+torch_flatten(t, start_dim=2)
+}
+#> torch_tensor
+#>  1  2
+#> [ CPUFloatType{1,2} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_flip.html b/dev/reference/torch_flip.html index cd4e947c3..47fe4b23f 100644 --- a/dev/reference/torch_flip.html +++ b/dev/reference/torch_flip.html @@ -1,79 +1,18 @@ - - - - - - - -Flip — torch_flip • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Flip — torch_flip • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_flip(self, dims)
- -

Arguments

- - - - - - - - - - -
self

(Tensor) the input tensor.

dims

(a list or tuple) axis to flip on

- -

flip(input, dims) -> Tensor

+
+
torch_flip(self, dims)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
dims
+

(a list or tuple) axis to flip on

+
+
+

flip(input, dims) -> Tensor

Reverse the order of a n-D tensor along given axis in dims.

+
-

Examples

-
if (torch_is_installed()) {
-
-x <- torch_arange(1, 8)$view(c(2, 2, 2))
-x
-torch_flip(x, c(1, 2))
-}
-#> torch_tensor
-#> (1,.,.) = 
-#>   7  8
-#>   5  6
-#> 
-#> (2,.,.) = 
-#>   3  4
-#>   1  2
-#> [ CPUFloatType{2,2,2} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+x <- torch_arange(1, 8)$view(c(2, 2, 2))
+x
+torch_flip(x, c(1, 2))
+}
+#> torch_tensor
+#> (1,.,.) = 
+#>   7  8
+#>   5  6
+#> 
+#> (2,.,.) = 
+#>   3  4
+#>   1  2
+#> [ CPUFloatType{2,2,2} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_fliplr.html b/dev/reference/torch_fliplr.html index 71d3138e3..91411f422 100644 --- a/dev/reference/torch_fliplr.html +++ b/dev/reference/torch_fliplr.html @@ -1,79 +1,18 @@ - - - - - - - -Fliplr — torch_fliplr • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Fliplr — torch_fliplr • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_fliplr(self)
- -

Arguments

- - - - - - -
self

(Tensor) Must be at least 2-dimensional.

- -

Note

+
+
torch_fliplr(self)
+
+
+

Arguments

+
self
+

(Tensor) Must be at least 2-dimensional.

+
+
+

Note

Equivalent to input[,-1]. Requires the array to be at least 2-D.

-

fliplr(input) -> Tensor

- +
+
+

fliplr(input) -> Tensor

Flip array in the left/right direction, returning a new tensor.

Flip the entries in each row in the left/right direction. Columns are preserved, but appear in a different order than before.

+
-

Examples

-
if (torch_is_installed()) {
-
-x <- torch_arange(start = 1, end = 4)$view(c(2, 2))
-x
-torch_fliplr(x)
-}
-#> torch_tensor
-#>  2  1
-#>  4  3
-#> [ CPUFloatType{2,2} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+x <- torch_arange(start = 1, end = 4)$view(c(2, 2))
+x
+torch_fliplr(x)
+}
+#> torch_tensor
+#>  2  1
+#>  4  3
+#> [ CPUFloatType{2,2} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_flipud.html b/dev/reference/torch_flipud.html index 8ae2a727a..584eab989 100644 --- a/dev/reference/torch_flipud.html +++ b/dev/reference/torch_flipud.html @@ -1,79 +1,18 @@ - - - - - - - -Flipud — torch_flipud • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Flipud — torch_flipud • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_flipud(self)
- -

Arguments

- - - - - - -
self

(Tensor) Must be at least 1-dimensional.

- -

Note

+
+
torch_flipud(self)
+
+
+

Arguments

+
self
+

(Tensor) Must be at least 1-dimensional.

+
+
+

Note

Equivalent to input[-1,]. Requires the array to be at least 1-D.

-

flipud(input) -> Tensor

- +
+
+

flipud(input) -> Tensor

Flip array in the up/down direction, returning a new tensor.

Flip the entries in each column in the up/down direction. Rows are preserved, but appear in a different order than before.

+
-

Examples

-
if (torch_is_installed()) {
-
-x <- torch_arange(start = 1, end = 4)$view(c(2, 2))
-x
-torch_flipud(x)
-}
-#> torch_tensor
-#>  3  4
-#>  1  2
-#> [ CPUFloatType{2,2} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+x <- torch_arange(start = 1, end = 4)$view(c(2, 2))
+x
+torch_flipud(x)
+}
+#> torch_tensor
+#>  3  4
+#>  1  2
+#> [ CPUFloatType{2,2} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_floor.html b/dev/reference/torch_floor.html index c6028dc0c..524775e92 100644 --- a/dev/reference/torch_floor.html +++ b/dev/reference/torch_floor.html @@ -1,79 +1,18 @@ - - - - - - - -Floor — torch_floor • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Floor — torch_floor • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_floor(self)
- -

Arguments

- - - - - - -
self

(Tensor) the input tensor.

- -

floor(input, out=NULL) -> Tensor

+
+
torch_floor(self)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
+
+

floor(input, out=NULL) -> Tensor

@@ -210,46 +130,45 @@ the largest integer less than or equal to each element.

$$ \mbox{out}_{i} = \left\lfloor \mbox{input}_{i} \right\rfloor $$

+
-

Examples

-
if (torch_is_installed()) {
-
-a = torch_randn(c(4))
-a
-torch_floor(a)
-}
-#> torch_tensor
-#> -1
-#> -2
-#>  0
-#> -1
-#> [ CPUFloatType{4} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+a = torch_randn(c(4))
+a
+torch_floor(a)
+}
+#> torch_tensor
+#>  1
+#>  1
+#>  0
+#> -1
+#> [ CPUFloatType{4} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_floor_divide.html b/dev/reference/torch_floor_divide.html index b312cbd49..ec1fa162c 100644 --- a/dev/reference/torch_floor_divide.html +++ b/dev/reference/torch_floor_divide.html @@ -1,79 +1,18 @@ - - - - - - - -Floor_divide — torch_floor_divide • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Floor_divide — torch_floor_divide • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,70 +111,65 @@

Floor_divide

-
torch_floor_divide(self, other)
- -

Arguments

- - - - - - - - - - -
self

(Tensor) the numerator tensor

other

(Tensor or Scalar) the denominator

- -

floor_divide(input, other, out=NULL) -> Tensor

+
+
torch_floor_divide(self, other)
+
+
+

Arguments

+
self
+

(Tensor) the numerator tensor

+
other
+

(Tensor or Scalar) the denominator

+
+
+

floor_divide(input, other, out=NULL) -> Tensor

-

Return the division of the inputs rounded down to the nearest integer. See torch_div +

Return the division of the inputs rounded down to the nearest integer. See torch_div for type promotion and broadcasting rules.

$$ \mbox{{out}}_i = \left\lfloor \frac{{\mbox{{input}}_i}}{{\mbox{{other}}_i}} \right\rfloor $$

+
-

Examples

-
if (torch_is_installed()) {
-
-a = torch_tensor(c(4.0, 3.0))
-b = torch_tensor(c(2.0, 2.0))
-torch_floor_divide(a, b)
-torch_floor_divide(a, 1.4)
-}
-#> torch_tensor
-#>  2
-#>  2
-#> [ CPUFloatType{2} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+a = torch_tensor(c(4.0, 3.0))
+b = torch_tensor(c(2.0, 2.0))
+torch_floor_divide(a, b)
+torch_floor_divide(a, 1.4)
+}
+#> torch_tensor
+#>  2
+#>  2
+#> [ CPUFloatType{2} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_fmod.html b/dev/reference/torch_fmod.html index 27e45d676..c0c710a1a 100644 --- a/dev/reference/torch_fmod.html +++ b/dev/reference/torch_fmod.html @@ -1,79 +1,18 @@ - - - - - - - -Fmod — torch_fmod • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Fmod — torch_fmod • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_fmod(self, other)
- -

Arguments

- - - - - - - - - - -
self

(Tensor) the dividend

other

(Tensor or float) the divisor, which may be either a number or a tensor of the same shape as the dividend

- -

fmod(input, other, out=NULL) -> Tensor

+
+
torch_fmod(self, other)
+
+
+

Arguments

+
self
+

(Tensor) the dividend

+
other
+

(Tensor or float) the divisor, which may be either a number or a tensor of the same shape as the dividend

+
+
+

fmod(input, other, out=NULL) -> Tensor

@@ -214,46 +132,45 @@ numbers. The remainder has the same sign as the dividend input.

When other is a tensor, the shapes of input and other must be broadcastable .

+
-

Examples

-
if (torch_is_installed()) {
-
-torch_fmod(torch_tensor(c(-3., -2, -1, 1, 2, 3)), 2)
-torch_fmod(torch_tensor(c(1., 2, 3, 4, 5)), 1.5)
-}
-#> torch_tensor
-#>  1.0000
-#>  0.5000
-#>  0.0000
-#>  1.0000
-#>  0.5000
-#> [ CPUFloatType{5} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+torch_fmod(torch_tensor(c(-3., -2, -1, 1, 2, 3)), 2)
+torch_fmod(torch_tensor(c(1., 2, 3, 4, 5)), 1.5)
+}
+#> torch_tensor
+#>  1.0000
+#>  0.5000
+#>  0.0000
+#>  1.0000
+#>  0.5000
+#> [ CPUFloatType{5} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_frac.html b/dev/reference/torch_frac.html index d6a1fa147..7860217f8 100644 --- a/dev/reference/torch_frac.html +++ b/dev/reference/torch_frac.html @@ -1,79 +1,18 @@ - - - - - - - -Frac — torch_frac • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Frac — torch_frac • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_frac(self)
- -

Arguments

- - - - - - -
self

the input tensor.

- -

frac(input, out=NULL) -> Tensor

+
+
torch_frac(self)
+
+
+

Arguments

+
self
+

the input tensor.

+
+
+

frac(input, out=NULL) -> Tensor

@@ -209,43 +129,42 @@

$$ \mbox{out}_{i} = \mbox{input}_{i} - \left\lfloor |\mbox{input}_{i}| \right\rfloor * \mbox{sgn}(\mbox{input}_{i}) $$

+
-

Examples

-
if (torch_is_installed()) {
-
-torch_frac(torch_tensor(c(1, 2.5, -3.2)))
-}
-#> torch_tensor
-#>  0.0000
-#>  0.5000
-#> -0.2000
-#> [ CPUFloatType{3} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+torch_frac(torch_tensor(c(1, 2.5, -3.2)))
+}
+#> torch_tensor
+#>  0.0000
+#>  0.5000
+#> -0.2000
+#> [ CPUFloatType{3} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_full.html b/dev/reference/torch_full.html index bc49acd19..cc69205b5 100644 --- a/dev/reference/torch_full.html +++ b/dev/reference/torch_full.html @@ -1,79 +1,18 @@ - - - - - - - -Full — torch_full • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Full — torch_full • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_full(
-  size,
-  fill_value,
-  names = NULL,
-  dtype = NULL,
-  layout = torch_strided(),
-  device = NULL,
-  requires_grad = FALSE
-)
- -

Arguments

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
size

(int...) a list, tuple, or torch_Size of integers defining the shape of the output tensor.

fill_value

NA the number to fill the output tensor with.

names

optional names of the dimensions

dtype

(torch.dtype, optional) the desired data type of returned tensor. Default: if NULL, uses a global default (see torch_set_default_tensor_type).

layout

(torch.layout, optional) the desired layout of returned Tensor. Default: torch_strided.

device

(torch.device, optional) the desired device of returned tensor. Default: if NULL, uses the current device for the default tensor type (see torch_set_default_tensor_type). device will be the CPU for CPU tensor types and the current CUDA device for CUDA tensor types.

requires_grad

(bool, optional) If autograd should record operations on the returned tensor. Default: FALSE.

- -

full(size, fill_value, out=NULL, dtype=NULL, layout=torch.strided, device=NULL, requires_grad=False) -> Tensor

+
+
torch_full(
+  size,
+  fill_value,
+  names = NULL,
+  dtype = NULL,
+  layout = torch_strided(),
+  device = NULL,
+  requires_grad = FALSE
+)
+
+
+

Arguments

+
size
+

(int...) a list, tuple, or torch_Size of integers defining the shape of the output tensor.

+
fill_value
+

NA the number to fill the output tensor with.

+
names
+

optional names of the dimensions

+
dtype
+

(torch.dtype, optional) the desired data type of returned tensor. Default: if NULL, uses a global default (see torch_set_default_tensor_type).

+
layout
+

(torch.layout, optional) the desired layout of returned Tensor. Default: torch_strided.

+
device
+

(torch.device, optional) the desired device of returned tensor. Default: if NULL, uses the current device for the default tensor type (see torch_set_default_tensor_type). device will be the CPU for CPU tensor types and the current CUDA device for CUDA tensor types.

+
requires_grad
+

(bool, optional) If autograd should record operations on the returned tensor. Default: FALSE.

+
+
+

full(size, fill_value, out=NULL, dtype=NULL, layout=torch.strided, device=NULL, requires_grad=False) -> Tensor

Returns a tensor of size size filled with fill_value.

-

Warning

- +
+
+

Warning

In PyTorch 1.5 a bool or integral fill_value will produce a warning if @@ -247,42 +156,41 @@ In a future PyTorch release, when dtype and out are not set a bool fill_value will return a tensor of torch.bool dtype, and an integral fill_value will return a tensor of torch.long dtype.

+
-

Examples

-
if (torch_is_installed()) {
-
-torch_full(list(2, 3), 3.141592)
-}
-#> torch_tensor
-#>  3.1416  3.1416  3.1416
-#>  3.1416  3.1416  3.1416
-#> [ CPUFloatType{2,3} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+torch_full(list(2, 3), 3.141592)
+}
+#> torch_tensor
+#>  3.1416  3.1416  3.1416
+#>  3.1416  3.1416  3.1416
+#> [ CPUFloatType{2,3} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_full_like.html b/dev/reference/torch_full_like.html index ac90d5fff..b23f8c4b4 100644 --- a/dev/reference/torch_full_like.html +++ b/dev/reference/torch_full_like.html @@ -1,79 +1,18 @@ - - - - - - - -Full_like — torch_full_like • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Full_like — torch_full_like • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,51 +111,37 @@

Full_like

-
torch_full_like(
-  input,
-  fill_value,
-  dtype = NULL,
-  layout = torch_strided(),
-  device = NULL,
-  requires_grad = FALSE,
-  memory_format = torch_preserve_format()
-)
- -

Arguments

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
input

(Tensor) the size of input will determine size of the output tensor.

fill_value

the number to fill the output tensor with.

dtype

(torch.dtype, optional) the desired data type of returned Tensor. Default: if NULL, defaults to the dtype of input.

layout

(torch.layout, optional) the desired layout of returned tensor. Default: if NULL, defaults to the layout of input.

device

(torch.device, optional) the desired device of returned tensor. Default: if NULL, defaults to the device of input.

requires_grad

(bool, optional) If autograd should record operations on the returned tensor. Default: FALSE.

memory_format

(torch.memory_format, optional) the desired memory format of returned Tensor. Default: torch_preserve_format.

- -

full_like(input, fill_value, out=NULL, dtype=NULL, layout=torch.strided, device=NULL, requires_grad=False,

+
+
torch_full_like(
+  input,
+  fill_value,
+  dtype = NULL,
+  layout = torch_strided(),
+  device = NULL,
+  requires_grad = FALSE,
+  memory_format = torch_preserve_format()
+)
+
+
+

Arguments

+
input
+

(Tensor) the size of input will determine size of the output tensor.

+
fill_value
+

the number to fill the output tensor with.

+
dtype
+

(torch.dtype, optional) the desired data type of returned Tensor. Default: if NULL, defaults to the dtype of input.

+
layout
+

(torch.layout, optional) the desired layout of returned tensor. Default: if NULL, defaults to the layout of input.

+
device
+

(torch.device, optional) the desired device of returned tensor. Default: if NULL, defaults to the device of input.

+
requires_grad
+

(bool, optional) If autograd should record operations on the returned tensor. Default: FALSE.

+
memory_format
+

(torch.memory_format, optional) the desired memory format of returned Tensor. Default: torch_preserve_format.

+
+
+

full_like(input, fill_value, out=NULL, dtype=NULL, layout=torch.strided, device=NULL, requires_grad=False,

@@ -241,32 +149,29 @@

Returns a tensor with the same size as input filled with fill_value. torch_full_like(input, fill_value) is equivalent to torch_full(input.size(), fill_value, dtype=input.dtype, layout=input.layout, device=input.device).

+
+
-
- +
- - + + diff --git a/dev/reference/torch_gather.html b/dev/reference/torch_gather.html index f4039f44f..62a10a65a 100644 --- a/dev/reference/torch_gather.html +++ b/dev/reference/torch_gather.html @@ -1,79 +1,18 @@ - - - - - - - -Gather — torch_gather • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Gather — torch_gather • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_gather(self, dim, index, sparse_grad = FALSE)
- -

Arguments

- - - - - - - - - - - - - - - - - - -
self

(Tensor) the source tensor

dim

(int) the axis along which to index

index

(LongTensor) the indices of elements to gather

sparse_grad

(bool,optional) If TRUE, gradient w.r.t. input will be a sparse tensor.

- -

gather(input, dim, index, sparse_grad=FALSE) -> Tensor

+
+
torch_gather(self, dim, index, sparse_grad = FALSE)
+
+
+

Arguments

+
self
+

(Tensor) the source tensor

+
dim
+

(int) the axis along which to index

+
index
+

(LongTensor) the indices of elements to gather

+
sparse_grad
+

(bool,optional) If TRUE, gradient w.r.t. input will be a sparse tensor.

+
+
+

gather(input, dim, index, sparse_grad=FALSE) -> Tensor

Gathers values along an axis specified by dim.

-

For a 3-D tensor the output is specified by::

out[i][j][k] = input[index[i][j][k]][j][k]  # if dim == 0
-out[i][j][k] = input[i][index[i][j][k]][k]  # if dim == 1
-out[i][j][k] = input[i][j][index[i][j][k]]  # if dim == 2
-
+

For a 3-D tensor the output is specified by::

out[i][j][k] = input[index[i][j][k]][j][k]  # if dim == 0
+out[i][j][k] = input[i][index[i][j][k]][k]  # if dim == 1
+out[i][j][k] = input[i][j][index[i][j][k]]  # if dim == 2

If input is an n-dimensional tensor with size \((x_0, x_1..., x_{i-1}, x_i, x_{i+1}, ..., x_{n-1})\) and dim = i, then index must be an \(n\)-dimensional tensor with size \((x_0, x_1, ..., x_{i-1}, y, x_{i+1}, ..., x_{n-1})\) where \(y \geq 1\) and out will have the same size as index.

+
-

Examples

-
if (torch_is_installed()) {
-
-t = torch_tensor(matrix(c(1,2,3,4), ncol = 2, byrow = TRUE))
-torch_gather(t, 2, torch_tensor(matrix(c(1,1,2,1), ncol = 2, byrow=TRUE), dtype = torch_int64()))
-}
-#> torch_tensor
-#>  1  1
-#>  4  3
-#> [ CPUFloatType{2,2} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+t = torch_tensor(matrix(c(1,2,3,4), ncol = 2, byrow = TRUE))
+torch_gather(t, 2, torch_tensor(matrix(c(1,1,2,1), ncol = 2, byrow=TRUE), dtype = torch_int64()))
+}
+#> torch_tensor
+#>  1  1
+#>  4  3
+#> [ CPUFloatType{2,2} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_gcd.html b/dev/reference/torch_gcd.html index 2b190cf31..ea3b0c8d5 100644 --- a/dev/reference/torch_gcd.html +++ b/dev/reference/torch_gcd.html @@ -1,79 +1,18 @@ - - - - - - - -Gcd — torch_gcd • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Gcd — torch_gcd • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_gcd(self, other)
- -

Arguments

- - - - - - - - - - -
self

(Tensor) the input tensor.

other

(Tensor) the second input tensor

- -

Note

+
+
torch_gcd(self, other)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
other
+

(Tensor) the second input tensor

+
+
+

Note

This defines \(gcd(0, 0) = 0\).

-

gcd(input, other, *, out=None) -> Tensor

- +
+
+

gcd(input, other, *, out=None) -> Tensor

Computes the element-wise greatest common divisor (GCD) of input and other.

Both input and other must have integer types.

+
-

Examples

-
if (torch_is_installed()) {
-
-if (torch::cuda_is_available()) {
-a <- torch_tensor(c(5, 10, 15), dtype = torch_long(), device = "cuda")
-b <- torch_tensor(c(3, 4, 5), dtype = torch_long(), device = "cuda")
-torch_gcd(a, b)
-c <- torch_tensor(c(3L), device = "cuda")
-torch_gcd(a, c)
-}
-}
-
+
+

Examples

+
if (torch_is_installed()) {
+
+if (torch::cuda_is_available()) {
+a <- torch_tensor(c(5, 10, 15), dtype = torch_long(), device = "cuda")
+b <- torch_tensor(c(3, 4, 5), dtype = torch_long(), device = "cuda")
+torch_gcd(a, b)
+c <- torch_tensor(c(3L), device = "cuda")
+torch_gcd(a, c)
+}
+}
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_ge.html b/dev/reference/torch_ge.html index fde8d9050..e367e6dee 100644 --- a/dev/reference/torch_ge.html +++ b/dev/reference/torch_ge.html @@ -1,79 +1,18 @@ - - - - - - - -Ge — torch_ge • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Ge — torch_ge • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_ge(self, other)
- -

Arguments

- - - - - - - - - - -
self

(Tensor) the tensor to compare

other

(Tensor or float) the tensor or value to compare

- -

ge(input, other, out=NULL) -> Tensor

+
+
torch_ge(self, other)
+
+
+

Arguments

+
self
+

(Tensor) the tensor to compare

+
other
+

(Tensor or float) the tensor or value to compare

+
+
+

ge(input, other, out=NULL) -> Tensor

Computes \(\mbox{input} \geq \mbox{other}\) element-wise.

The second argument can be a number or a tensor whose shape is broadcastable with the first argument.

+
-

Examples

-
if (torch_is_installed()) {
-
-torch_ge(torch_tensor(matrix(1:4, ncol = 2, byrow=TRUE)), 
-         torch_tensor(matrix(c(1,1,4,4), ncol = 2, byrow=TRUE)))
-}
-#> torch_tensor
-#>  1  1
-#>  0  1
-#> [ CPUBoolType{2,2} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+torch_ge(torch_tensor(matrix(1:4, ncol = 2, byrow=TRUE)), 
+         torch_tensor(matrix(c(1,1,4,4), ncol = 2, byrow=TRUE)))
+}
+#> torch_tensor
+#>  1  1
+#>  0  1
+#> [ CPUBoolType{2,2} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_generator.html b/dev/reference/torch_generator.html index d33c60d7b..db382a4d9 100644 --- a/dev/reference/torch_generator.html +++ b/dev/reference/torch_generator.html @@ -1,81 +1,20 @@ - - - - - - - -Create a Generator object — torch_generator • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Create a Generator object — torch_generator • torch - - - - - - - - - - - - - - - + + - - -
-
- -
- -
+
@@ -193,49 +115,48 @@ that produces pseudo random numbers. Used as a keyword argument in many In-place random sampling functions.

-
torch_generator()
- +
+
torch_generator()
+
-

Examples

-
if (torch_is_installed()) {
-
-# Via string
-generator <- torch_generator()
-generator$current_seed()
-generator$set_current_seed(1234567L)
-generator$current_seed()
-
-
-}
-#> integer64
-#> [1] 1234567
-
+
+

Examples

+
if (torch_is_installed()) {
+
+# Via string
+generator <- torch_generator()
+generator$current_seed()
+generator$set_current_seed(1234567L)
+generator$current_seed()
+
+
+}
+#> integer64
+#> [1] 1234567
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_geqrf.html b/dev/reference/torch_geqrf.html index 4650500f5..4cdc6e6fa 100644 --- a/dev/reference/torch_geqrf.html +++ b/dev/reference/torch_geqrf.html @@ -1,79 +1,18 @@ - - - - - - - -Geqrf — torch_geqrf • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Geqrf — torch_geqrf • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_geqrf(self)
- -

Arguments

- - - - - - -
self

(Tensor) the input matrix

- -

geqrf(input, out=NULL) -> (Tensor, Tensor)

+
+
torch_geqrf(self)
+
+
+

Arguments

+
self
+

(Tensor) the input matrix

+
+
+

geqrf(input, out=NULL) -> (Tensor, Tensor)

This is a low-level function for calling LAPACK directly. This function returns a namedtuple (a, tau) as defined in LAPACK documentation for geqrf_ .

-

You'll generally want to use torch_qr instead.

+

You'll generally want to use torch_qr instead.

Computes a QR decomposition of input, but without constructing \(Q\) and \(R\) as explicit separate matrices.

Rather, this directly calls the underlying LAPACK function ?geqrf which produces a sequence of 'elementary reflectors'.

See LAPACK documentation for geqrf_ for further details.

+
+
-
- +
- - + + diff --git a/dev/reference/torch_ger.html b/dev/reference/torch_ger.html index 13eb3eaac..5bb9c9a73 100644 --- a/dev/reference/torch_ger.html +++ b/dev/reference/torch_ger.html @@ -1,79 +1,18 @@ - - - - - - - -Ger — torch_ger • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Ger — torch_ger • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_ger(self, vec2)
- -

Arguments

- - - - - - - - - - -
self

(Tensor) 1-D input vector

vec2

(Tensor) 1-D input vector

- -

Note

+
+
torch_ger(self, vec2)
+
+
+

Arguments

+
self
+

(Tensor) 1-D input vector

+
vec2
+

(Tensor) 1-D input vector

+
+
+

Note

This function does not broadcast .

-

ger(input, vec2, out=NULL) -> Tensor

- +
+
+

ger(input, vec2, out=NULL) -> Tensor

Outer product of input and vec2. If input is a vector of size \(n\) and vec2 is a vector of size \(m\), then out must be a matrix of size \((n \times m)\).

+
-

Examples

-
if (torch_is_installed()) {
-
-v1 = torch_arange(1., 5.)
-v2 = torch_arange(1., 4.)
-torch_ger(v1, v2)
-}
-#> torch_tensor
-#>   1   2   3   4
-#>   2   4   6   8
-#>   3   6   9  12
-#>   4   8  12  16
-#>   5  10  15  20
-#> [ CPUFloatType{5,4} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+v1 = torch_arange(1., 5.)
+v2 = torch_arange(1., 4.)
+torch_ger(v1, v2)
+}
+#> torch_tensor
+#>   1   2   3   4
+#>   2   4   6   8
+#>   3   6   9  12
+#>   4   8  12  16
+#>   5  10  15  20
+#> [ CPUFloatType{5,4} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_greater.html b/dev/reference/torch_greater.html index 122802301..2ab197d55 100644 --- a/dev/reference/torch_greater.html +++ b/dev/reference/torch_greater.html @@ -1,79 +1,18 @@ - - - - - - - -Greater — torch_greater • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Greater — torch_greater • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_greater(self, other)
- -

Arguments

- - - - - - - - - - -
self

(Tensor) the tensor to compare

other

(Tensor or float) the tensor or value to compare

- -

greater(input, other, *, out=None) -> Tensor

+
+
torch_greater(self, other)
+
+
+

Arguments

+
self
+

(Tensor) the tensor to compare

+
other
+

(Tensor or float) the tensor or value to compare

+
+
+

greater(input, other, *, out=None) -> Tensor

-

Alias for torch_gt().

+

Alias for torch_gt().

+
+
-
- +
- - + + diff --git a/dev/reference/torch_greater_equal.html b/dev/reference/torch_greater_equal.html index edc88fe9a..06ba61155 100644 --- a/dev/reference/torch_greater_equal.html +++ b/dev/reference/torch_greater_equal.html @@ -1,79 +1,18 @@ - - - - - - - -Greater_equal — torch_greater_equal • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Greater_equal — torch_greater_equal • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,53 +111,46 @@

Greater_equal

-
torch_greater_equal(self, other)
- -

Arguments

- - - - - - - - - - -
self

(Tensor) the tensor to compare

other

(Tensor or float) the tensor or value to compare

- -

greater_equal(input, other, *, out=None) -> Tensor

+
+
torch_greater_equal(self, other)
+
+
+

Arguments

+
self
+

(Tensor) the tensor to compare

+
other
+

(Tensor or float) the tensor or value to compare

+
+
+

greater_equal(input, other, *, out=None) -> Tensor

-

Alias for torch_ge().

+

Alias for torch_ge().

+
+
-
- +
- - + + diff --git a/dev/reference/torch_gt.html b/dev/reference/torch_gt.html index 3923efe2a..13cd64f62 100644 --- a/dev/reference/torch_gt.html +++ b/dev/reference/torch_gt.html @@ -1,79 +1,18 @@ - - - - - - - -Gt — torch_gt • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Gt — torch_gt • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_gt(self, other)
- -

Arguments

- - - - - - - - - - -
self

(Tensor) the tensor to compare

other

(Tensor or float) the tensor or value to compare

- -

gt(input, other, out=NULL) -> Tensor

+
+
torch_gt(self, other)
+
+
+

Arguments

+
self
+

(Tensor) the tensor to compare

+
other
+

(Tensor or float) the tensor or value to compare

+
+
+

gt(input, other, out=NULL) -> Tensor

Computes \(\mbox{input} > \mbox{other}\) element-wise.

The second argument can be a number or a tensor whose shape is broadcastable with the first argument.

+
-

Examples

-
if (torch_is_installed()) {
-
-torch_gt(torch_tensor(matrix(1:4, ncol = 2, byrow=TRUE)), 
-         torch_tensor(matrix(c(1,1,4,4), ncol = 2, byrow=TRUE)))
-}
-#> torch_tensor
-#>  0  1
-#>  0  0
-#> [ CPUBoolType{2,2} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+torch_gt(torch_tensor(matrix(1:4, ncol = 2, byrow=TRUE)), 
+         torch_tensor(matrix(c(1,1,4,4), ncol = 2, byrow=TRUE)))
+}
+#> torch_tensor
+#>  0  1
+#>  0  0
+#> [ CPUBoolType{2,2} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_hamming_window.html b/dev/reference/torch_hamming_window.html index 193bb77f2..027afb370 100644 --- a/dev/reference/torch_hamming_window.html +++ b/dev/reference/torch_hamming_window.html @@ -1,79 +1,18 @@ - - - - - - - -Hamming_window — torch_hamming_window • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Hamming_window — torch_hamming_window • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,65 +111,50 @@

Hamming_window

-
torch_hamming_window(
-  window_length,
-  periodic = TRUE,
-  alpha = 0.54,
-  beta = 0.46,
-  dtype = NULL,
-  layout = torch_strided(),
-  device = NULL,
-  requires_grad = FALSE
-)
- -

Arguments

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
window_length

(int) the size of returned window

periodic

(bool, optional) If TRUE, returns a window to be used as periodic function. If False, return a symmetric window.

alpha

(float, optional) The coefficient \(\alpha\) in the equation above

beta

(float, optional) The coefficient \(\beta\) in the equation above

dtype

(torch.dtype, optional) the desired data type of returned tensor. Default: if NULL, uses a global default (see torch_set_default_tensor_type). Only floating point types are supported.

layout

(torch.layout, optional) the desired layout of returned window tensor. Only torch_strided (dense layout) is supported.

device

(torch.device, optional) the desired device of returned tensor. Default: if NULL, uses the current device for the default tensor type (see torch_set_default_tensor_type). device will be the CPU for CPU tensor types and the current CUDA device for CUDA tensor types.

requires_grad

(bool, optional) If autograd should record operations on the returned tensor. Default: FALSE.

- -

Note

+
+
torch_hamming_window(
+  window_length,
+  periodic = TRUE,
+  alpha = 0.54,
+  beta = 0.46,
+  dtype = NULL,
+  layout = torch_strided(),
+  device = NULL,
+  requires_grad = FALSE
+)
+
+
+

Arguments

+
window_length
+

(int) the size of returned window

+
periodic
+

(bool, optional) If TRUE, returns a window to be used as periodic function. If False, return a symmetric window.

+
alpha
+

(float, optional) The coefficient \(\alpha\) in the equation above

+
beta
+

(float, optional) The coefficient \(\beta\) in the equation above

+
dtype
+

(torch.dtype, optional) the desired data type of returned tensor. Default: if NULL, uses a global default (see torch_set_default_tensor_type). Only floating point types are supported.

+
layout
+

(torch.layout, optional) the desired layout of returned window tensor. Only torch_strided (dense layout) is supported.

+
device
+

(torch.device, optional) the desired device of returned tensor. Default: if NULL, uses the current device for the default tensor type (see torch_set_default_tensor_type). device will be the CPU for CPU tensor types and the current CUDA device for CUDA tensor types.

+
requires_grad
+

(bool, optional) If autograd should record operations on the returned tensor. Default: FALSE.

+
+
+

Note

-
If `window_length` \eqn{=1}, the returned window contains a single value 1.
-
+
If `window_length` \eqn{=1}, the returned window contains a single value 1.
+
-
This is a generalized version of `torch_hann_window`.
-
- -

hamming_window(window_length, periodic=TRUE, alpha=0.54, beta=0.46, dtype=NULL, layout=torch.strided, device=NULL, requires_grad=False) -> Tensor

+
This is a generalized version of `torch_hann_window`.
+
+
+
+

hamming_window(window_length, periodic=TRUE, alpha=0.54, beta=0.46, dtype=NULL, layout=torch.strided, device=NULL, requires_grad=False) -> Tensor

@@ -264,32 +171,29 @@ ready to be used as a periodic window with functions like above formula is in fact \(\mbox{window\_length} + 1\). Also, we always have torch_hamming_window(L, periodic=TRUE) equal to torch_hamming_window(L + 1, periodic=False)[:-1]).

+
+
-
- +
- - + + diff --git a/dev/reference/torch_hann_window.html b/dev/reference/torch_hann_window.html index 14700f96b..33eaafba5 100644 --- a/dev/reference/torch_hann_window.html +++ b/dev/reference/torch_hann_window.html @@ -1,79 +1,18 @@ - - - - - - - -Hann_window — torch_hann_window • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Hann_window — torch_hann_window • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,52 +111,41 @@

Hann_window

-
torch_hann_window(
-  window_length,
-  periodic = TRUE,
-  dtype = NULL,
-  layout = torch_strided(),
-  device = NULL,
-  requires_grad = FALSE
-)
- -

Arguments

- - - - - - - - - - - - - - - - - - - - - - - - - - -
window_length

(int) the size of returned window

periodic

(bool, optional) If TRUE, returns a window to be used as periodic function. If False, return a symmetric window.

dtype

(torch.dtype, optional) the desired data type of returned tensor. Default: if NULL, uses a global default (see torch_set_default_tensor_type). Only floating point types are supported.

layout

(torch.layout, optional) the desired layout of returned window tensor. Only torch_strided (dense layout) is supported.

device

(torch.device, optional) the desired device of returned tensor. Default: if NULL, uses the current device for the default tensor type (see torch_set_default_tensor_type). device will be the CPU for CPU tensor types and the current CUDA device for CUDA tensor types.

requires_grad

(bool, optional) If autograd should record operations on the returned tensor. Default: FALSE.

- -

Note

+
+
torch_hann_window(
+  window_length,
+  periodic = TRUE,
+  dtype = NULL,
+  layout = torch_strided(),
+  device = NULL,
+  requires_grad = FALSE
+)
+
+
+

Arguments

+
window_length
+

(int) the size of returned window

+
periodic
+

(bool, optional) If TRUE, returns a window to be used as periodic function. If False, return a symmetric window.

+
dtype
+

(torch.dtype, optional) the desired data type of returned tensor. Default: if NULL, uses a global default (see torch_set_default_tensor_type). Only floating point types are supported.

+
layout
+

(torch.layout, optional) the desired layout of returned window tensor. Only torch_strided (dense layout) is supported.

+
device
+

(torch.device, optional) the desired device of returned tensor. Default: if NULL, uses the current device for the default tensor type (see torch_set_default_tensor_type). device will be the CPU for CPU tensor types and the current CUDA device for CUDA tensor types.

+
requires_grad
+

(bool, optional) If autograd should record operations on the returned tensor. Default: FALSE.

+
+
+

Note

-
If `window_length` \eqn{=1}, the returned window contains a single value 1.
-
- -

hann_window(window_length, periodic=TRUE, dtype=NULL, layout=torch.strided, device=NULL, requires_grad=False) -> Tensor

+
If `window_length` \eqn{=1}, the returned window contains a single value 1.
+
+
+
+

hann_window(window_length, periodic=TRUE, dtype=NULL, layout=torch.strided, device=NULL, requires_grad=False) -> Tensor

@@ -252,32 +163,29 @@ ready to be used as a periodic window with functions like above formula is in fact \(\mbox{window\_length} + 1\). Also, we always have torch_hann_window(L, periodic=TRUE) equal to torch_hann_window(L + 1, periodic=False)[:-1]).

+
+
-
- +
- - + + diff --git a/dev/reference/torch_heaviside.html b/dev/reference/torch_heaviside.html index 478673f85..a1b65ed7d 100644 --- a/dev/reference/torch_heaviside.html +++ b/dev/reference/torch_heaviside.html @@ -1,79 +1,18 @@ - - - - - - - -Heaviside — torch_heaviside • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Heaviside — torch_heaviside • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,23 +111,19 @@

Heaviside

-
torch_heaviside(self, values)
- -

Arguments

- - - - - - - - - - -
self

(Tensor) the input tensor.

values

(Tensor) The values to use where input is zero.

- -

heaviside(input, values, *, out=None) -> Tensor

+
+
torch_heaviside(self, values)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
values
+

(Tensor) The values to use where input is zero.

+
+
+

heaviside(input, values, *, out=None) -> Tensor

@@ -218,47 +136,46 @@ The Heaviside step function is defined as:

1, & \mbox{if input > 0} \end{array} $$

+
-

Examples

-
if (torch_is_installed()) {
-
-input <- torch_tensor(c(-1.5, 0, 2.0))
-values <- torch_tensor(c(0.5))
-torch_heaviside(input, values)
-values <- torch_tensor(c(1.2, -2.0, 3.5))
-torch_heaviside(input, values)
-}
-#> torch_tensor
-#>  0
-#> -2
-#>  1
-#> [ CPUFloatType{3} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+input <- torch_tensor(c(-1.5, 0, 2.0))
+values <- torch_tensor(c(0.5))
+torch_heaviside(input, values)
+values <- torch_tensor(c(1.2, -2.0, 3.5))
+torch_heaviside(input, values)
+}
+#> torch_tensor
+#>  0
+#> -2
+#>  1
+#> [ CPUFloatType{3} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_histc.html b/dev/reference/torch_histc.html index 2c077ddd3..8ae8fed5f 100644 --- a/dev/reference/torch_histc.html +++ b/dev/reference/torch_histc.html @@ -1,79 +1,18 @@ - - - - - - - -Histc — torch_histc • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Histc — torch_histc • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_histc(self, bins = 100L, min = 0L, max = 0L)
- -

Arguments

- - - - - - - - - - - - - - - - - - -
self

(Tensor) the input tensor.

bins

(int) number of histogram bins

min

(int) lower end of the range (inclusive)

max

(int) upper end of the range (inclusive)

- -

histc(input, bins=100, min=0, max=0, out=NULL) -> Tensor

+
+
torch_histc(self, bins = 100L, min = 0L, max = 0L)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
bins
+

(int) number of histogram bins

+
min
+

(int) lower end of the range (inclusive)

+
max
+

(int) upper end of the range (inclusive)

+
+
+

histc(input, bins=100, min=0, max=0, out=NULL) -> Tensor

@@ -221,44 +135,43 @@

The elements are sorted into equal width bins between min and max. If min and max are both zero, the minimum and maximum values of the data are used.

+
-

Examples

-
if (torch_is_installed()) {
-
-torch_histc(torch_tensor(c(1., 2, 1)), bins=4, min=0, max=3)
-}
-#> torch_tensor
-#>  0
-#>  2
-#>  1
-#>  0
-#> [ CPUFloatType{4} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+torch_histc(torch_tensor(c(1., 2, 1)), bins=4, min=0, max=3)
+}
+#> torch_tensor
+#>  0
+#>  2
+#>  1
+#>  0
+#> [ CPUFloatType{4} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_hstack.html b/dev/reference/torch_hstack.html index 2c7f27ace..40b650e9e 100644 --- a/dev/reference/torch_hstack.html +++ b/dev/reference/torch_hstack.html @@ -1,79 +1,18 @@ - - - - - - - -Hstack — torch_hstack • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Hstack — torch_hstack • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_hstack(tensors)
- -

Arguments

- - - - - - -
tensors

(sequence of Tensors) sequence of tensors to concatenate

- -

hstack(tensors, *, out=None) -> Tensor

+
+
torch_hstack(tensors)
+
+
+

Arguments

+
tensors
+

(sequence of Tensors) sequence of tensors to concatenate

+
+
+

hstack(tensors, *, out=None) -> Tensor

Stack tensors in sequence horizontally (column wise).

This is equivalent to concatenation along the first axis for 1-D tensors, and along the second axis for all other tensors.

+
-

Examples

-
if (torch_is_installed()) {
-
-a <- torch_tensor(c(1, 2, 3))
-b <- torch_tensor(c(4, 5, 6))
-torch_hstack(list(a,b))
-a <- torch_tensor(rbind(1,2,3))
-b <- torch_tensor(rbind(4,5,6))
-torch_hstack(list(a,b))
-}
-#> torch_tensor
-#>  1  4
-#>  2  5
-#>  3  6
-#> [ CPUFloatType{3,2} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+a <- torch_tensor(c(1, 2, 3))
+b <- torch_tensor(c(4, 5, 6))
+torch_hstack(list(a,b))
+a <- torch_tensor(rbind(1,2,3))
+b <- torch_tensor(rbind(4,5,6))
+torch_hstack(list(a,b))
+}
+#> torch_tensor
+#>  1  4
+#>  2  5
+#>  3  6
+#> [ CPUFloatType{3,2} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_hypot.html b/dev/reference/torch_hypot.html index 40ee1e38e..4597e542a 100644 --- a/dev/reference/torch_hypot.html +++ b/dev/reference/torch_hypot.html @@ -1,79 +1,18 @@ - - - - - - - -Hypot — torch_hypot • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Hypot — torch_hypot • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_hypot(self, other)
- -

Arguments

- - - - - - - - - - -
self

(Tensor) the first input tensor

other

(Tensor) the second input tensor

- -

hypot(input, other, *, out=None) -> Tensor

+
+
torch_hypot(self, other)
+
+
+

Arguments

+
self
+

(Tensor) the first input tensor

+
other
+

(Tensor) the second input tensor

+
+
+

hypot(input, other, *, out=None) -> Tensor

@@ -215,43 +133,42 @@ $$

The shapes of input and other must be broadcastable .

+
-

Examples

-
if (torch_is_installed()) {
-
-torch_hypot(torch_tensor(c(4.0)), torch_tensor(c(3.0, 4.0, 5.0)))
-}
-#> torch_tensor
-#>  5.0000
-#>  5.6569
-#>  6.4031
-#> [ CPUFloatType{3} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+torch_hypot(torch_tensor(c(4.0)), torch_tensor(c(3.0, 4.0, 5.0)))
+}
+#> torch_tensor
+#>  5.0000
+#>  5.6569
+#>  6.4031
+#> [ CPUFloatType{3} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_i0.html b/dev/reference/torch_i0.html index a4e70f0e5..494ad9c9a 100644 --- a/dev/reference/torch_i0.html +++ b/dev/reference/torch_i0.html @@ -1,79 +1,18 @@ - - - - - - - -I0 — torch_i0 • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -I0 — torch_i0 • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_i0(self)
- -

Arguments

- - - - - - -
self

(Tensor) the input tensor

- -

i0(input, *, out=None) -> Tensor

+
+
torch_i0(self)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor

+
+
+

i0(input, *, out=None) -> Tensor

@@ -209,46 +129,45 @@

$$ \mbox{out}_{i} = I_0(\mbox{input}_{i}) = \sum_{k=0}^{\infty} \frac{(\mbox{input}_{i}^2/4)^k}{(k!)^2} $$

+
-

Examples

-
if (torch_is_installed()) {
-
-torch_i0(torch_arange(start = 0, end = 5, dtype=torch_float32()))
-}
-#> torch_tensor
-#>   1.0000
-#>   1.2661
-#>   2.2796
-#>   4.8808
-#>  11.3019
-#>  27.2399
-#> [ CPUFloatType{6} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+torch_i0(torch_arange(start = 0, end = 5, dtype=torch_float32()))
+}
+#> torch_tensor
+#>   1.0000
+#>   1.2661
+#>   2.2796
+#>   4.8808
+#>  11.3019
+#>  27.2399
+#> [ CPUFloatType{6} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_ifft.html b/dev/reference/torch_ifft.html deleted file mode 100644 index b79900da6..000000000 --- a/dev/reference/torch_ifft.html +++ /dev/null @@ -1,299 +0,0 @@ - - - - - - - - -Ifft — torch_ifft • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - -
- -
-
- - -
-

Ifft

-
- -
torch_ifft(self, signal_ndim, normalized = FALSE)
- -

Arguments

- - - - - - - - - - - - - - -
self

(Tensor) the input tensor of at least signal_ndim + 1 dimensions

signal_ndim

(int) the number of dimensions in each signal. signal_ndim can only be 1, 2 or 3

normalized

(bool, optional) controls whether to return normalized results. Default: FALSE

- -

Note

- - -
For CUDA tensors, an LRU cache is used for cuFFT plans to speed up
-repeatedly running FFT methods on tensors of same geometry with same
-configuration. See cufft-plan-cache for more details on how to
-monitor and control the cache.
-
- -

ifft(input, signal_ndim, normalized=False) -> Tensor

- - - - -

Complex-to-complex Inverse Discrete Fourier Transform

-

This method computes the complex-to-complex inverse discrete Fourier -transform. Ignoring the batch dimensions, it computes the following -expression:

-

$$ - X[\omega_1, \dots, \omega_d] = - \frac{1}{\prod_{i=1}^d N_i} \sum_{n_1=0}^{N_1-1} \dots \sum_{n_d=0}^{N_d-1} x[n_1, \dots, n_d] - e^{\ j\ 2 \pi \sum_{i=0}^d \frac{\omega_i n_i}{N_i}}, -$$ -where \(d\) = signal_ndim is number of dimensions for the -signal, and \(N_i\) is the size of signal dimension \(i\).

-

The argument specifications are almost identical with torch_fft. -However, if normalized is set to TRUE, this instead returns the -results multiplied by \(\sqrt{\prod_{i=1}^d N_i}\), to become a unitary -operator. Therefore, to invert a torch_fft, the normalized -argument should be set identically for torch_fft.

-

Returns the real and the imaginary parts together as one tensor of the same -shape of input.

-

The inverse of this function is torch_fft.

-

Warning

- - - -

For CPU tensors, this method is currently only available with MKL. Use -torch_backends.mkl.is_available to check if MKL is installed.

- -

Examples

-
if (torch_is_installed()) { - -x = torch_randn(c(3, 3, 2)) -x -y = torch_fft(x, 2) -torch_ifft(y, 2) # recover x -} -
#> torch_tensor -#> (1,.,.) = -#> -0.9437 0.6436 -#> -1.2636 0.7639 -#> 0.9802 -1.7995 -#> -#> (2,.,.) = -#> -1.5355 -0.9216 -#> 2.7922 -2.0162 -#> 1.0606 0.5383 -#> -#> (3,.,.) = -#> 0.3394 -0.3011 -#> -0.6207 0.1157 -#> -0.1890 0.0129 -#> [ CPUFloatType{3,3,2} ]
-
- -
- - -
- - -
-

Site built with pkgdown 1.6.1.

-
- -
-
- - - - - - - - diff --git a/dev/reference/torch_iinfo.html b/dev/reference/torch_iinfo.html index b83552d77..c808eece6 100644 --- a/dev/reference/torch_iinfo.html +++ b/dev/reference/torch_iinfo.html @@ -1,80 +1,19 @@ - - - - - - - -Integer type info — torch_iinfo • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Integer type info — torch_iinfo • torch - - - - - - + + - - -
-
- -
- -
+
@@ -191,43 +113,37 @@ type." /> type.

-
torch_iinfo(dtype)
- -

Arguments

- - - - - - -
dtype

dtype to get information from.

+
+
torch_iinfo(dtype)
+
+
+

Arguments

+
dtype
+

dtype to get information from.

+
+
-
- +
- - + + diff --git a/dev/reference/torch_imag.html b/dev/reference/torch_imag.html index b06869105..e06cfc274 100644 --- a/dev/reference/torch_imag.html +++ b/dev/reference/torch_imag.html @@ -1,79 +1,18 @@ - - - - - - - -Imag — torch_imag • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Imag — torch_imag • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_imag(self)
- -

Arguments

- - - - - - -
self

(Tensor) the input tensor.

- -

imag(input) -> Tensor

+
+
torch_imag(self)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
+
+

imag(input) -> Tensor

Returns the imaginary part of the input tensor.

-

Warning

- +
+
+

Warning

Not yet implemented.

$$ \mbox{out}_{i} = imag(\mbox{input}_{i}) $$

+
-

Examples

-
if (torch_is_installed()) {
-if (FALSE) {
-torch_imag(torch_tensor(c(-1 + 1i, -2 + 2i, 3 - 3i)))
-}
-}
-
+
+

Examples

+
if (torch_is_installed()) {
+if (FALSE) {
+torch_imag(torch_tensor(c(-1 + 1i, -2 + 2i, 3 - 3i)))
+}
+}
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_index.html b/dev/reference/torch_index.html index 5d1c7402e..8308dfb85 100644 --- a/dev/reference/torch_index.html +++ b/dev/reference/torch_index.html @@ -1,79 +1,18 @@ - - - - - - - -Index torch tensors — torch_index • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Index torch tensors — torch_index • torch - - - - - - + + - - -
-
- -
- -
+
@@ -189,48 +111,40 @@

Helper functions to index tensors.

-
torch_index(self, indices)
- -

Arguments

- - - - - - - - - - -
self

(Tensor) Tensor that will be indexed.

indices

(List[Tensor]) List of indices. Indices are torch tensors with -torch_long() dtype.

+
+
torch_index(self, indices)
+
+
+

Arguments

+
self
+

(Tensor) Tensor that will be indexed.

+
indices
+

(List[Tensor]) List of indices. Indices are torch tensors with +torch_long() dtype.

+
+
-
- +
- - + + diff --git a/dev/reference/torch_index_put.html b/dev/reference/torch_index_put.html index db1fbfaad..1bbf71c3f 100644 --- a/dev/reference/torch_index_put.html +++ b/dev/reference/torch_index_put.html @@ -1,79 +1,18 @@ - - - - - - - -Modify values selected by indices. — torch_index_put • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Modify values selected by indices. — torch_index_put • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,58 +111,46 @@

Modify values selected by indices.

-
torch_index_put(self, indices, values, accumulate = FALSE)
- -

Arguments

- - - - - - - - - - - - - - - - - - -
self

(Tensor) Tensor that will be indexed.

indices

(List[Tensor]) List of indices. Indices are torch tensors with -torch_long() dtype.

values

(Tensor) values that will be replaced the indexed location. Used -for torch_index_put and torch_index_put_.

accumulate

(bool) Wether instead of replacing the current values with values, -you want to add them.

+
+
torch_index_put(self, indices, values, accumulate = FALSE)
+
+
+

Arguments

+
self
+

(Tensor) Tensor that will be indexed.

+
indices
+

(List[Tensor]) List of indices. Indices are torch tensors with +torch_long() dtype.

+
values
+

(Tensor) values that will be replaced the indexed location. Used +for torch_index_put and torch_index_put_.

+
accumulate
+

(bool) Wether instead of replacing the current values with values, +you want to add them.

+
+
-
- +
- - + + diff --git a/dev/reference/torch_index_put_.html b/dev/reference/torch_index_put_.html index dba03096b..24bb884ea 100644 --- a/dev/reference/torch_index_put_.html +++ b/dev/reference/torch_index_put_.html @@ -1,79 +1,18 @@ - - - - - - - -In-place version of torch_index_put. — torch_index_put_ • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -In-place version of torch_index_put. — torch_index_put_ • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,58 +111,46 @@

In-place version of torch_index_put.

-
torch_index_put_(self, indices, values, accumulate = FALSE)
- -

Arguments

- - - - - - - - - - - - - - - - - - -
self

(Tensor) Tensor that will be indexed.

indices

(List[Tensor]) List of indices. Indices are torch tensors with -torch_long() dtype.

values

(Tensor) values that will be replaced the indexed location. Used -for torch_index_put and torch_index_put_.

accumulate

(bool) Wether instead of replacing the current values with values, -you want to add them.

+
+
torch_index_put_(self, indices, values, accumulate = FALSE)
+
+
+

Arguments

+
self
+

(Tensor) Tensor that will be indexed.

+
indices
+

(List[Tensor]) List of indices. Indices are torch tensors with +torch_long() dtype.

+
values
+

(Tensor) values that will be replaced the indexed location. Used +for torch_index_put and torch_index_put_.

+
accumulate
+

(bool) Wether instead of replacing the current values with values, +you want to add them.

+
+
-
- +
- - + + diff --git a/dev/reference/torch_index_select.html b/dev/reference/torch_index_select.html index cb496e226..a7c0595fe 100644 --- a/dev/reference/torch_index_select.html +++ b/dev/reference/torch_index_select.html @@ -1,79 +1,18 @@ - - - - - - - -Index_select — torch_index_select • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Index_select — torch_index_select • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,33 +111,28 @@

Index_select

-
torch_index_select(self, dim, index)
- -

Arguments

- - - - - - - - - - - - - - -
self

(Tensor) the input tensor.

dim

(int) the dimension in which we index

index

(LongTensor) the 1-D tensor containing the indices to index

- -

Note

+
+
torch_index_select(self, dim, index)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
dim
+

(int) the dimension in which we index

+
index
+

(LongTensor) the 1-D tensor containing the indices to index

+
+
+

Note

The returned tensor does not use the same storage as the original tensor. If out has a different shape than expected, we silently change it to the correct shape, reallocating the underlying storage if necessary.

-

index_select(input, dim, index, out=NULL) -> Tensor

- +
+
+

index_select(input, dim, index, out=NULL) -> Tensor

@@ -224,47 +141,46 @@ storage if necessary.

The returned tensor has the same number of dimensions as the original tensor (input). The dim\ th dimension has the same size as the length of index; other dimensions have the same size as in the original tensor.

+
-

Examples

-
if (torch_is_installed()) {
-
-x = torch_randn(c(3, 4))
-x
-indices = torch_tensor(c(1, 3), dtype = torch_int64())
-torch_index_select(x, 1, indices)
-torch_index_select(x, 2, indices)
-}
-#> torch_tensor
-#>  0.2325  0.8443
-#> -0.5426 -0.2814
-#> -1.4507 -0.8767
-#> [ CPUFloatType{3,2} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+x = torch_randn(c(3, 4))
+x
+indices = torch_tensor(c(1, 3), dtype = torch_int64())
+torch_index_select(x, 1, indices)
+torch_index_select(x, 2, indices)
+}
+#> torch_tensor
+#>  0.5332  0.7924
+#>  1.8411 -0.1383
+#> -0.0094  0.9842
+#> [ CPUFloatType{3,2} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_inverse.html b/dev/reference/torch_inverse.html index 7778298c9..9d4844dc4 100644 --- a/dev/reference/torch_inverse.html +++ b/dev/reference/torch_inverse.html @@ -1,79 +1,18 @@ - - - - - - - -Inverse — torch_inverse • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Inverse — torch_inverse • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_inverse(self)
- -

Arguments

- - - - - - -
self

(Tensor) the input tensor of size \((*, n, n)\) where * is zero or more batch dimensions

- -

Note

+
+
torch_inverse(self)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor of size \((*, n, n)\) where * is zero or more batch dimensions

+
+
+

Note

-
Irrespective of the original strides, the returned tensors will be
+
Irrespective of the original strides, the returned tensors will be
 transposed, i.e. with strides like `input.contiguous().transpose(-2, -1).stride()`
-
- -

inverse(input, out=NULL) -> Tensor

+
+
+
+

inverse(input, out=NULL) -> Tensor

Takes the inverse of the square matrix input. input can be batches of 2D square tensors, in which case this function would return a tensor composed of individual inverses.

+
-

Examples

-
if (torch_is_installed()) {
-if (FALSE) {
-x = torch_rand(c(4, 4))
-y = torch_inverse(x)
-z = torch_mm(x, y)
-z
-torch_max(torch_abs(z - torch_eye(4))) # Max non-zero
-# Batched inverse example
-x = torch_randn(c(2, 3, 4, 4))
-y = torch_inverse(x)
-z = torch_matmul(x, y)
-torch_max(torch_abs(z - torch_eye(4)$expand_as(x))) # Max non-zero
-}
-}
-
+
+

Examples

+
if (torch_is_installed()) {
+if (FALSE) {
+x = torch_rand(c(4, 4))
+y = torch_inverse(x)
+z = torch_mm(x, y)
+z
+torch_max(torch_abs(z - torch_eye(4))) # Max non-zero
+# Batched inverse example
+x = torch_randn(c(2, 3, 4, 4))
+y = torch_inverse(x)
+z = torch_matmul(x, y)
+torch_max(torch_abs(z - torch_eye(4)$expand_as(x))) # Max non-zero
+}
+}
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_irfft.html b/dev/reference/torch_irfft.html deleted file mode 100644 index a336c3029..000000000 --- a/dev/reference/torch_irfft.html +++ /dev/null @@ -1,321 +0,0 @@ - - - - - - - - -Irfft — torch_irfft • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - -
- -
-
- - -
-

Irfft

-
- -
torch_irfft(
-  self,
-  signal_ndim,
-  normalized = FALSE,
-  onesided = TRUE,
-  signal_sizes = list()
-)
- -

Arguments

- - - - - - - - - - - - - - - - - - - - - - -
self

(Tensor) the input tensor of at least signal_ndim + 1 dimensions

signal_ndim

(int) the number of dimensions in each signal. signal_ndim can only be 1, 2 or 3

normalized

(bool, optional) controls whether to return normalized results. Default: FALSE

onesided

(bool, optional) controls whether input was halfed to avoid redundancy, e.g., by torch_rfft(). Default: TRUE

signal_sizes

(list or torch.Size, optional) the size of the original signal (without batch dimension). Default: NULL

- -

Note

- - -
Due to the conjugate symmetry, `input` do not need to contain the full
-complex frequency values. Roughly half of the values will be sufficient, as
-is the case when `input` is given by [`~torch.rfft`] with
-`rfft(signal, onesided=TRUE)`. In such case, set the `onesided`
-argument of this method to `TRUE`. Moreover, the original signal shape
-information can sometimes be lost, optionally set `signal_sizes` to be
-the size of the original signal (without the batch dimensions if in batched
-mode) to recover it with correct shape.
-
-Therefore, to invert an [torch_rfft()], the `normalized` and
-`onesided` arguments should be set identically for [torch_irfft()],
-and preferably a `signal_sizes` is given to avoid size mismatch. See the
-example below for a case of size mismatch.
-
-See [torch_rfft()] for details on conjugate symmetry.
-
- -

The inverse of this function is torch_rfft().

-
For CUDA tensors, an LRU cache is used for cuFFT plans to speed up
-repeatedly running FFT methods on tensors of same geometry with same
-configuration. See cufft-plan-cache for more details on how to
-monitor and control the cache.
-
- -

irfft(input, signal_ndim, normalized=False, onesided=TRUE, signal_sizes=NULL) -> Tensor

- - - - -

Complex-to-real Inverse Discrete Fourier Transform

-

This method computes the complex-to-real inverse discrete Fourier transform. -It is mathematically equivalent with torch_ifft with differences only in -formats of the input and output.

-

The argument specifications are almost identical with torch_ifft. -Similar to torch_ifft, if normalized is set to TRUE, -this normalizes the result by multiplying it with -\(\sqrt{\prod_{i=1}^K N_i}\) so that the operator is unitary, where -\(N_i\) is the size of signal dimension \(i\).

-

Warning

- - - -

Generally speaking, input to this function should contain values -following conjugate symmetry. Note that even if onesided is -TRUE, often symmetry on some part is still needed. When this -requirement is not satisfied, the behavior of torch_irfft is -undefined. Since torch_autograd.gradcheck estimates numerical -Jacobian with point perturbations, torch_irfft will almost -certainly fail the check.

- -

For CPU tensors, this method is currently only available with MKL. Use -torch_backends.mkl.is_available to check if MKL is installed.

- -

Examples

-
if (torch_is_installed()) { - -x = torch_randn(c(4, 4)) -torch_rfft(x, 2, onesided=TRUE) -x = torch_randn(c(4, 5)) -torch_rfft(x, 2, onesided=TRUE) -y = torch_rfft(x, 2, onesided=TRUE) -torch_irfft(y, 2, onesided=TRUE, signal_sizes=c(4,5)) # recover x -} -
#> torch_tensor -#> 1.1598 0.9531 1.3629 1.8066 0.7223 -#> -0.3411 -0.7091 0.7843 -1.0341 0.3639 -#> 1.7390 -0.0613 0.0746 1.5620 1.1026 -#> 0.1532 0.1681 0.3220 0.0096 0.8583 -#> [ CPUFloatType{4,5} ]
-
- -
- - -
- - -
-

Site built with pkgdown 1.6.1.

-
- -
-
- - - - - - - - diff --git a/dev/reference/torch_is_complex.html b/dev/reference/torch_is_complex.html index 6ba4d29e1..b7602005e 100644 --- a/dev/reference/torch_is_complex.html +++ b/dev/reference/torch_is_complex.html @@ -1,79 +1,18 @@ - - - - - - - -Is_complex — torch_is_complex • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Is_complex — torch_is_complex • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,50 +111,45 @@

Is_complex

-
torch_is_complex(self)
- -

Arguments

- - - - - - -
self

(Tensor) the PyTorch tensor to test

- -

is_complex(input) -> (bool)

+
+
torch_is_complex(self)
+
+
+

Arguments

+
self
+

(Tensor) the PyTorch tensor to test

+
+
+

is_complex(input) -> (bool)

Returns TRUE if the data type of input is a complex data type i.e., one of torch_complex64, and torch.complex128.

+
+
-
- +
- - + + diff --git a/dev/reference/torch_is_floating_point.html b/dev/reference/torch_is_floating_point.html index 715de2e9b..ce4871291 100644 --- a/dev/reference/torch_is_floating_point.html +++ b/dev/reference/torch_is_floating_point.html @@ -1,79 +1,18 @@ - - - - - - - -Is_floating_point — torch_is_floating_point • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Is_floating_point — torch_is_floating_point • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,50 +111,45 @@

Is_floating_point

-
torch_is_floating_point(self)
- -

Arguments

- - - - - - -
self

(Tensor) the PyTorch tensor to test

- -

is_floating_point(input) -> (bool)

+
+
torch_is_floating_point(self)
+
+
+

Arguments

+
self
+

(Tensor) the PyTorch tensor to test

+
+
+

is_floating_point(input) -> (bool)

Returns TRUE if the data type of input is a floating point data type i.e., one of torch_float64, torch.float32 and torch.float16.

+
+
-
- +
- - + + diff --git a/dev/reference/torch_is_installed.html b/dev/reference/torch_is_installed.html index 1eb6ddf2a..31d80e120 100644 --- a/dev/reference/torch_is_installed.html +++ b/dev/reference/torch_is_installed.html @@ -1,79 +1,18 @@ - - - - - - - -Verifies if torch is installed — torch_is_installed • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Verifies if torch is installed — torch_is_installed • torch - - - - - - + + - - -
-
- -
- -
+
@@ -189,35 +111,32 @@

Verifies if torch is installed

-
torch_is_installed()
- +
+
torch_is_installed()
+
+
-
- +
- - + + diff --git a/dev/reference/torch_is_nonzero.html b/dev/reference/torch_is_nonzero.html index 058363de0..e058b63a6 100644 --- a/dev/reference/torch_is_nonzero.html +++ b/dev/reference/torch_is_nonzero.html @@ -1,79 +1,18 @@ - - - - - - - -Is_nonzero — torch_is_nonzero • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Is_nonzero — torch_is_nonzero • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,19 +111,17 @@

Is_nonzero

-
torch_is_nonzero(self)
- -

Arguments

- - - - - - -
self

(Tensor) the input tensor.

- -

is_nonzero(input) -> (bool)

+
+
torch_is_nonzero(self)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
+
+

is_nonzero(input) -> (bool)

@@ -211,45 +131,44 @@ i.e. not equal to torch_tensor(c(0)) or torch_tensor(c(0))torch_tensor(c(FALSE)). Throws a RuntimeError if torch_numel() != 1 (even in case of sparse tensors).

+
-

Examples

-
if (torch_is_installed()) {
-
-torch_is_nonzero(torch_tensor(c(0.)))
-torch_is_nonzero(torch_tensor(c(1.5)))
-torch_is_nonzero(torch_tensor(c(FALSE)))
-torch_is_nonzero(torch_tensor(c(3)))
-if (FALSE) {
-torch_is_nonzero(torch_tensor(c(1, 3, 5)))
-torch_is_nonzero(torch_tensor(c()))
-}
-}
-
+
+

Examples

+
if (torch_is_installed()) {
+
+torch_is_nonzero(torch_tensor(c(0.)))
+torch_is_nonzero(torch_tensor(c(1.5)))
+torch_is_nonzero(torch_tensor(c(FALSE)))
+torch_is_nonzero(torch_tensor(c(3)))
+if (FALSE) {
+torch_is_nonzero(torch_tensor(c(1, 3, 5)))
+torch_is_nonzero(torch_tensor(c()))
+}
+}
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_isclose.html b/dev/reference/torch_isclose.html index 6ae8da963..cb9481ca5 100644 --- a/dev/reference/torch_isclose.html +++ b/dev/reference/torch_isclose.html @@ -1,79 +1,18 @@ - - - - - - - -Isclose — torch_isclose • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Isclose — torch_isclose • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_isclose(self, other, rtol = 1e-05, atol = 0, equal_nan = FALSE)
- -

Arguments

- - - - - - - - - - - - - - - - - - - - - - -
self

(Tensor) first tensor to compare

other

(Tensor) second tensor to compare

rtol

(float, optional) relative tolerance. Default: 1e-05

atol

(float, optional) absolute tolerance. Default: 1e-08

equal_nan

(bool, optional) if TRUE, then two NaN s will be -considered equal. Default: FALSE

- -

isclose(input, other, rtol=1e-05, atol=1e-08, equal_nan=FALSE) -> Tensor

+
+
torch_isclose(self, other, rtol = 1e-05, atol = 0, equal_nan = FALSE)
+
+
+

Arguments

+
self
+

(Tensor) first tensor to compare

+
other
+

(Tensor) second tensor to compare

+
rtol
+

(float, optional) relative tolerance. Default: 1e-05

+
atol
+

(float, optional) absolute tolerance. Default: 1e-08

+
equal_nan
+

(bool, optional) if TRUE, then two NaN s will be +considered equal. Default: FALSE

+
+
+

isclose(input, other, rtol=1e-05, atol=1e-08, equal_nan=FALSE) -> Tensor

@@ -232,43 +144,42 @@ $$

and/or other are nonfinite they are close if and only if they are equal, with NaNs being considered equal to each other when equal_nan is TRUE.

+
-

Examples

-
if (torch_is_installed()) {
-
-torch_isclose(torch_tensor(c(1., 2, 3)), torch_tensor(c(1 + 1e-10, 3, 4)))
-torch_isclose(torch_tensor(c(Inf, 4)), torch_tensor(c(Inf, 6)), rtol=.5)
-}
-#> torch_tensor
-#>  1
-#>  1
-#> [ CPUBoolType{2} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+torch_isclose(torch_tensor(c(1., 2, 3)), torch_tensor(c(1 + 1e-10, 3, 4)))
+torch_isclose(torch_tensor(c(Inf, 4)), torch_tensor(c(Inf, 6)), rtol=.5)
+}
+#> torch_tensor
+#>  1
+#>  1
+#> [ CPUBoolType{2} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_isfinite.html b/dev/reference/torch_isfinite.html index 653de5cac..2e0fbef22 100644 --- a/dev/reference/torch_isfinite.html +++ b/dev/reference/torch_isfinite.html @@ -1,79 +1,18 @@ - - - - - - - -Isfinite — torch_isfinite • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Isfinite — torch_isfinite • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,62 +111,59 @@

Isfinite

-
torch_isfinite(self)
- -

Arguments

- - - - - - -
self

(Tensor) A tensor to check

- -

TEST

+
+
torch_isfinite(self)
+
+
+

Arguments

+
self
+

(Tensor) A tensor to check

+
+
+

TEST

Returns a new tensor with boolean elements representing if each element is Finite or not.

+
-

Examples

-
if (torch_is_installed()) {
-
-torch_isfinite(torch_tensor(c(1, Inf, 2, -Inf, NaN)))
-}
-#> torch_tensor
-#>  1
-#>  0
-#>  1
-#>  0
-#>  0
-#> [ CPUBoolType{5} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+torch_isfinite(torch_tensor(c(1, Inf, 2, -Inf, NaN)))
+}
+#> torch_tensor
+#>  1
+#>  0
+#>  1
+#>  0
+#>  0
+#> [ CPUBoolType{5} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_isinf.html b/dev/reference/torch_isinf.html index a55e67b59..7da92463c 100644 --- a/dev/reference/torch_isinf.html +++ b/dev/reference/torch_isinf.html @@ -1,79 +1,18 @@ - - - - - - - -Isinf — torch_isinf • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Isinf — torch_isinf • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_isinf(self)
- -

Arguments

- - - - - - -
self

(Tensor) A tensor to check

- -

TEST

+
+
torch_isinf(self)
+
+
+

Arguments

+
self
+

(Tensor) A tensor to check

+
+
+

TEST

Returns a new tensor with boolean elements representing if each element is +/-INF or not.

+
-

Examples

-
if (torch_is_installed()) {
-
-torch_isinf(torch_tensor(c(1, Inf, 2, -Inf, NaN)))
-}
-#> torch_tensor
-#>  0
-#>  1
-#>  0
-#>  1
-#>  0
-#> [ CPUBoolType{5} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+torch_isinf(torch_tensor(c(1, Inf, 2, -Inf, NaN)))
+}
+#> torch_tensor
+#>  0
+#>  1
+#>  0
+#>  1
+#>  0
+#> [ CPUBoolType{5} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_isnan.html b/dev/reference/torch_isnan.html index 9fcf067f3..aba057d2d 100644 --- a/dev/reference/torch_isnan.html +++ b/dev/reference/torch_isnan.html @@ -1,79 +1,18 @@ - - - - - - - -Isnan — torch_isnan • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Isnan — torch_isnan • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_isnan(self)
- -

Arguments

- - - - - - -
self

(Tensor) A tensor to check

- -

TEST

+
+
torch_isnan(self)
+
+
+

Arguments

+
self
+

(Tensor) A tensor to check

+
+
+

TEST

Returns a new tensor with boolean elements representing if each element is NaN or not.

+
-

Examples

-
if (torch_is_installed()) {
-
-torch_isnan(torch_tensor(c(1, NaN, 2)))
-}
-#> torch_tensor
-#>  0
-#>  1
-#>  0
-#> [ CPUBoolType{3} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+torch_isnan(torch_tensor(c(1, NaN, 2)))
+}
+#> torch_tensor
+#>  0
+#>  1
+#>  0
+#> [ CPUBoolType{3} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_isneginf.html b/dev/reference/torch_isneginf.html index 4d326e35c..f9de577e0 100644 --- a/dev/reference/torch_isneginf.html +++ b/dev/reference/torch_isneginf.html @@ -1,79 +1,18 @@ - - - - - - - -Isneginf — torch_isneginf • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Isneginf — torch_isneginf • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,61 +111,58 @@

Isneginf

-
torch_isneginf(self)
- -

Arguments

- - - - - - -
self

(Tensor) the input tensor.

- -

isneginf(input, *, out=None) -> Tensor

+
+
torch_isneginf(self)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
+
+

isneginf(input, *, out=None) -> Tensor

Tests if each element of input is negative infinity or not.

+
-

Examples

-
if (torch_is_installed()) {
-
-a <- torch_tensor(c(-Inf, Inf, 1.2))
-torch_isneginf(a)
-}
-#> torch_tensor
-#>  1
-#>  0
-#>  0
-#> [ CPUBoolType{3} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+a <- torch_tensor(c(-Inf, Inf, 1.2))
+torch_isneginf(a)
+}
+#> torch_tensor
+#>  1
+#>  0
+#>  0
+#> [ CPUBoolType{3} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_isposinf.html b/dev/reference/torch_isposinf.html index 243be0ad0..4a5a42198 100644 --- a/dev/reference/torch_isposinf.html +++ b/dev/reference/torch_isposinf.html @@ -1,79 +1,18 @@ - - - - - - - -Isposinf — torch_isposinf • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Isposinf — torch_isposinf • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,61 +111,58 @@

Isposinf

-
torch_isposinf(self)
- -

Arguments

- - - - - - -
self

(Tensor) the input tensor.

- -

isposinf(input, *, out=None) -> Tensor

+
+
torch_isposinf(self)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
+
+

isposinf(input, *, out=None) -> Tensor

Tests if each element of input is positive infinity or not.

+
-

Examples

-
if (torch_is_installed()) {
-
-a <- torch_tensor(c(-Inf, Inf, 1.2))
-torch_isposinf(a)
-}
-#> torch_tensor
-#>  0
-#>  1
-#>  0
-#> [ CPUBoolType{3} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+a <- torch_tensor(c(-Inf, Inf, 1.2))
+torch_isposinf(a)
+}
+#> torch_tensor
+#>  0
+#>  1
+#>  0
+#> [ CPUBoolType{3} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_isreal.html b/dev/reference/torch_isreal.html index fcabb8dd3..0adc9ca81 100644 --- a/dev/reference/torch_isreal.html +++ b/dev/reference/torch_isreal.html @@ -1,79 +1,18 @@ - - - - - - - -Isreal — torch_isreal • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Isreal — torch_isreal • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_isreal(self)
- -

Arguments

- - - - - - -
self

(Tensor) the input tensor.

- -

isreal(input) -> Tensor

+
+
torch_isreal(self)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
+
+

isreal(input) -> Tensor

Returns a new tensor with boolean elements representing if each element of input is real-valued or not. All real-valued types are considered real. Complex values are considered real when their imaginary part is 0.

+
-

Examples

-
if (torch_is_installed()) {
-if (FALSE) {
-torch_isreal(torch_tensor(c(1, 1+1i, 2+0i)))
-}
-}
-
+
+

Examples

+
if (torch_is_installed()) {
+if (FALSE) {
+torch_isreal(torch_tensor(c(1, 1+1i, 2+0i)))
+}
+}
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_istft.html b/dev/reference/torch_istft.html index c2e905f76..0001c0088 100644 --- a/dev/reference/torch_istft.html +++ b/dev/reference/torch_istft.html @@ -1,79 +1,18 @@ - - - - - - - -Istft — torch_istft • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Istft — torch_istft • torch - - - - - - - - + + -
-
- -
- -
+
-

Inverse short time Fourier Transform. This is expected to be the inverse of torch_stft().

+

Inverse short time Fourier Transform. This is expected to be the inverse of torch_stft().

-
torch_istft(
-  self,
-  n_fft,
-  hop_length = NULL,
-  win_length = NULL,
-  window = list(),
-  center = TRUE,
-  normalized = FALSE,
-  onesided = NULL,
-  length = NULL,
-  return_complex = FALSE
-)
+
+
torch_istft(
+  self,
+  n_fft,
+  hop_length = NULL,
+  win_length = NULL,
+  window = list(),
+  center = TRUE,
+  normalized = FALSE,
+  onesided = NULL,
+  length = NULL,
+  return_complex = FALSE
+)
+
-

Arguments

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
self

(Tensor) The input tensor. Expected to be output of torch_stft(), +

+

Arguments

+
self
+

(Tensor) The input tensor. Expected to be output of torch_stft(), can either be complex (channel, fft_size, n_frame), or real (channel, fft_size, n_frame, 2) where the channel dimension is -optional.

n_fft

(int) Size of Fourier transform

hop_length

(Optional[int]) The distance between neighboring sliding window frames. -(Default: n_fft %% 4)

win_length

(Optional[int]) The size of window frame and STFT filter. -(Default: n_fft)

window

(Optional(torch.Tensor)) The optional window function. -(Default: torch_ones(win_length))

center

(bool) Whether input was padded on both sides so that the +optional.

+
n_fft
+

(int) Size of Fourier transform

+
hop_length
+

(Optional[int]) The distance between neighboring sliding window frames. +(Default: n_fft %% 4)

+
win_length
+

(Optional[int]) The size of window frame and STFT filter. +(Default: n_fft)

+
window
+

(Optional(torch.Tensor)) The optional window function. +(Default: torch_ones(win_length))

+
center
+

(bool) Whether input was padded on both sides so that the \(t\)-th frame is centered at time \(t \times \mbox{hop\_length}\). -(Default: TRUE)

normalized

(bool) Whether the STFT was normalized. (Default: FALSE)

onesided

(Optional(bool)) Whether the STFT was onesided. -(Default: TRUE if n_fft != fft_size in the input size)

length

(Optional(int)]) The amount to trim the signal by (i.e. the -original signal length). (Default: whole signal)

return_complex

(Optional(bool)) Whether the output should be complex, +(Default: TRUE)

+
normalized
+

(bool) Whether the STFT was normalized. (Default: FALSE)

+
onesided
+

(Optional(bool)) Whether the STFT was onesided. +(Default: TRUE if n_fft != fft_size in the input size)

+
length
+

(Optional(int)]) The amount to trim the signal by (i.e. the +original signal length). (Default: whole signal)

+
return_complex
+

(Optional(bool)) Whether the output should be complex, or if the input should be assumed to derive from a real signal and window. -Note that this is incompatible with onesided=TRUE. (Default: FALSE)

- -

Details

- +Note that this is incompatible with onesided=TRUE. (Default: FALSE)

+
+
+

Details

It has the same parameters (+ additional optional parameter of length) and it should return the least squares estimation of the original signal. The algorithm will check using the NOLA condition (nonzero overlap).

Important consideration in the parameters window and center so that the envelop created by the summation of all the windows is never zero at certain point in time. Specifically, \(\sum_{t=-\infty}^{\infty} |w|^2(n-t\times hop_length) \neq 0\).

-

Since torch_stft() discards elements at the end of the signal if they do not fit in a frame, +

Since torch_stft() discards elements at the end of the signal if they do not fit in a frame, istft may return a shorter signal than the original signal (can occur if center is FALSE since the signal isn't padded).

If center is TRUE, then there will be padding e.g. 'constant', 'reflect', etc. @@ -281,32 +183,29 @@ of right padding. These additional values could be zeros or a reflection of the (some loss of signal).

D. W. Griffin and J. S. Lim, "Signal estimation from modified short-time Fourier transform," IEEE Trans. ASSP, vol.32, no.2, pp.236-243, Apr. 1984.

+
+
-
- +
- - + + diff --git a/dev/reference/torch_kaiser_window.html b/dev/reference/torch_kaiser_window.html index a79b0eeb4..e4104007a 100644 --- a/dev/reference/torch_kaiser_window.html +++ b/dev/reference/torch_kaiser_window.html @@ -1,79 +1,18 @@ - - - - - - - -Kaiser_window — torch_kaiser_window • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Kaiser_window — torch_kaiser_window • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,60 +111,47 @@

Kaiser_window

-
torch_kaiser_window(
-  window_length,
-  periodic,
-  beta,
-  dtype = torch_float(),
-  layout = NULL,
-  device = NULL,
-  requires_grad = NULL
-)
- -

Arguments

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
window_length

(int) length of the window.

periodic

(bool, optional) If TRUE, returns a periodic window suitable for use in spectral analysis. If FALSE, returns a symmetric window suitable for use in filter design.

beta

(float, optional) shape parameter for the window.

dtype

(torch.dtype, optional) the desired data type of returned tensor. Default: if NULL, uses a global default (see torch_set_default_tensor_type). If dtype is not given, infer the data type from the other input arguments. If any of start, end, or stop are floating-point, the dtype is inferred to be the default dtype, see ~torch.get_default_dtype. Otherwise, the dtype is inferred to be torch.int64.

layout

(torch.layout, optional) the desired layout of returned Tensor. Default: torch_strided.

device

(torch.device, optional) the desired device of returned tensor. Default: if NULL, uses the current device for the default tensor type (see torch_set_default_tensor_type). device will be the CPU for CPU tensor types and the current CUDA device for CUDA tensor types.

requires_grad

(bool, optional) If autograd should record operations on the returned tensor. Default: FALSE.

- -

Note

+
+
torch_kaiser_window(
+  window_length,
+  periodic,
+  beta,
+  dtype = torch_float(),
+  layout = NULL,
+  device = NULL,
+  requires_grad = NULL
+)
+
+
+

Arguments

+
window_length
+

(int) length of the window.

+
periodic
+

(bool, optional) If TRUE, returns a periodic window suitable for use in spectral analysis. If FALSE, returns a symmetric window suitable for use in filter design.

+
beta
+

(float, optional) shape parameter for the window.

+
dtype
+

(torch.dtype, optional) the desired data type of returned tensor. Default: if NULL, uses a global default (see torch_set_default_tensor_type). If dtype is not given, infer the data type from the other input arguments. If any of start, end, or stop are floating-point, the dtype is inferred to be the default dtype, see ~torch.get_default_dtype. Otherwise, the dtype is inferred to be torch.int64.

+
layout
+

(torch.layout, optional) the desired layout of returned Tensor. Default: torch_strided.

+
device
+

(torch.device, optional) the desired device of returned tensor. Default: if NULL, uses the current device for the default tensor type (see torch_set_default_tensor_type). device will be the CPU for CPU tensor types and the current CUDA device for CUDA tensor types.

+
requires_grad
+

(bool, optional) If autograd should record operations on the returned tensor. Default: FALSE.

+
+
+

Note

If window_length is one, then the returned window is a single element tensor containing a one.

-

kaiser_window(window_length, periodic=TRUE, beta=12.0, *, dtype=None, layout=torch.strided, device=None, requires_grad=FALSE) -> Tensor

- +
+
+

kaiser_window(window_length, periodic=TRUE, beta=12.0, *, dtype=None, layout=torch.strided, device=None, requires_grad=FALSE) -> Tensor

Computes the Kaiser window with window length window_length and shape parameter beta.

-

Let I_0 be the zeroth order modified Bessel function of the first kind (see torch_i0()) and +

Let I_0 be the zeroth order modified Bessel function of the first kind (see torch_i0()) and N = L - 1 if periodic is FALSE and L if periodic is TRUE, where L is the window_length. This function computes:

$$ @@ -251,33 +160,30 @@ $$

Calling torch_kaiser_window(L, B, periodic=TRUE) is equivalent to calling torch_kaiser_window(L + 1, B, periodic=FALSE)[:-1]). The periodic argument is intended as a helpful shorthand -to produce a periodic window as input to functions like torch_stft().

+to produce a periodic window as input to functions like torch_stft().

+
+
-
- +
- - + + diff --git a/dev/reference/torch_kthvalue.html b/dev/reference/torch_kthvalue.html index 8473d16f0..49df71c8b 100644 --- a/dev/reference/torch_kthvalue.html +++ b/dev/reference/torch_kthvalue.html @@ -1,79 +1,18 @@ - - - - - - - -Kthvalue — torch_kthvalue • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Kthvalue — torch_kthvalue • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,31 +111,23 @@

Kthvalue

-
torch_kthvalue(self, k, dim = -1L, keepdim = FALSE)
- -

Arguments

- - - - - - - - - - - - - - - - - - -
self

(Tensor) the input tensor.

k

(int) k for the k-th smallest element

dim

(int, optional) the dimension to find the kth value along

keepdim

(bool) whether the output tensor has dim retained or not.

- -

kthvalue(input, k, dim=NULL, keepdim=False, out=NULL) -> (Tensor, LongTensor)

+
+
torch_kthvalue(self, k, dim = -1L, keepdim = FALSE)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
k
+

(int) k for the k-th smallest element

+
dim
+

(int, optional) the dimension to find the kth value along

+
keepdim
+

(bool) whether the output tensor has dim retained or not.

+
+
+

kthvalue(input, k, dim=NULL, keepdim=False, out=NULL) -> (Tensor, LongTensor)

@@ -224,55 +138,54 @@ smallest element of each row of the input tensor in the given dimen

If keepdim is TRUE, both the values and indices tensors are the same size as input, except in the dimension dim where they are of size 1. Otherwise, dim is squeezed -(see torch_squeeze), resulting in both the values and +(see torch_squeeze), resulting in both the values and indices tensors having 1 fewer dimension than the input tensor.

+
-

Examples

-
if (torch_is_installed()) {
-
-x <- torch_arange(1, 6)
-x
-torch_kthvalue(x, 4)
-x <- torch_arange(1,6)$resize_(c(2,3))
-x
-torch_kthvalue(x, 2, 1, TRUE)
-}
-#> [[1]]
-#> torch_tensor
-#>  4  5  6
-#> [ CPUFloatType{1,3} ]
-#> 
-#> [[2]]
-#> torch_tensor
-#>  1  1  1
-#> [ CPULongType{1,3} ]
-#> 
-
+
+

Examples

+
if (torch_is_installed()) {
+
+x <- torch_arange(1, 6)
+x
+torch_kthvalue(x, 4)
+x <- torch_arange(1,6)$resize_(c(2,3))
+x
+torch_kthvalue(x, 2, 1, TRUE)
+}
+#> [[1]]
+#> torch_tensor
+#>  4  5  6
+#> [ CPUFloatType{1,3} ]
+#> 
+#> [[2]]
+#> torch_tensor
+#>  1  1  1
+#> [ CPULongType{1,3} ]
+#> 
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_layout.html b/dev/reference/torch_layout.html index 7dac5b0ad..eccca9743 100644 --- a/dev/reference/torch_layout.html +++ b/dev/reference/torch_layout.html @@ -1,79 +1,18 @@ - - - - - - - -Creates the corresponding layout — torch_layout • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Creates the corresponding layout — torch_layout • torch - - - - - - + + - - -
-
- -
- -
+
@@ -189,37 +111,34 @@

Creates the corresponding layout

-
torch_strided()
-
-torch_sparse_coo()
+
+
torch_strided()
 
+torch_sparse_coo()
+
+
-
- +
- - + + diff --git a/dev/reference/torch_lcm.html b/dev/reference/torch_lcm.html index 7c39a192f..e8b3bd59a 100644 --- a/dev/reference/torch_lcm.html +++ b/dev/reference/torch_lcm.html @@ -1,79 +1,18 @@ - - - - - - - -Lcm — torch_lcm • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Lcm — torch_lcm • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_lcm(self, other)
- -

Arguments

- - - - - - - - - - -
self

(Tensor) the input tensor.

other

(Tensor) the second input tensor

- -

Note

+
+
torch_lcm(self, other)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
other
+

(Tensor) the second input tensor

+
+
+

Note

This defines \(lcm(0, 0) = 0\) and \(lcm(0, a) = 0\).

-

lcm(input, other, *, out=None) -> Tensor

- +
+
+

lcm(input, other, *, out=None) -> Tensor

Computes the element-wise least common multiple (LCM) of input and other.

Both input and other must have integer types.

+
-

Examples

-
if (torch_is_installed()) {
-
-if (torch::cuda_is_available()) {
-a <- torch_tensor(c(5, 10, 15), dtype = torch_long(), device = "cuda")
-b <- torch_tensor(c(3, 4, 5), dtype = torch_long(), device = "cuda")
-torch_lcm(a, b)
-c <- torch_tensor(c(3L), device = "cuda")
-torch_lcm(a, c)
-}
-}
-
+
+

Examples

+
if (torch_is_installed()) {
+
+if (torch::cuda_is_available()) {
+a <- torch_tensor(c(5, 10, 15), dtype = torch_long(), device = "cuda")
+b <- torch_tensor(c(3, 4, 5), dtype = torch_long(), device = "cuda")
+torch_lcm(a, b)
+c <- torch_tensor(c(3L), device = "cuda")
+torch_lcm(a, c)
+}
+}
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_le.html b/dev/reference/torch_le.html index 88c98945b..cb0bef4bb 100644 --- a/dev/reference/torch_le.html +++ b/dev/reference/torch_le.html @@ -1,79 +1,18 @@ - - - - - - - -Le — torch_le • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Le — torch_le • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_le(self, other)
- -

Arguments

- - - - - - - - - - -
self

(Tensor) the tensor to compare

other

(Tensor or float) the tensor or value to compare

- -

le(input, other, out=NULL) -> Tensor

+
+
torch_le(self, other)
+
+
+

Arguments

+
self
+

(Tensor) the tensor to compare

+
other
+

(Tensor or float) the tensor or value to compare

+
+
+

le(input, other, out=NULL) -> Tensor

Computes \(\mbox{input} \leq \mbox{other}\) element-wise.

The second argument can be a number or a tensor whose shape is broadcastable with the first argument.

+
-

Examples

-
if (torch_is_installed()) {
-
-torch_le(torch_tensor(matrix(1:4, ncol = 2, byrow=TRUE)), 
-         torch_tensor(matrix(c(1,1,4,4), ncol = 2, byrow=TRUE)))
-}
-#> torch_tensor
-#>  1  0
-#>  1  1
-#> [ CPUBoolType{2,2} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+torch_le(torch_tensor(matrix(1:4, ncol = 2, byrow=TRUE)), 
+         torch_tensor(matrix(c(1,1,4,4), ncol = 2, byrow=TRUE)))
+}
+#> torch_tensor
+#>  1  0
+#>  1  1
+#> [ CPUBoolType{2,2} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_lerp.html b/dev/reference/torch_lerp.html index 605025170..97b68fc2c 100644 --- a/dev/reference/torch_lerp.html +++ b/dev/reference/torch_lerp.html @@ -1,79 +1,18 @@ - - - - - - - -Lerp — torch_lerp • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Lerp — torch_lerp • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_lerp(self, end, weight)
- -

Arguments

- - - - - - - - - - - - - - -
self

(Tensor) the tensor with the starting points

end

(Tensor) the tensor with the ending points

weight

(float or tensor) the weight for the interpolation formula

- -

lerp(input, end, weight, out=NULL)

+
+
torch_lerp(self, end, weight)
+
+
+

Arguments

+
self
+

(Tensor) the tensor with the starting points

+
end
+

(Tensor) the tensor with the ending points

+
weight
+

(float or tensor) the weight for the interpolation formula

+
+
+

lerp(input, end, weight, out=NULL)

@@ -221,49 +137,48 @@ $$ The shapes of start and end must be broadcastable . If weight is a tensor, then the shapes of weight, start, and end must be broadcastable .

+
-

Examples

-
if (torch_is_installed()) {
-
-start = torch_arange(1, 4)
-end = torch_empty(4)$fill_(10)
-start
-end
-torch_lerp(start, end, 0.5)
-torch_lerp(start, end, torch_full_like(start, 0.5))
-}
-#> torch_tensor
-#>  5.5000
-#>  6.0000
-#>  6.5000
-#>  7.0000
-#> [ CPUFloatType{4} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+start = torch_arange(1, 4)
+end = torch_empty(4)$fill_(10)
+start
+end
+torch_lerp(start, end, 0.5)
+torch_lerp(start, end, torch_full_like(start, 0.5))
+}
+#> torch_tensor
+#>  5.5000
+#>  6.0000
+#>  6.5000
+#>  7.0000
+#> [ CPUFloatType{4} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_less.html b/dev/reference/torch_less.html index 3320d6f74..d2fdcc656 100644 --- a/dev/reference/torch_less.html +++ b/dev/reference/torch_less.html @@ -1,79 +1,18 @@ - - - - - - - -Less — torch_less • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Less — torch_less • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_less(self, other)
- -

Arguments

- - - - - - - - - - -
self

(Tensor) the tensor to compare

other

(Tensor or float) the tensor or value to compare

- -

less(input, other, *, out=None) -> Tensor

+
+
torch_less(self, other)
+
+
+

Arguments

+
self
+

(Tensor) the tensor to compare

+
other
+

(Tensor or float) the tensor or value to compare

+
+
+

less(input, other, *, out=None) -> Tensor

-

Alias for torch_lt().

+

Alias for torch_lt().

+
+
-
- +
- - + + diff --git a/dev/reference/torch_less_equal.html b/dev/reference/torch_less_equal.html index 9ea0aa0dd..d9d28a599 100644 --- a/dev/reference/torch_less_equal.html +++ b/dev/reference/torch_less_equal.html @@ -1,79 +1,18 @@ - - - - - - - -Less_equal — torch_less_equal • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Less_equal — torch_less_equal • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,53 +111,46 @@

Less_equal

-
torch_less_equal(self, other)
- -

Arguments

- - - - - - - - - - -
self

(Tensor) the tensor to compare

other

(Tensor or float) the tensor or value to compare

- -

less_equal(input, other, *, out=None) -> Tensor

+
+
torch_less_equal(self, other)
+
+
+

Arguments

+
self
+

(Tensor) the tensor to compare

+
other
+

(Tensor or float) the tensor or value to compare

+
+
+

less_equal(input, other, *, out=None) -> Tensor

-

Alias for torch_le().

+

Alias for torch_le().

+
+
-
- +
- - + + diff --git a/dev/reference/torch_lgamma.html b/dev/reference/torch_lgamma.html index e78b53435..8b81d4968 100644 --- a/dev/reference/torch_lgamma.html +++ b/dev/reference/torch_lgamma.html @@ -1,79 +1,18 @@ - - - - - - - -Lgamma — torch_lgamma • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Lgamma — torch_lgamma • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_lgamma(self)
- -

Arguments

- - - - - - -
self

(Tensor) the input tensor.

- -

lgamma(input, out=NULL) -> Tensor

+
+
torch_lgamma(self)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
+
+

lgamma(input, out=NULL) -> Tensor

@@ -209,45 +129,44 @@

$$ \mbox{out}_{i} = \log \Gamma(\mbox{input}_{i}) $$

+
-

Examples

-
if (torch_is_installed()) {
-
-a = torch_arange(0.5, 2, 0.5)
-torch_lgamma(a)
-}
-#> torch_tensor
-#>  0.5724
-#>  0.0000
-#> -0.1208
-#>  0.0000
-#> [ CPUFloatType{4} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+a = torch_arange(0.5, 2, 0.5)
+torch_lgamma(a)
+}
+#> torch_tensor
+#>  0.5724
+#>  0.0000
+#> -0.1208
+#>  0.0000
+#> [ CPUFloatType{4} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_linspace.html b/dev/reference/torch_linspace.html index e98b3b046..2fdfa78ad 100644 --- a/dev/reference/torch_linspace.html +++ b/dev/reference/torch_linspace.html @@ -1,79 +1,18 @@ - - - - - - - -Linspace — torch_linspace • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Linspace — torch_linspace • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,95 +111,80 @@

Linspace

-
torch_linspace(
-  start,
-  end,
-  steps = 100,
-  dtype = NULL,
-  layout = torch_strided(),
-  device = NULL,
-  requires_grad = FALSE
-)
- -

Arguments

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
start

(float) the starting value for the set of points

end

(float) the ending value for the set of points

steps

(int) number of points to sample between start and end. Default: 100.

dtype

(torch.dtype, optional) the desired data type of returned tensor. Default: if NULL, uses a global default (see torch_set_default_tensor_type).

layout

(torch.layout, optional) the desired layout of returned Tensor. Default: torch_strided.

device

(torch.device, optional) the desired device of returned tensor. Default: if NULL, uses the current device for the default tensor type (see torch_set_default_tensor_type). device will be the CPU for CPU tensor types and the current CUDA device for CUDA tensor types.

requires_grad

(bool, optional) If autograd should record operations on the returned tensor. Default: FALSE.

- -

linspace(start, end, steps=100, out=NULL, dtype=NULL, layout=torch.strided, device=NULL, requires_grad=False) -> Tensor

+
+
torch_linspace(
+  start,
+  end,
+  steps = 100,
+  dtype = NULL,
+  layout = torch_strided(),
+  device = NULL,
+  requires_grad = FALSE
+)
+
+
+

Arguments

+
start
+

(float) the starting value for the set of points

+
end
+

(float) the ending value for the set of points

+
steps
+

(int) number of points to sample between start and end. Default: 100.

+
dtype
+

(torch.dtype, optional) the desired data type of returned tensor. Default: if NULL, uses a global default (see torch_set_default_tensor_type).

+
layout
+

(torch.layout, optional) the desired layout of returned Tensor. Default: torch_strided.

+
device
+

(torch.device, optional) the desired device of returned tensor. Default: if NULL, uses the current device for the default tensor type (see torch_set_default_tensor_type). device will be the CPU for CPU tensor types and the current CUDA device for CUDA tensor types.

+
requires_grad
+

(bool, optional) If autograd should record operations on the returned tensor. Default: FALSE.

+
+
+

linspace(start, end, steps=100, out=NULL, dtype=NULL, layout=torch.strided, device=NULL, requires_grad=False) -> Tensor

Returns a one-dimensional tensor of steps equally spaced points between start and end.

The output tensor is 1-D of size steps.

+
-

Examples

-
if (torch_is_installed()) {
-
-torch_linspace(3, 10, steps=5)
-torch_linspace(-10, 10, steps=5)
-torch_linspace(start=-10, end=10, steps=5)
-torch_linspace(start=-10, end=10, steps=1)
-}
-#> torch_tensor
-#> -10
-#> [ CPUFloatType{1} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+torch_linspace(3, 10, steps=5)
+torch_linspace(-10, 10, steps=5)
+torch_linspace(start=-10, end=10, steps=5)
+torch_linspace(start=-10, end=10, steps=1)
+}
+#> torch_tensor
+#> -10
+#> [ CPUFloatType{1} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_load.html b/dev/reference/torch_load.html index a08b8b98d..ac6703313 100644 --- a/dev/reference/torch_load.html +++ b/dev/reference/torch_load.html @@ -1,79 +1,18 @@ - - - - - - - -Loads a saved object — torch_load • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Loads a saved object — torch_load • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,53 +111,46 @@

Loads a saved object

-
torch_load(path, device = "cpu")
- -

Arguments

- - - - - - - - - - -
path

a path to the saved object

device

a device to load tensors to. By default we load to the cpu but you can also -load them to any cuda device. If NULL then the device where the tensor has been saved will -be reused.

- -

See also

+
+
torch_load(path, device = "cpu")
+
-

Other torch_save: -torch_save()

+
+

Arguments

+
path
+

a path to the saved object

+
device
+

a device to load tensors to. By default we load to the cpu but you can also +load them to any cuda device. If NULL then the device where the tensor has been saved will +be reused.

+
+
+

See also

+

Other torch_save: +torch_save()

+
+
-
- +
- - + + diff --git a/dev/reference/torch_log.html b/dev/reference/torch_log.html index e26daea06..97c36e1da 100644 --- a/dev/reference/torch_log.html +++ b/dev/reference/torch_log.html @@ -1,79 +1,18 @@ - - - - - - - -Log — torch_log • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Log — torch_log • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_log(self)
- -

Arguments

- - - - - - -
self

(Tensor) the input tensor.

- -

log(input, out=NULL) -> Tensor

+
+
torch_log(self)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
+
+

log(input, out=NULL) -> Tensor

@@ -210,47 +130,46 @@ of input.

$$ y_{i} = \log_{e} (x_{i}) $$

+
-

Examples

-
if (torch_is_installed()) {
-
-a = torch_randn(c(5))
-a
-torch_log(a)
-}
-#> torch_tensor
-#>     nan
-#>     nan
-#> -3.6425
-#> -2.8690
-#>     nan
-#> [ CPUFloatType{5} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+a = torch_randn(c(5))
+a
+torch_log(a)
+}
+#> torch_tensor
+#> -0.4426
+#>     nan
+#>     nan
+#>  0.3628
+#>     nan
+#> [ CPUFloatType{5} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_log10.html b/dev/reference/torch_log10.html index 416c500db..6c0023dca 100644 --- a/dev/reference/torch_log10.html +++ b/dev/reference/torch_log10.html @@ -1,79 +1,18 @@ - - - - - - - -Log10 — torch_log10 • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Log10 — torch_log10 • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_log10(self)
- -

Arguments

- - - - - - -
self

(Tensor) the input tensor.

- -

log10(input, out=NULL) -> Tensor

+
+
torch_log10(self)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
+
+

log10(input, out=NULL) -> Tensor

@@ -210,48 +130,46 @@ of input.

$$ y_{i} = \log_{10} (x_{i}) $$

+
-

Examples

-
if (torch_is_installed()) {
-
-a = torch_rand(5)
-a
-torch_log10(a)
-}
-#> torch_tensor
-#> 0.01 *
-#> -3.1319
-#> -89.8706
-#> -90.8191
-#> -3.1578
-#> -23.1152
-#> [ CPUFloatType{5} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+a = torch_rand(5)
+a
+torch_log10(a)
+}
+#> torch_tensor
+#> -0.2518
+#> -0.8868
+#> -0.2750
+#> -1.1953
+#> -0.0861
+#> [ CPUFloatType{5} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_log1p.html b/dev/reference/torch_log1p.html index b00bda321..d25bbd158 100644 --- a/dev/reference/torch_log1p.html +++ b/dev/reference/torch_log1p.html @@ -1,79 +1,18 @@ - - - - - - - -Log1p — torch_log1p • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Log1p — torch_log1p • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_log1p(self)
- -

Arguments

- - - - - - -
self

(Tensor) the input tensor.

- -

Note

+
+
torch_log1p(self)
+
-

This function is more accurate than torch_log for small +

+

Arguments

+
self
+

(Tensor) the input tensor.

+
+
+

Note

+

This function is more accurate than torch_log for small values of input

-

log1p(input, out=NULL) -> Tensor

- +
+
+

log1p(input, out=NULL) -> Tensor

@@ -213,47 +134,47 @@ values of input

$$ y_i = \log_{e} (x_i + 1) $$

+
-

Examples

-
if (torch_is_installed()) {
-
-a = torch_randn(c(5))
-a
-torch_log1p(a)
-}
-#> torch_tensor
-#>     nan
-#>  1.0895
-#>  1.2127
-#>  0.8769
-#> -0.1600
-#> [ CPUFloatType{5} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+a = torch_randn(c(5))
+a
+torch_log1p(a)
+}
+#> torch_tensor
+#> 0.01 *
+#>     nan
+#>     nan
+#>     nan
+#>  6.4439
+#> -212.4724
+#> [ CPUFloatType{5} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_log2.html b/dev/reference/torch_log2.html index 9be04e340..a3a4f3232 100644 --- a/dev/reference/torch_log2.html +++ b/dev/reference/torch_log2.html @@ -1,79 +1,18 @@ - - - - - - - -Log2 — torch_log2 • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Log2 — torch_log2 • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_log2(self)
- -

Arguments

- - - - - - -
self

(Tensor) the input tensor.

- -

log2(input, out=NULL) -> Tensor

+
+
torch_log2(self)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
+
+

log2(input, out=NULL) -> Tensor

@@ -210,47 +130,46 @@ of input.

$$ y_{i} = \log_{2} (x_{i}) $$

+
-

Examples

-
if (torch_is_installed()) {
-
-a = torch_rand(5)
-a
-torch_log2(a)
-}
-#> torch_tensor
-#> -1.2392
-#> -0.1789
-#> -1.0968
-#> -0.3876
-#> -1.6382
-#> [ CPUFloatType{5} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+a = torch_rand(5)
+a
+torch_log2(a)
+}
+#> torch_tensor
+#> -5.7196
+#> -0.4841
+#> -0.3836
+#> -0.1539
+#> -2.7668
+#> [ CPUFloatType{5} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_logaddexp.html b/dev/reference/torch_logaddexp.html index fff4473ce..76d5cdf07 100644 --- a/dev/reference/torch_logaddexp.html +++ b/dev/reference/torch_logaddexp.html @@ -1,79 +1,18 @@ - - - - - - - -Logaddexp — torch_logaddexp • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Logaddexp — torch_logaddexp • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,23 +111,19 @@

Logaddexp

-
torch_logaddexp(self, other)
- -

Arguments

- - - - - - - - - - -
self

(Tensor) the input tensor.

other

(Tensor) the second input tensor

- -

logaddexp(input, other, *, out=None) -> Tensor

+
+
torch_logaddexp(self, other)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
other
+

(Tensor) the second input tensor

+
+
+

logaddexp(input, other, *, out=None) -> Tensor

@@ -215,47 +133,46 @@ in statistics where the calculated probabilities of events may be so small as to exceed the range of normal floating point numbers. In such cases the logarithm of the calculated probability is stored. This function allows adding probabilities stored in such a fashion.

-

This op should be disambiguated with torch_logsumexp() which performs a +

This op should be disambiguated with torch_logsumexp() which performs a reduction on a single tensor.

+
-

Examples

-
if (torch_is_installed()) {
-
-torch_logaddexp(torch_tensor(c(-1.0)), torch_tensor(c(-1.0, -2, -3)))
-torch_logaddexp(torch_tensor(c(-100.0, -200, -300)), torch_tensor(c(-1.0, -2, -3)))
-torch_logaddexp(torch_tensor(c(1.0, 2000, 30000)), torch_tensor(c(-1.0, -2, -3)))
-}
-#> torch_tensor
-#>      1.1269
-#>   2000.0000
-#>  30000.0000
-#> [ CPUFloatType{3} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+torch_logaddexp(torch_tensor(c(-1.0)), torch_tensor(c(-1.0, -2, -3)))
+torch_logaddexp(torch_tensor(c(-100.0, -200, -300)), torch_tensor(c(-1.0, -2, -3)))
+torch_logaddexp(torch_tensor(c(1.0, 2000, 30000)), torch_tensor(c(-1.0, -2, -3)))
+}
+#> torch_tensor
+#>      1.1269
+#>   2000.0000
+#>  30000.0000
+#> [ CPUFloatType{3} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_logaddexp2.html b/dev/reference/torch_logaddexp2.html index 64afff8c0..c71c65ca7 100644 --- a/dev/reference/torch_logaddexp2.html +++ b/dev/reference/torch_logaddexp2.html @@ -1,79 +1,18 @@ - - - - - - - -Logaddexp2 — torch_logaddexp2 • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Logaddexp2 — torch_logaddexp2 • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,55 +111,48 @@

Logaddexp2

-
torch_logaddexp2(self, other)
- -

Arguments

- - - - - - - - - - -
self

(Tensor) the input tensor.

other

(Tensor) the second input tensor

- -

logaddexp2(input, other, *, out=None) -> Tensor

+
+
torch_logaddexp2(self, other)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
other
+

(Tensor) the second input tensor

+
+
+

logaddexp2(input, other, *, out=None) -> Tensor

Logarithm of the sum of exponentiations of the inputs in base-2.

Calculates pointwise \(\log_2\left(2^x + 2^y\right)\). See -torch_logaddexp() for more details.

+torch_logaddexp() for more details.

+
+
-
- +
- - + + diff --git a/dev/reference/torch_logcumsumexp.html b/dev/reference/torch_logcumsumexp.html index 3a487bd5e..efc94a126 100644 --- a/dev/reference/torch_logcumsumexp.html +++ b/dev/reference/torch_logcumsumexp.html @@ -1,79 +1,18 @@ - - - - - - - -Logcumsumexp — torch_logcumsumexp • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Logcumsumexp — torch_logcumsumexp • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,23 +111,19 @@

Logcumsumexp

-
torch_logcumsumexp(self, dim)
- -

Arguments

- - - - - - - - - - -
self

(Tensor) the input tensor.

dim

(int) the dimension to do the operation over

- -

logcumsumexp(input, dim, *, out=None) -> Tensor

+
+
torch_logcumsumexp(self, dim)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
dim
+

(int) the dimension to do the operation over

+
+
+

logcumsumexp(input, dim, *, out=None) -> Tensor

@@ -215,51 +133,50 @@ elements of input in the dimension dim.

$$ \mbox{logcumsumexp}(x)_{ij} = \log \sum\limits_{j=0}^{i} \exp(x_{ij}) $$

+
-

Examples

-
if (torch_is_installed()) {
-
-a <- torch_randn(c(10))
-torch_logcumsumexp(a, dim=1)
-}
-#> torch_tensor
-#> -1.5370
-#>  1.2680
-#>  1.5851
-#>  1.6548
-#>  1.7451
-#>  2.1327
-#>  2.1618
-#>  2.2632
-#>  2.3241
-#>  2.3405
-#> [ CPUFloatType{10} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+a <- torch_randn(c(10))
+torch_logcumsumexp(a, dim=1)
+}
+#> torch_tensor
+#> -1.4950
+#>  1.7300
+#>  1.7635
+#>  1.8110
+#>  2.0972
+#>  2.3175
+#>  2.3406
+#>  2.4778
+#>  2.5082
+#>  2.5843
+#> [ CPUFloatType{10} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_logdet.html b/dev/reference/torch_logdet.html index 1ca2beb5a..fe93c3920 100644 --- a/dev/reference/torch_logdet.html +++ b/dev/reference/torch_logdet.html @@ -1,79 +1,18 @@ - - - - - - - -Logdet — torch_logdet • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Logdet — torch_logdet • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_logdet(self)
- -

Arguments

- - - - - - -
self

(Tensor) the input tensor of size (*, n, n) where * is zero or more batch dimensions.

- -

Note

+
+
torch_logdet(self)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor of size (*, n, n) where * is zero or more batch dimensions.

+
+
+

Note

-
Result is `-inf` if `input` has zero log determinant, and is `NaN` if
+
Result is `-inf` if `input` has zero log determinant, and is `NaN` if
 `input` has negative determinant.
-
+
-
Backward through `logdet` internally uses SVD results when `input`
+
Backward through `logdet` internally uses SVD results when `input`
 is not invertible. In this case, double backward through `logdet` will
 be unstable in when `input` doesn't have distinct singular values. See
 `~torch.svd` for details.
-
- -

logdet(input) -> Tensor

+
+
+
+

logdet(input) -> Tensor

Calculates log determinant of a square matrix or batches of square matrices.

+
-

Examples

-
if (torch_is_installed()) {
-
-A = torch_randn(c(3, 3))
-torch_det(A)
-torch_logdet(A)
-A
-A$det()
-A$det()$log()
-}
-#> torch_tensor
-#> nan
-#> [ CPUFloatType{} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+A = torch_randn(c(3, 3))
+torch_det(A)
+torch_logdet(A)
+A
+A$det()
+A$det()$log()
+}
+#> torch_tensor
+#> 0.547764
+#> [ CPUFloatType{} ]
+
+
+ -
- +
- - + + diff --git a/dev/reference/torch_logical_and.html b/dev/reference/torch_logical_and.html index 7f556decc..9d4bb17f9 100644 --- a/dev/reference/torch_logical_and.html +++ b/dev/reference/torch_logical_and.html @@ -1,79 +1,18 @@ - - - - - - - -Logical_and — torch_logical_and • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Logical_and — torch_logical_and • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,66 +111,61 @@

Logical_and

-
torch_logical_and(self, other)
- -

Arguments

- - - - - - - - - - -
self

(Tensor) the input tensor.

other

(Tensor) the tensor to compute AND with

- -

logical_and(input, other, out=NULL) -> Tensor

+
+
torch_logical_and(self, other)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
other
+

(Tensor) the tensor to compute AND with

+
+
+

logical_and(input, other, out=NULL) -> Tensor

Computes the element-wise logical AND of the given input tensors. Zeros are treated as FALSE and nonzeros are treated as TRUE.

+
-

Examples

-
if (torch_is_installed()) {
-
-torch_logical_and(torch_tensor(c(TRUE, FALSE, TRUE)), torch_tensor(c(TRUE, FALSE, FALSE)))
-a = torch_tensor(c(0, 1, 10, 0), dtype=torch_int8())
-b = torch_tensor(c(4, 0, 1, 0), dtype=torch_int8())
-torch_logical_and(a, b)
-if (FALSE) {
-torch_logical_and(a, b, out=torch_empty(4, dtype=torch_bool()))
-}
-}
-
+
+

Examples

+
if (torch_is_installed()) {
+
+torch_logical_and(torch_tensor(c(TRUE, FALSE, TRUE)), torch_tensor(c(TRUE, FALSE, FALSE)))
+a = torch_tensor(c(0, 1, 10, 0), dtype=torch_int8())
+b = torch_tensor(c(4, 0, 1, 0), dtype=torch_int8())
+torch_logical_and(a, b)
+if (FALSE) {
+torch_logical_and(a, b, out=torch_empty(4, dtype=torch_bool()))
+}
+}
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_logical_not.html b/dev/reference/torch_logical_not.html index 6ee928c99..617d9b262 100644 --- a/dev/reference/torch_logical_not.html +++ b/dev/reference/torch_logical_not.html @@ -1,79 +1,18 @@ - - - - - - - -Logical_not — torch_logical_not • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Logical_not — torch_logical_not • torch - - - - - - - - + + -
-
- -
- -
+
@@ -190,61 +112,56 @@
-

Arguments

- - - - - - -
self

(Tensor) the input tensor.

- -

logical_not(input, out=NULL) -> Tensor

- +
+

Arguments

+
self
+

(Tensor) the input tensor.

+
+
+

logical_not(input, out=NULL) -> Tensor

Computes the element-wise logical NOT of the given input tensor. If not specified, the output tensor will have the bool dtype. If the input tensor is not a bool tensor, zeros are treated as FALSE and non-zeros are treated as TRUE.

+
-

Examples

-
if (torch_is_installed()) {
-
-torch_logical_not(torch_tensor(c(TRUE, FALSE)))
-torch_logical_not(torch_tensor(c(0, 1, -10), dtype=torch_int8()))
-torch_logical_not(torch_tensor(c(0., 1.5, -10.), dtype=torch_double()))
-}
-#> torch_tensor
-#>  1
-#>  0
-#>  0
-#> [ CPUBoolType{3} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+torch_logical_not(torch_tensor(c(TRUE, FALSE)))
+torch_logical_not(torch_tensor(c(0, 1, -10), dtype=torch_int8()))
+torch_logical_not(torch_tensor(c(0., 1.5, -10.), dtype=torch_double()))
+}
+#> torch_tensor
+#>  1
+#>  0
+#>  0
+#> [ CPUBoolType{3} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_logical_or.html b/dev/reference/torch_logical_or.html index ce3577a1a..f8f95d43e 100644 --- a/dev/reference/torch_logical_or.html +++ b/dev/reference/torch_logical_or.html @@ -1,79 +1,18 @@ - - - - - - - -Logical_or — torch_logical_or • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Logical_or — torch_logical_or • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,68 +111,63 @@

Logical_or

-
torch_logical_or(self, other)
- -

Arguments

- - - - - - - - - - -
self

(Tensor) the input tensor.

other

(Tensor) the tensor to compute OR with

- -

logical_or(input, other, out=NULL) -> Tensor

+
+
torch_logical_or(self, other)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
other
+

(Tensor) the tensor to compute OR with

+
+
+

logical_or(input, other, out=NULL) -> Tensor

Computes the element-wise logical OR of the given input tensors. Zeros are treated as FALSE and nonzeros are treated as TRUE.

+
-

Examples

-
if (torch_is_installed()) {
-
-torch_logical_or(torch_tensor(c(TRUE, FALSE, TRUE)), torch_tensor(c(TRUE, FALSE, FALSE)))
-a = torch_tensor(c(0, 1, 10, 0), dtype=torch_int8())
-b = torch_tensor(c(4, 0, 1, 0), dtype=torch_int8())
-torch_logical_or(a, b)
-if (FALSE) {
-torch_logical_or(a$double(), b$double())
-torch_logical_or(a$double(), b)
-torch_logical_or(a, b, out=torch_empty(4, dtype=torch_bool()))
-}
-}
-
+
+

Examples

+
if (torch_is_installed()) {
+
+torch_logical_or(torch_tensor(c(TRUE, FALSE, TRUE)), torch_tensor(c(TRUE, FALSE, FALSE)))
+a = torch_tensor(c(0, 1, 10, 0), dtype=torch_int8())
+b = torch_tensor(c(4, 0, 1, 0), dtype=torch_int8())
+torch_logical_or(a, b)
+if (FALSE) {
+torch_logical_or(a$double(), b$double())
+torch_logical_or(a$double(), b)
+torch_logical_or(a, b, out=torch_empty(4, dtype=torch_bool()))
+}
+}
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_logical_xor.html b/dev/reference/torch_logical_xor.html index 0f1e083a7..5f4ac1d54 100644 --- a/dev/reference/torch_logical_xor.html +++ b/dev/reference/torch_logical_xor.html @@ -1,79 +1,18 @@ - - - - - - - -Logical_xor — torch_logical_xor • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Logical_xor — torch_logical_xor • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,71 +111,66 @@

Logical_xor

-
torch_logical_xor(self, other)
- -

Arguments

- - - - - - - - - - -
self

(Tensor) the input tensor.

other

(Tensor) the tensor to compute XOR with

- -

logical_xor(input, other, out=NULL) -> Tensor

+
+
torch_logical_xor(self, other)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
other
+

(Tensor) the tensor to compute XOR with

+
+
+

logical_xor(input, other, out=NULL) -> Tensor

Computes the element-wise logical XOR of the given input tensors. Zeros are treated as FALSE and nonzeros are treated as TRUE.

+
-

Examples

-
if (torch_is_installed()) {
-
-torch_logical_xor(torch_tensor(c(TRUE, FALSE, TRUE)), torch_tensor(c(TRUE, FALSE, FALSE)))
-a = torch_tensor(c(0, 1, 10, 0), dtype=torch_int8())
-b = torch_tensor(c(4, 0, 1, 0), dtype=torch_int8())
-torch_logical_xor(a, b)
-torch_logical_xor(a$to(dtype=torch_double()), b$to(dtype=torch_double()))
-torch_logical_xor(a$to(dtype=torch_double()), b)
-}
-#> torch_tensor
-#>  1
-#>  1
-#>  0
-#>  0
-#> [ CPUBoolType{4} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+torch_logical_xor(torch_tensor(c(TRUE, FALSE, TRUE)), torch_tensor(c(TRUE, FALSE, FALSE)))
+a = torch_tensor(c(0, 1, 10, 0), dtype=torch_int8())
+b = torch_tensor(c(4, 0, 1, 0), dtype=torch_int8())
+torch_logical_xor(a, b)
+torch_logical_xor(a$to(dtype=torch_double()), b$to(dtype=torch_double()))
+torch_logical_xor(a$to(dtype=torch_double()), b)
+}
+#> torch_tensor
+#>  1
+#>  1
+#>  0
+#>  0
+#> [ CPUBoolType{4} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_logit.html b/dev/reference/torch_logit.html index 7ee2d8e3b..ed67113b0 100644 --- a/dev/reference/torch_logit.html +++ b/dev/reference/torch_logit.html @@ -1,79 +1,18 @@ - - - - - - - -Logit — torch_logit • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Logit — torch_logit • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_logit(self, eps = NULL)
- -

Arguments

- - - - - - - - - - -
self

(Tensor) the input tensor.

eps

(float, optional) the epsilon for input clamp bound. Default: None

- -

logit(input, eps=None, *, out=None) -> Tensor

+
+
torch_logit(self, eps = NULL)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
eps
+

(float, optional) the epsilon for input clamp bound. Default: None

+
+
+

logit(input, eps=None, *, out=None) -> Tensor

@@ -221,47 +139,46 @@ When eps is None and input < 0 or input > 1, the 1 - \mbox{eps} & \mbox{if } x_{i} > 1 - \mbox{eps} \end{array} $$

+
-

Examples

-
if (torch_is_installed()) {
-
-a <- torch_rand(5)
-a
-torch_logit(a, eps=1e-6)
-}
-#> torch_tensor
-#>  0.1445
-#>  0.1620
-#>  0.0578
-#>  2.8378
-#>  1.9980
-#> [ CPUFloatType{5} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+a <- torch_rand(5)
+a
+torch_logit(a, eps=1e-6)
+}
+#> torch_tensor
+#>  2.2091
+#>  1.5547
+#> -1.8264
+#> -0.1012
+#> -1.9238
+#> [ CPUFloatType{5} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_logspace.html b/dev/reference/torch_logspace.html index b6b3b90f6..607dabdc9 100644 --- a/dev/reference/torch_logspace.html +++ b/dev/reference/torch_logspace.html @@ -1,79 +1,18 @@ - - - - - - - -Logspace — torch_logspace • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Logspace — torch_logspace • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,56 +111,40 @@

Logspace

-
torch_logspace(
-  start,
-  end,
-  steps = 100,
-  base = 10,
-  dtype = NULL,
-  layout = torch_strided(),
-  device = NULL,
-  requires_grad = FALSE
-)
- -

Arguments

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
start

(float) the starting value for the set of points

end

(float) the ending value for the set of points

steps

(int) number of points to sample between start and end. Default: 100.

base

(float) base of the logarithm function. Default: 10.0.

dtype

(torch.dtype, optional) the desired data type of returned tensor. Default: if NULL, uses a global default (see torch_set_default_tensor_type).

layout

(torch.layout, optional) the desired layout of returned Tensor. Default: torch_strided.

device

(torch.device, optional) the desired device of returned tensor. Default: if NULL, uses the current device for the default tensor type (see torch_set_default_tensor_type). device will be the CPU for CPU tensor types and the current CUDA device for CUDA tensor types.

requires_grad

(bool, optional) If autograd should record operations on the returned tensor. Default: FALSE.

- -

logspace(start, end, steps=100, base=10.0, out=NULL, dtype=NULL, layout=torch.strided, device=NULL, requires_grad=False) -> Tensor

+
+
torch_logspace(
+  start,
+  end,
+  steps = 100,
+  base = 10,
+  dtype = NULL,
+  layout = torch_strided(),
+  device = NULL,
+  requires_grad = FALSE
+)
+
+
+

Arguments

+
start
+

(float) the starting value for the set of points

+
end
+

(float) the ending value for the set of points

+
steps
+

(int) number of points to sample between start and end. Default: 100.

+
base
+

(float) base of the logarithm function. Default: 10.0.

+
dtype
+

(torch.dtype, optional) the desired data type of returned tensor. Default: if NULL, uses a global default (see torch_set_default_tensor_type).

+
layout
+

(torch.layout, optional) the desired layout of returned Tensor. Default: torch_strided.

+
device
+

(torch.device, optional) the desired device of returned tensor. Default: if NULL, uses the current device for the default tensor type (see torch_set_default_tensor_type). device will be the CPU for CPU tensor types and the current CUDA device for CUDA tensor types.

+
requires_grad
+

(bool, optional) If autograd should record operations on the returned tensor. Default: FALSE.

+
+
+

logspace(start, end, steps=100, base=10.0, out=NULL, dtype=NULL, layout=torch.strided, device=NULL, requires_grad=False) -> Tensor

@@ -246,44 +152,43 @@ logarithmically spaced with base base between \({\mbox{base}}^{\mbox{start}}\) and \({\mbox{base}}^{\mbox{end}}\).

The output tensor is 1-D of size steps.

+
-

Examples

-
if (torch_is_installed()) {
-
-torch_logspace(start=-10, end=10, steps=5)
-torch_logspace(start=0.1, end=1.0, steps=5)
-torch_logspace(start=0.1, end=1.0, steps=1)
-torch_logspace(start=2, end=2, steps=1, base=2)
-}
-#> torch_tensor
-#>  4
-#> [ CPUFloatType{1} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+torch_logspace(start=-10, end=10, steps=5)
+torch_logspace(start=0.1, end=1.0, steps=5)
+torch_logspace(start=0.1, end=1.0, steps=1)
+torch_logspace(start=2, end=2, steps=1, base=2)
+}
+#> torch_tensor
+#>  4
+#> [ CPUFloatType{1} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_logsumexp.html b/dev/reference/torch_logsumexp.html index f9491c3a0..f6fdbb4df 100644 --- a/dev/reference/torch_logsumexp.html +++ b/dev/reference/torch_logsumexp.html @@ -1,79 +1,18 @@ - - - - - - - -Logsumexp — torch_logsumexp • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Logsumexp — torch_logsumexp • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,27 +111,21 @@

Logsumexp

-
torch_logsumexp(self, dim, keepdim = FALSE)
- -

Arguments

- - - - - - - - - - - - - - -
self

(Tensor) the input tensor.

dim

(int or tuple of ints) the dimension or dimensions to reduce.

keepdim

(bool) whether the output tensor has dim retained or not.

- -

logsumexp(input, dim, keepdim=False, out=NULL)

+
+
torch_logsumexp(self, dim, keepdim = FALSE)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
dim
+

(int or tuple of ints) the dimension or dimensions to reduce.

+
keepdim
+

(bool) whether the output tensor has dim retained or not.

+
+
+

logsumexp(input, dim, keepdim=False, out=NULL)

@@ -222,46 +138,45 @@ stabilized.

$$

If keepdim is TRUE, the output tensor is of the same size as input except in the dimension(s) dim where it is of size 1. -Otherwise, dim is squeezed (see torch_squeeze), resulting in the +Otherwise, dim is squeezed (see torch_squeeze), resulting in the output tensor having 1 (or len(dim)) fewer dimension(s).

+
-

Examples

-
if (torch_is_installed()) {
-
-a = torch_randn(c(3, 3))
-torch_logsumexp(a, 1)
-}
-#> torch_tensor
-#>  1.2870
-#>  1.3744
-#>  0.5878
-#> [ CPUFloatType{3} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+a = torch_randn(c(3, 3))
+torch_logsumexp(a, 1)
+}
+#> torch_tensor
+#>  2.5873
+#>  1.6834
+#>  1.4515
+#> [ CPUFloatType{3} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_lstsq.html b/dev/reference/torch_lstsq.html index 64ba35e69..660eae4f8 100644 --- a/dev/reference/torch_lstsq.html +++ b/dev/reference/torch_lstsq.html @@ -1,79 +1,18 @@ - - - - - - - -Lstsq — torch_lstsq • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Lstsq — torch_lstsq • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_lstsq(self, A)
- -

Arguments

- - - - - - - - - - -
self

(Tensor) the matrix \(B\)

A

(Tensor) the \(m\) by \(n\) matrix \(A\)

- -

Note

+
+
torch_lstsq(self, A)
+
+
+

Arguments

+
self
+

(Tensor) the matrix \(B\)

+
A
+

(Tensor) the \(m\) by \(n\) matrix \(A\)

+
+
+

Note

-
The case when \eqn{m < n} is not supported on the GPU.
-
- -

lstsq(input, A, out=NULL) -> Tensor

+
The case when \eqn{m < n} is not supported on the GPU.
+
+
+
+

lstsq(input, A, out=NULL) -> Tensor

@@ -234,60 +153,59 @@ Returned tensor \(X\) has shape \((\mbox{max}(m, n) \times k)\). The first \(n\) rows of \(X\) contains the solution. If \(m \geq n\), the residual sum of squares for the solution in each column is given by the sum of squares of elements in the remaining \(m - n\) rows of that column.

+
-

Examples

-
if (torch_is_installed()) {
-
-A = torch_tensor(rbind(
- c(1,1,1),
- c(2,3,4),
- c(3,5,2),
- c(4,2,5),
- c(5,4,3)
-))
-B = torch_tensor(rbind(
- c(-10, -3),
- c(12, 14),
- c(14, 12),
- c(16, 16),
- c(18, 16)
-))
-out = torch_lstsq(B, A)
-out[[1]]
-}
-#> torch_tensor
-#>   2.0000   1.0000
-#>   1.0000   1.0000
-#>   1.0000   2.0000
-#>  10.9635   4.8501
-#>   8.9332   5.2418
-#> [ CPUFloatType{5,2} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+A = torch_tensor(rbind(
+ c(1,1,1),
+ c(2,3,4),
+ c(3,5,2),
+ c(4,2,5),
+ c(5,4,3)
+))
+B = torch_tensor(rbind(
+ c(-10, -3),
+ c(12, 14),
+ c(14, 12),
+ c(16, 16),
+ c(18, 16)
+))
+out = torch_lstsq(B, A)
+out[[1]]
+}
+#> torch_tensor
+#>   2.0000   1.0000
+#>   1.0000   1.0000
+#>   1.0000   2.0000
+#>  10.9635   4.8501
+#>   8.9332   5.2418
+#> [ CPUFloatType{5,2} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_lt.html b/dev/reference/torch_lt.html index 6f2ffd7bb..71d6f7b33 100644 --- a/dev/reference/torch_lt.html +++ b/dev/reference/torch_lt.html @@ -1,79 +1,18 @@ - - - - - - - -Lt — torch_lt • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Lt — torch_lt • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_lt(self, other)
- -

Arguments

- - - - - - - - - - -
self

(Tensor) the tensor to compare

other

(Tensor or float) the tensor or value to compare

- -

lt(input, other, out=NULL) -> Tensor

+
+
torch_lt(self, other)
+
+
+

Arguments

+
self
+

(Tensor) the tensor to compare

+
other
+

(Tensor or float) the tensor or value to compare

+
+
+

lt(input, other, out=NULL) -> Tensor

Computes \(\mbox{input} < \mbox{other}\) element-wise.

The second argument can be a number or a tensor whose shape is broadcastable with the first argument.

+
-

Examples

-
if (torch_is_installed()) {
-
-torch_lt(torch_tensor(matrix(1:4, ncol = 2, byrow=TRUE)), 
-         torch_tensor(matrix(c(1,1,4,4), ncol = 2, byrow=TRUE)))
-}
-#> torch_tensor
-#>  0  0
-#>  1  0
-#> [ CPUBoolType{2,2} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+torch_lt(torch_tensor(matrix(1:4, ncol = 2, byrow=TRUE)), 
+         torch_tensor(matrix(c(1,1,4,4), ncol = 2, byrow=TRUE)))
+}
+#> torch_tensor
+#>  0  0
+#>  1  0
+#> [ CPUBoolType{2,2} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_lu.html b/dev/reference/torch_lu.html index 8361e3d4c..27489ca74 100644 --- a/dev/reference/torch_lu.html +++ b/dev/reference/torch_lu.html @@ -1,81 +1,20 @@ - - - - - - - -LU — torch_lu • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -LU — torch_lu • torch - - - - - - - - - - - - - - - - - + + -
-
- -
- -
+
@@ -193,84 +115,74 @@ tuple containing the LU factorization and pivots of A. Pivoting is done if pivot is set to True.

-
torch_lu(A, pivot = TRUE, get_infos = FALSE, out = NULL)
+
+
torch_lu(A, pivot = TRUE, get_infos = FALSE, out = NULL)
+
-

Arguments

- - - - - - - - - - - - - - - - - - -
A

(Tensor) the tensor to factor of size (, m, n)(,m,n)

pivot

(bool, optional) – controls whether pivoting is done. Default: TRUE

get_infos

(bool, optional) – if set to True, returns an info IntTensor. Default: FALSE

out

(tuple, optional) – optional output tuple. If get_infos is True, then the elements +

+

Arguments

+
A
+

(Tensor) the tensor to factor of size (, m, n)(,m,n)

+
pivot
+

(bool, optional) – controls whether pivoting is done. Default: TRUE

+
get_infos
+

(bool, optional) – if set to True, returns an info IntTensor. Default: FALSE

+
out
+

(tuple, optional) – optional output tuple. If get_infos is True, then the elements in the tuple are Tensor, IntTensor, and IntTensor. If get_infos is False, then the -elements in the tuple are Tensor, IntTensor. Default: NULL

- - -

Examples

-
if (torch_is_installed()) {
-
-A = torch_randn(c(2, 3, 3))
-torch_lu(A)
-
-}
-#> [[1]]
-#> torch_tensor
-#> (1,.,.) = 
-#>  -1.1690 -0.3246 -0.0451
-#>   0.0292  0.4267  1.1366
-#>  -0.3251 -0.1691  0.9301
-#> 
-#> (2,.,.) = 
-#>   1.8523 -1.9457  0.8976
-#>  -0.5732 -1.6425  0.3803
-#>  -0.0552 -0.2128 -0.7883
-#> [ CPUFloatType{2,3,3} ]
-#> 
-#> [[2]]
-#> torch_tensor
-#>  1  3  3
-#>  2  2  3
-#> [ CPUIntType{2,3} ]
-#> 
-
+elements in the tuple are Tensor, IntTensor. Default: NULL

+
+ +
+

Examples

+
if (torch_is_installed()) {
+
+A = torch_randn(c(2, 3, 3))
+torch_lu(A)
+
+}
+#> [[1]]
+#> torch_tensor
+#> (1,.,.) = 
+#>  -1.8450  0.5889  1.0984
+#>   0.2584  1.2155 -1.6606
+#>  -0.2986  0.6794  0.8909
+#> 
+#> (2,.,.) = 
+#>   0.9005  0.1914  0.1164
+#>   0.7049  1.8139 -0.0791
+#>   0.2704  0.3101 -1.3346
+#> [ CPUFloatType{2,3,3} ]
+#> 
+#> [[2]]
+#> torch_tensor
+#>  3  2  3
+#>  3  2  3
+#> [ CPUIntType{2,3} ]
+#> 
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_lu_solve.html b/dev/reference/torch_lu_solve.html index 76da53d9a..e1300f748 100644 --- a/dev/reference/torch_lu_solve.html +++ b/dev/reference/torch_lu_solve.html @@ -1,79 +1,18 @@ - - - - - - - -Lu_solve — torch_lu_solve • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Lu_solve — torch_lu_solve • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,70 +111,63 @@

Lu_solve

-
torch_lu_solve(self, LU_data, LU_pivots)
- -

Arguments

- - - - - - - - - - - - - - -
self

(Tensor) the RHS tensor of size \((*, m, k)\), where \(*\) is zero or more batch dimensions.

LU_data

(Tensor) the pivoted LU factorization of A from torch_lu of size \((*, m, m)\), where \(*\) is zero or more batch dimensions.

LU_pivots

(IntTensor) the pivots of the LU factorization from torch_lu of size \((*, m)\), where \(*\) is zero or more batch dimensions. The batch dimensions of LU_pivots must be equal to the batch dimensions of LU_data.

- -

lu_solve(input, LU_data, LU_pivots, out=NULL) -> Tensor

+
+
torch_lu_solve(self, LU_data, LU_pivots)
+
+
+

Arguments

+
self
+

(Tensor) the RHS tensor of size \((*, m, k)\), where \(*\) is zero or more batch dimensions.

+
LU_data
+

(Tensor) the pivoted LU factorization of A from torch_lu of size \((*, m, m)\), where \(*\) is zero or more batch dimensions.

+
LU_pivots
+

(IntTensor) the pivots of the LU factorization from torch_lu of size \((*, m)\), where \(*\) is zero or more batch dimensions. The batch dimensions of LU_pivots must be equal to the batch dimensions of LU_data.

+
+
+

lu_solve(input, LU_data, LU_pivots, out=NULL) -> Tensor

Returns the LU solve of the linear system \(Ax = b\) using the partially pivoted LU factorization of A from torch_lu.

+
-

Examples

-
if (torch_is_installed()) {
-A = torch_randn(c(2, 3, 3))
-b = torch_randn(c(2, 3, 1))
-out = torch_lu(A)
-x = torch_lu_solve(b, out[[1]], out[[2]])
-torch_norm(torch_bmm(A, x) - b)
-}
-#> torch_tensor
-#> 3.27571e-07
-#> [ CPUFloatType{} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+A = torch_randn(c(2, 3, 3))
+b = torch_randn(c(2, 3, 1))
+out = torch_lu(A)
+x = torch_lu_solve(b, out[[1]], out[[2]])
+torch_norm(torch_bmm(A, x) - b)
+}
+#> torch_tensor
+#> 2.30848e-07
+#> [ CPUFloatType{} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_manual_seed.html b/dev/reference/torch_manual_seed.html index f3898bd43..2e3c4dfdd 100644 --- a/dev/reference/torch_manual_seed.html +++ b/dev/reference/torch_manual_seed.html @@ -1,79 +1,18 @@ - - - - - - - -Sets the seed for generating random numbers. — torch_manual_seed • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Sets the seed for generating random numbers. — torch_manual_seed • torch - - - - - - + + - - -
-
- -
- -
+
@@ -189,43 +111,37 @@

Sets the seed for generating random numbers.

-
torch_manual_seed(seed)
- -

Arguments

- - - - - - -
seed

integer seed.

+
+
torch_manual_seed(seed)
+
+
+

Arguments

+
seed
+

integer seed.

+
+
-
- +
- - + + diff --git a/dev/reference/torch_masked_select.html b/dev/reference/torch_masked_select.html index a3d138f44..e0c409d55 100644 --- a/dev/reference/torch_masked_select.html +++ b/dev/reference/torch_masked_select.html @@ -1,79 +1,18 @@ - - - - - - - -Masked_select — torch_masked_select • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Masked_select — torch_masked_select • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,27 +111,24 @@

Masked_select

-
torch_masked_select(self, mask)
- -

Arguments

- - - - - - - - - - -
self

(Tensor) the input tensor.

mask

(BoolTensor) the tensor containing the binary mask to index with

- -

Note

+
+
torch_masked_select(self, mask)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
mask
+

(BoolTensor) the tensor containing the binary mask to index with

+
+
+

Note

The returned tensor does not use the same storage as the original tensor

-

masked_select(input, mask, out=NULL) -> Tensor

- +
+
+

masked_select(input, mask, out=NULL) -> Tensor

@@ -217,50 +136,48 @@ as the original tensor

the boolean mask mask which is a BoolTensor.

The shapes of the mask tensor and the input tensor don't need to match, but they must be broadcastable .

+
-

Examples

-
if (torch_is_installed()) {
-
-x = torch_randn(c(3, 4))
-x
-mask = x$ge(0.5)
-mask
-torch_masked_select(x, mask)
-}
-#> torch_tensor
-#>  0.6649
-#>  1.7534
-#>  0.7085
-#>  0.6806
-#>  1.4154
-#>  0.8181
-#> [ CPUFloatType{6} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+x = torch_randn(c(3, 4))
+x
+mask = x$ge(0.5)
+mask
+torch_masked_select(x, mask)
+}
+#> torch_tensor
+#>  0.5900
+#>  0.9864
+#>  1.1042
+#>  1.2145
+#>  1.7813
+#> [ CPUFloatType{5} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_matmul.html b/dev/reference/torch_matmul.html index bfb662d2b..7b8049ef9 100644 --- a/dev/reference/torch_matmul.html +++ b/dev/reference/torch_matmul.html @@ -1,79 +1,18 @@ - - - - - - - -Matmul — torch_matmul • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Matmul — torch_matmul • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_matmul(self, other)
- -

Arguments

- - - - - - - - - - -
self

(Tensor) the first tensor to be multiplied

other

(Tensor) the second tensor to be multiplied

- -

Note

+
+
torch_matmul(self, other)
+
+
+

Arguments

+
self
+

(Tensor) the first tensor to be multiplied

+
other
+

(Tensor) the second tensor to be multiplied

+
+
+

Note

-
The 1-dimensional dot product version of this function does not support an `out` parameter.
-
- -

matmul(input, other, out=NULL) -> Tensor

+
The 1-dimensional dot product version of this function does not support an `out` parameter.
+
+
+
+

matmul(input, other, out=NULL) -> Tensor

Matrix product of two tensors.

-

The behavior depends on the dimensionality of the tensors as follows:

    -
  • If both tensors are 1-dimensional, the dot product (scalar) is returned.

  • +

    The behavior depends on the dimensionality of the tensors as follows:

    • If both tensors are 1-dimensional, the dot product (scalar) is returned.

    • If both arguments are 2-dimensional, the matrix-matrix product is returned.

    • If the first argument is 1-dimensional and the second argument is 2-dimensional, a 1 is prepended to its dimension for the purpose of the matrix multiply. @@ -233,92 +151,89 @@ The non-matrix (i.e. batch) dimensions are broadcasted (and thus must be broadcastable). For example, if input is a \((j \times 1 \times n \times m)\) tensor and other is a \((k \times m \times p)\) tensor, out will be an \((j \times k \times n \times p)\) tensor.

    • -
    - - -

    Examples

    -
    if (torch_is_installed()) {
    -
    -# vector x vector
    -tensor1 = torch_randn(c(3))
    -tensor2 = torch_randn(c(3))
    -torch_matmul(tensor1, tensor2)
    -# matrix x vector
    -tensor1 = torch_randn(c(3, 4))
    -tensor2 = torch_randn(c(4))
    -torch_matmul(tensor1, tensor2)
    -# batched matrix x broadcasted vector
    -tensor1 = torch_randn(c(10, 3, 4))
    -tensor2 = torch_randn(c(4))
    -torch_matmul(tensor1, tensor2)
    -# batched matrix x batched matrix
    -tensor1 = torch_randn(c(10, 3, 4))
    -tensor2 = torch_randn(c(10, 4, 5))
    -torch_matmul(tensor1, tensor2)
    -# batched matrix x broadcasted matrix
    -tensor1 = torch_randn(c(10, 3, 4))
    -tensor2 = torch_randn(c(4, 5))
    -torch_matmul(tensor1, tensor2)
    -}
    -#> torch_tensor
    -#> (1,.,.) = 
    -#>  -1.2063 -6.8766  1.1109 -6.0989 -1.1909
    -#>   1.4220 -3.4092 -1.6674  0.9007  0.8536
    -#>   0.1917  2.4697 -1.1957  2.9119  0.9873
    -#> 
    -#> (2,.,.) = 
    -#>  -0.0787 -1.9481  0.5705 -1.8254 -1.2973
    -#>  -0.2669 -5.6817  0.5308 -4.0862 -0.6659
    -#>  -1.6253  3.3177  1.2590 -0.6411 -0.3724
    -#> 
    -#> (3,.,.) = 
    -#>  -1.3716 -0.9883  0.1034 -1.6704  1.5420
    -#>  -1.5986  1.4622 -0.0779 -0.2004  0.2051
    -#>  -0.6369  3.0030  1.8239 -0.7490 -2.6883
    -#> 
    -#> (4,.,.) = 
    -#>   2.4502  1.6105 -0.1097  2.8107 -3.0820
    -#>  -0.4510 -4.5248 -1.5240 -1.2485  3.4928
    -#>  -0.7771  3.2090  0.2471  1.0349 -0.0540
    -#> 
    -#> (5,.,.) = 
    -#>  -2.3422 -2.4093  1.5523 -4.8100  0.0554
    -#>  -0.3010  1.7311 -1.2540  2.1921  2.9976
    -#>  -2.9541 -2.8641  0.5600 -4.3982  1.2514
    -#> 
    -#> (6,.,.) = 
    -#>   1.5921  1.8522 -0.1120  2.3396 -1.7727
    -#>  -0.0341 -1.0648  0.9502 -1.7022 -2.9162
    -#>  -0.3313 -1.5967 -0.5851 -0.5068  0.1574
    -#> 
    -#> ... [the output was truncated (use n=-1 to disable)]
    -#> [ CPUFloatType{10,3,5} ]
    -
    +
+ +
+

Examples

+
if (torch_is_installed()) {
+
+# vector x vector
+tensor1 = torch_randn(c(3))
+tensor2 = torch_randn(c(3))
+torch_matmul(tensor1, tensor2)
+# matrix x vector
+tensor1 = torch_randn(c(3, 4))
+tensor2 = torch_randn(c(4))
+torch_matmul(tensor1, tensor2)
+# batched matrix x broadcasted vector
+tensor1 = torch_randn(c(10, 3, 4))
+tensor2 = torch_randn(c(4))
+torch_matmul(tensor1, tensor2)
+# batched matrix x batched matrix
+tensor1 = torch_randn(c(10, 3, 4))
+tensor2 = torch_randn(c(10, 4, 5))
+torch_matmul(tensor1, tensor2)
+# batched matrix x broadcasted matrix
+tensor1 = torch_randn(c(10, 3, 4))
+tensor2 = torch_randn(c(4, 5))
+torch_matmul(tensor1, tensor2)
+}
+#> torch_tensor
+#> (1,.,.) = 
+#>  -0.1864  0.1016 -1.3007 -0.9707 -0.3342
+#>   1.0613 -1.5288  0.7496 -1.9112 -0.8753
+#>   0.5912 -0.3715  0.5712 -2.0003 -0.6216
+#> 
+#> (2,.,.) = 
+#>   1.1324 -4.2583  0.4448  1.9275  1.2737
+#>  -0.1222  1.5433  1.3553 -1.1332  0.3043
+#>  -0.1790  0.3083 -0.2293  0.5862 -0.2805
+#> 
+#> (3,.,.) = 
+#>   0.8300 -2.3243 -0.1491 -1.1395  0.3158
+#>   0.9951 -1.4299  0.7763 -1.6064 -0.8442
+#>  -0.6136  0.5805  0.6603  3.1572  1.3482
+#> 
+#> (4,.,.) = 
+#>   1.0351 -2.2652 -1.3221 -2.5933 -1.7704
+#>  -0.1478  1.0040  2.0664  2.6581  0.0679
+#>   0.2997  1.4344  1.7470  0.4908 -2.5126
+#> 
+#> (5,.,.) = 
+#>  -0.1510  0.9140  1.0146 -0.3200  0.7257
+#>   1.4374 -3.0519  0.5056 -2.5645  0.0626
+#>  -1.3307  0.8666 -1.6609  3.7003  1.3258
+#> 
+#> (6,.,.) = 
+#>   0.5835 -1.6227 -0.4386 -0.1676 -0.7077
+#>   0.1231  0.4861 -0.9410 -2.6570 -1.3280
+#>  -0.4508  2.3568  1.3555  0.4188 -0.4210
+#> 
+#> ... [the output was truncated (use n=-1 to disable)]
+#> [ CPUFloatType{10,3,5} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_matrix_exp.html b/dev/reference/torch_matrix_exp.html index 3186dd2d8..e7cf43dca 100644 --- a/dev/reference/torch_matrix_exp.html +++ b/dev/reference/torch_matrix_exp.html @@ -1,79 +1,18 @@ - - - - - - - -Matrix_exp — torch_matrix_exp • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Matrix_exp — torch_matrix_exp • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,19 +111,17 @@

Matrix_exp

-
torch_matrix_exp(self)
- -

Arguments

- - - - - - -
self

(Tensor) the input tensor.

- -

matrix_power(input) -> Tensor

+
+
torch_matrix_exp(self)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
+
+

matrix_power(input) -> Tensor

@@ -214,49 +134,48 @@ $$

Bader, P.; Blanes, S.; Casas, F. Computing the Matrix Exponential with an Optimized Taylor Polynomial Approximation. Mathematics 2019, 7, 1174.

+
-

Examples

-
if (torch_is_installed()) {
-
-a <- torch_randn(c(2, 2, 2))
-a[1, , ] <- torch_eye(2, 2)
-a[2, , ] <- 2 * torch_eye(2, 2)
-a
-torch_matrix_exp(a)
-
-x <- torch_tensor(rbind(c(0, pi/3), c(-pi/3, 0)))
-x$matrix_exp() # should be [[cos(pi/3), sin(pi/3)], [-sin(pi/3), cos(pi/3)]]
-}
-#> torch_tensor
-#>  0.5000  0.8660
-#> -0.8660  0.5000
-#> [ CPUFloatType{2,2} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+a <- torch_randn(c(2, 2, 2))
+a[1, , ] <- torch_eye(2, 2)
+a[2, , ] <- 2 * torch_eye(2, 2)
+a
+torch_matrix_exp(a)
+
+x <- torch_tensor(rbind(c(0, pi/3), c(-pi/3, 0)))
+x$matrix_exp() # should be [[cos(pi/3), sin(pi/3)], [-sin(pi/3), cos(pi/3)]]
+}
+#> torch_tensor
+#>  0.5000  0.8660
+#> -0.8660  0.5000
+#> [ CPUFloatType{2,2} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_matrix_power.html b/dev/reference/torch_matrix_power.html index d4547287d..09c4e5aee 100644 --- a/dev/reference/torch_matrix_power.html +++ b/dev/reference/torch_matrix_power.html @@ -1,79 +1,18 @@ - - - - - - - -Matrix_power — torch_matrix_power • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Matrix_power — torch_matrix_power • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,23 +111,19 @@

Matrix_power

-
torch_matrix_power(self, n)
- -

Arguments

- - - - - - - - - - -
self

(Tensor) the input tensor.

n

(int) the power to raise the matrix to

- -

matrix_power(input, n) -> Tensor

+
+
torch_matrix_power(self, n)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
n
+

(int) the power to raise the matrix to

+
+
+

matrix_power(input, n) -> Tensor

@@ -215,49 +133,49 @@ For batch of matrices, each individual matrix is raised to the power nn. For a batch of matrices, the batched inverse (if invertible) is raised to the power n. If n is 0, then an identity matrix is returned.

+
-

Examples

-
if (torch_is_installed()) {
-
-a = torch_randn(c(2, 2, 2))
-a
-torch_matrix_power(a, 3)
-}
-#> torch_tensor
-#> (1,.,.) = 
-#>   6.5659  8.4898
-#>   1.7631  1.3786
-#> 
-#> (2,.,.) = 
-#>   0.5305  0.9388
-#>   2.1003  3.1272
-#> [ CPUFloatType{2,2,2} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+a = torch_randn(c(2, 2, 2))
+a
+torch_matrix_power(a, 3)
+}
+#> torch_tensor
+#> (1,.,.) = 
+#>   1.0986  0.8319
+#>  -0.8203 -0.5705
+#> 
+#> (2,.,.) = 
+#>  0.01 *
+#>  -7.7616 -4.4825
+#>    2.1736 -6.2858
+#> [ CPUFloatType{2,2,2} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_matrix_rank.html b/dev/reference/torch_matrix_rank.html index 55ef16610..06971e1a9 100644 --- a/dev/reference/torch_matrix_rank.html +++ b/dev/reference/torch_matrix_rank.html @@ -1,79 +1,18 @@ - - - - - - - -Matrix_rank — torch_matrix_rank • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Matrix_rank — torch_matrix_rank • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,27 +111,21 @@

Matrix_rank

-
torch_matrix_rank(self, tol, symmetric = FALSE)
- -

Arguments

- - - - - - - - - - - - - - -
self

(Tensor) the input 2-D tensor

tol

(float, optional) the tolerance value. Default: NULL

symmetric

(bool, optional) indicates whether input is symmetric. Default: FALSE

- -

matrix_rank(input, tol=NULL, symmetric=False) -> Tensor

+
+
torch_matrix_rank(self, tol, symmetric = FALSE)
+
+
+

Arguments

+
self
+

(Tensor) the input 2-D tensor

+
tol
+

(float, optional) the tolerance value. Default: NULL

+
symmetric
+

(bool, optional) indicates whether input is symmetric. Default: FALSE

+
+
+

matrix_rank(input, tol=NULL, symmetric=False) -> Tensor

@@ -222,42 +138,41 @@ when symmetric is TRUE) are considered to be 0. If tol
is set to S.max() * max(S.size()) * eps where S is the singular values (or the eigenvalues when symmetric is TRUE), and eps is the epsilon value for the datatype of input.

+
-

Examples

-
if (torch_is_installed()) {
-
-a = torch_eye(10)
-torch_matrix_rank(a)
-}
-#> torch_tensor
-#> 10
-#> [ CPULongType{} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+a = torch_eye(10)
+torch_matrix_rank(a)
+}
+#> torch_tensor
+#> 10
+#> [ CPULongType{} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_max.html b/dev/reference/torch_max.html index eaecb23ce..8ba1d57fb 100644 --- a/dev/reference/torch_max.html +++ b/dev/reference/torch_max.html @@ -1,79 +1,18 @@ - - - - - - - -Max — torch_max • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Max — torch_max • torch - - - - - - - - + + -
-
- -
- -
+
@@ -190,43 +112,33 @@
-

Arguments

- - - - - - - - - - - - - - - - - - - - - - -
self

(Tensor) the input tensor.

dim

(int) the dimension to reduce.

keepdim

(bool) whether the output tensor has dim retained or not. Default: FALSE.

out

(tuple, optional) the result tuple of two output tensors (max, max_indices)

other

(Tensor) the second input tensor

- -

Note

- +
+

Arguments

+
self
+

(Tensor) the input tensor.

+
dim
+

(int) the dimension to reduce.

+
keepdim
+

(bool) whether the output tensor has dim retained or not. Default: FALSE.

+
out
+

(tuple, optional) the result tuple of two output tensors (max, max_indices)

+
other
+

(Tensor) the second input tensor

+
+
+

Note

When the shapes do not match, the shape of the returned output tensor follows the broadcasting rules .

-

max(input) -> Tensor

- +
+
+

max(input) -> Tensor

Returns the maximum value of all elements in the input tensor.

-

max(input, dim, keepdim=False, out=NULL) -> (Tensor, LongTensor)

- +
+
+

max(input, dim, keepdim=False, out=NULL) -> (Tensor, LongTensor)

@@ -234,8 +146,9 @@ follows the broadcasting rules .

value of each row of the input tensor in the given dimension dim. And indices is the index location of each maximum value found (argmax).

-

Warning

- +
+
+

Warning

indices does not necessarily contain the first occurrence of each @@ -244,10 +157,11 @@ The exact implementation details are device-specific. Do not expect the same result when run on CPU and GPU in general.

If keepdim is TRUE, the output tensors are of the same size as input except in the dimension dim where they are of size 1. -Otherwise, dim is squeezed (see torch_squeeze), resulting +Otherwise, dim is squeezed (see torch_squeeze), resulting in the output tensors having 1 fewer dimension than input.

-

max(input, other, out=NULL) -> Tensor

- +
+
+

max(input, other, out=NULL) -> Tensor

@@ -258,58 +172,57 @@ but they must be broadcastable .

$$ \mbox{out}_i = \max(\mbox{tensor}_i, \mbox{other}_i) $$

+
-

Examples

-
if (torch_is_installed()) {
-
-a = torch_randn(c(1, 3))
-a
-torch_max(a)
-
-
-a = torch_randn(c(4, 4))
-a
-torch_max(a, dim = 1)
-
-
-a = torch_randn(c(4))
-a
-b = torch_randn(c(4))
-b
-torch_max(a, other = b)
-}
-#> torch_tensor
-#>  1.6337
-#>  0.3268
-#> -0.3574
-#>  0.9872
-#> [ CPUFloatType{4} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+a = torch_randn(c(1, 3))
+a
+torch_max(a)
+
+
+a = torch_randn(c(4, 4))
+a
+torch_max(a, dim = 1)
+
+
+a = torch_randn(c(4))
+a
+b = torch_randn(c(4))
+b
+torch_max(a, other = b)
+}
+#> torch_tensor
+#>  0.3832
+#> -0.0201
+#> -0.1780
+#>  1.6716
+#> [ CPUFloatType{4} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_maximum.html b/dev/reference/torch_maximum.html index 3b734e8c0..8ed7e6887 100644 --- a/dev/reference/torch_maximum.html +++ b/dev/reference/torch_maximum.html @@ -1,79 +1,18 @@ - - - - - - - -Maximum — torch_maximum • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Maximum — torch_maximum • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_maximum(self, other)
- -

Arguments

- - - - - - - - - - -
self

(Tensor) the input tensor.

other

(Tensor) the second input tensor

- -

Note

+
+
torch_maximum(self, other)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
other
+

(Tensor) the second input tensor

+
+
+

Note

If one of the elements being compared is a NaN, then that element is returned. torch_maximum() is not supported for tensors with complex dtypes.

-

maximum(input, other, *, out=None) -> Tensor

- +
+
+

maximum(input, other, *, out=None) -> Tensor

Computes the element-wise maximum of input and other.

+
-

Examples

-
if (torch_is_installed()) {
-
-a <- torch_tensor(c(1, 2, -1))
-b <- torch_tensor(c(3, 0, 4))
-torch_maximum(a, b)
-}
-#> torch_tensor
-#>  3
-#>  2
-#>  4
-#> [ CPUFloatType{3} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+a <- torch_tensor(c(1, 2, -1))
+b <- torch_tensor(c(3, 0, 4))
+torch_maximum(a, b)
+}
+#> torch_tensor
+#>  3
+#>  2
+#>  4
+#> [ CPUFloatType{3} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_mean.html b/dev/reference/torch_mean.html index f1cab7e0e..6c0f184eb 100644 --- a/dev/reference/torch_mean.html +++ b/dev/reference/torch_mean.html @@ -1,79 +1,18 @@ - - - - - - - -Mean — torch_mean • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Mean — torch_mean • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_mean(self, dim, keepdim = FALSE, dtype = NULL)
- -

Arguments

- - - - - - - - - - - - - - - - - - -
self

(Tensor) the input tensor.

dim

(int or tuple of ints) the dimension or dimensions to reduce.

keepdim

(bool) whether the output tensor has dim retained or not.

dtype

the resulting data type.

- -

mean(input) -> Tensor

+
+
torch_mean(self, dim, keepdim = FALSE, dtype = NULL)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
dim
+

(int or tuple of ints) the dimension or dimensions to reduce.

+
keepdim
+

(bool) whether the output tensor has dim retained or not.

+
dtype
+

the resulting data type.

+
+
+

mean(input) -> Tensor

Returns the mean value of all elements in the input tensor.

-

mean(input, dim, keepdim=False, out=NULL) -> Tensor

- +
+
+

mean(input, dim, keepdim=False, out=NULL) -> Tensor

@@ -228,51 +143,50 @@ dimension dim. If dim is a list of dimensions, reduce over all of them.

If keepdim is TRUE, the output tensor is of the same size as input except in the dimension(s) dim where it is of size 1. -Otherwise, dim is squeezed (see torch_squeeze), resulting in the +Otherwise, dim is squeezed (see torch_squeeze), resulting in the output tensor having 1 (or len(dim)) fewer dimension(s).

+
-

Examples

-
if (torch_is_installed()) {
-
-a = torch_randn(c(1, 3))
-a
-torch_mean(a)
-
-
-a = torch_randn(c(4, 4))
-a
-torch_mean(a, 1)
-torch_mean(a, 1, TRUE)
-}
-#> torch_tensor
-#> -0.1064 -1.1264 -0.4517 -0.3350
-#> [ CPUFloatType{1,4} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+a = torch_randn(c(1, 3))
+a
+torch_mean(a)
+
+
+a = torch_randn(c(4, 4))
+a
+torch_mean(a, 1)
+torch_mean(a, 1, TRUE)
+}
+#> torch_tensor
+#> -0.8314 -0.6149  0.2161  0.1284
+#> [ CPUFloatType{1,4} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_median.html b/dev/reference/torch_median.html index b4b7dff4f..a5414632d 100644 --- a/dev/reference/torch_median.html +++ b/dev/reference/torch_median.html @@ -1,79 +1,18 @@ - - - - - - - -Median — torch_median • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Median — torch_median • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_median(self, dim, keepdim = FALSE)
- -

Arguments

- - - - - - - - - - - - - - -
self

(Tensor) the input tensor.

dim

(int) the dimension to reduce.

keepdim

(bool) whether the output tensor has dim retained or not.

- -

median(input) -> Tensor

+
+
torch_median(self, dim, keepdim = FALSE)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
dim
+

(int) the dimension to reduce.

+
keepdim
+

(bool) whether the output tensor has dim retained or not.

+
+
+

median(input) -> Tensor

Returns the median value of all elements in the input tensor.

-

median(input, dim=-1, keepdim=False, out=NULL) -> (Tensor, LongTensor)

- +
+
+

median(input, dim=-1, keepdim=False, out=NULL) -> (Tensor, LongTensor)

@@ -225,65 +142,64 @@ value of each row of the input tensor in the given dimension

By default, dim is the last dimension of the input tensor.

If keepdim is TRUE, the output tensors are of the same size as input except in the dimension dim where they are of size 1. -Otherwise, dim is squeezed (see torch_squeeze), resulting in +Otherwise, dim is squeezed (see torch_squeeze), resulting in the outputs tensor having 1 fewer dimension than input.

+
-

Examples

-
if (torch_is_installed()) {
-
-a = torch_randn(c(1, 3))
-a
-torch_median(a)
-
-
-a = torch_randn(c(4, 5))
-a
-torch_median(a, 1)
-}
-#> [[1]]
-#> torch_tensor
-#>  0.2975
-#>  1.0890
-#> -0.3717
-#>  0.2556
-#> -0.2185
-#> [ CPUFloatType{5} ]
-#> 
-#> [[2]]
-#> torch_tensor
-#>  1
-#>  0
-#>  3
-#>  1
-#>  3
-#> [ CPULongType{5} ]
-#> 
-
+
+

Examples

+
if (torch_is_installed()) {
+
+a = torch_randn(c(1, 3))
+a
+torch_median(a)
+
+
+a = torch_randn(c(4, 5))
+a
+torch_median(a, 1)
+}
+#> [[1]]
+#> torch_tensor
+#> -0.9108
+#> -0.5864
+#> -1.2530
+#> -0.1658
+#>  0.0646
+#> [ CPUFloatType{5} ]
+#> 
+#> [[2]]
+#> torch_tensor
+#>  3
+#>  2
+#>  2
+#>  3
+#>  2
+#> [ CPULongType{5} ]
+#> 
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_memory_format.html b/dev/reference/torch_memory_format.html index 957f2579e..5f6f6e0cc 100644 --- a/dev/reference/torch_memory_format.html +++ b/dev/reference/torch_memory_format.html @@ -1,79 +1,18 @@ - - - - - - - -Memory format — torch_memory_format • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Memory format — torch_memory_format • torch - - - - - - + + - - -
-
- -
- -
+
@@ -189,39 +111,36 @@

Returns the correspondent memory format.

-
torch_contiguous_format()
+    
+
torch_contiguous_format()
 
-torch_preserve_format()
-
-torch_channels_last_format()
+torch_preserve_format() +torch_channels_last_format()
+
+ -
- +
- - + + diff --git a/dev/reference/torch_meshgrid.html b/dev/reference/torch_meshgrid.html index 0f33c0f70..b2a3b9e99 100644 --- a/dev/reference/torch_meshgrid.html +++ b/dev/reference/torch_meshgrid.html @@ -1,79 +1,18 @@ - - - - - - - -Meshgrid — torch_meshgrid • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Meshgrid — torch_meshgrid • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,75 +111,72 @@

Meshgrid

-
torch_meshgrid(tensors)
- -

Arguments

- - - - - - -
tensors

(list of Tensor) list of scalars or 1 dimensional tensors. Scalars will be -treated (1,).

- -

TEST

+
+
torch_meshgrid(tensors)
+
+
+

Arguments

+
tensors
+

(list of Tensor) list of scalars or 1 dimensional tensors. Scalars will be +treated (1,).

+
+
+

TEST

Take \(N\) tensors, each of which can be either scalar or 1-dimensional vector, and create \(N\) N-dimensional grids, where the \(i\) th grid is defined by expanding the \(i\) th input over dimensions defined by other inputs.

+
-

Examples

-
if (torch_is_installed()) {
-
-x = torch_tensor(c(1, 2, 3))
-y = torch_tensor(c(4, 5, 6))
-out = torch_meshgrid(list(x, y))
-out
-}
-#> [[1]]
-#> torch_tensor
-#>  1  1  1
-#>  2  2  2
-#>  3  3  3
-#> [ CPUFloatType{3,3} ]
-#> 
-#> [[2]]
-#> torch_tensor
-#>  4  5  6
-#>  4  5  6
-#>  4  5  6
-#> [ CPUFloatType{3,3} ]
-#> 
-
+
+

Examples

+
if (torch_is_installed()) {
+
+x = torch_tensor(c(1, 2, 3))
+y = torch_tensor(c(4, 5, 6))
+out = torch_meshgrid(list(x, y))
+out
+}
+#> [[1]]
+#> torch_tensor
+#>  1  1  1
+#>  2  2  2
+#>  3  3  3
+#> [ CPUFloatType{3,3} ]
+#> 
+#> [[2]]
+#> torch_tensor
+#>  4  5  6
+#>  4  5  6
+#>  4  5  6
+#> [ CPUFloatType{3,3} ]
+#> 
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_min.html b/dev/reference/torch_min.html index a8d7a3980..5b6538015 100644 --- a/dev/reference/torch_min.html +++ b/dev/reference/torch_min.html @@ -1,79 +1,18 @@ - - - - - - - -Min — torch_min • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Min — torch_min • torch - - - - - - - - + + -
-
- -
- -
+
@@ -190,43 +112,33 @@
-

Arguments

- - - - - - - - - - - - - - - - - - - - - - -
self

(Tensor) the input tensor.

dim

(int) the dimension to reduce.

keepdim

(bool) whether the output tensor has dim retained or not.

out

(tuple, optional) the tuple of two output tensors (min, min_indices)

other

(Tensor) the second input tensor

- -

Note

- +
+

Arguments

+
self
+

(Tensor) the input tensor.

+
dim
+

(int) the dimension to reduce.

+
keepdim
+

(bool) whether the output tensor has dim retained or not.

+
out
+

(tuple, optional) the tuple of two output tensors (min, min_indices)

+
other
+

(Tensor) the second input tensor

+
+
+

Note

When the shapes do not match, the shape of the returned output tensor follows the broadcasting rules .

-

min(input) -> Tensor

- +
+
+

min(input) -> Tensor

Returns the minimum value of all elements in the input tensor.

-

min(input, dim, keepdim=False, out=NULL) -> (Tensor, LongTensor)

- +
+
+

min(input, dim, keepdim=False, out=NULL) -> (Tensor, LongTensor)

@@ -234,8 +146,9 @@ follows the broadcasting rules .

value of each row of the input tensor in the given dimension dim. And indices is the index location of each minimum value found (argmin).

-

Warning

- +
+
+

Warning

indices does not necessarily contain the first occurrence of each @@ -244,10 +157,11 @@ The exact implementation details are device-specific. Do not expect the same result when run on CPU and GPU in general.

If keepdim is TRUE, the output tensors are of the same size as input except in the dimension dim where they are of size 1. -Otherwise, dim is squeezed (see torch_squeeze), resulting in +Otherwise, dim is squeezed (see torch_squeeze), resulting in the output tensors having 1 fewer dimension than input.

-

min(input, other, out=NULL) -> Tensor

- +
+
+

min(input, other, out=NULL) -> Tensor

@@ -259,58 +173,57 @@ but they must be broadcastable .

$$ \mbox{out}_i = \min(\mbox{tensor}_i, \mbox{other}_i) $$

+
-

Examples

-
if (torch_is_installed()) {
-
-a = torch_randn(c(1, 3))
-a
-torch_min(a)
-
-
-a = torch_randn(c(4, 4))
-a
-torch_min(a, dim = 1)
-
-
-a = torch_randn(c(4))
-a
-b = torch_randn(c(4))
-b
-torch_min(a, other = b)
-}
-#> torch_tensor
-#> -0.8957
-#> -0.9380
-#> -0.5400
-#>  0.2250
-#> [ CPUFloatType{4} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+a = torch_randn(c(1, 3))
+a
+torch_min(a)
+
+
+a = torch_randn(c(4, 4))
+a
+torch_min(a, dim = 1)
+
+
+a = torch_randn(c(4))
+a
+b = torch_randn(c(4))
+b
+torch_min(a, other = b)
+}
+#> torch_tensor
+#> -1.5517
+#> -0.7872
+#> -0.1816
+#> -0.6999
+#> [ CPUFloatType{4} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_minimum.html b/dev/reference/torch_minimum.html index 532e735f5..00436fa35 100644 --- a/dev/reference/torch_minimum.html +++ b/dev/reference/torch_minimum.html @@ -1,79 +1,18 @@ - - - - - - - -Minimum — torch_minimum • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Minimum — torch_minimum • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_minimum(self, other)
- -

Arguments

- - - - - - - - - - -
self

(Tensor) the input tensor.

other

(Tensor) the second input tensor

- -

Note

+
+
torch_minimum(self, other)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
other
+

(Tensor) the second input tensor

+
+
+

Note

If one of the elements being compared is a NaN, then that element is returned. torch_minimum() is not supported for tensors with complex dtypes.

-

minimum(input, other, *, out=None) -> Tensor

- +
+
+

minimum(input, other, *, out=None) -> Tensor

Computes the element-wise minimum of input and other.

+
-

Examples

-
if (torch_is_installed()) {
-
-a <- torch_tensor(c(1, 2, -1))
-b <- torch_tensor(c(3, 0, 4))
-torch_minimum(a, b)
-}
-#> torch_tensor
-#>  1
-#>  0
-#> -1
-#> [ CPUFloatType{3} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+a <- torch_tensor(c(1, 2, -1))
+b <- torch_tensor(c(3, 0, 4))
+torch_minimum(a, b)
+}
+#> torch_tensor
+#>  1
+#>  0
+#> -1
+#> [ CPUFloatType{3} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_mm.html b/dev/reference/torch_mm.html index 350983076..b1c17fc13 100644 --- a/dev/reference/torch_mm.html +++ b/dev/reference/torch_mm.html @@ -1,79 +1,18 @@ - - - - - - - -Mm — torch_mm • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Mm — torch_mm • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_mm(self, mat2)
- -

Arguments

- - - - - - - - - - -
self

(Tensor) the first matrix to be multiplied

mat2

(Tensor) the second matrix to be multiplied

- -

Note

+
+
torch_mm(self, mat2)
+
+
+

Arguments

+
self
+

(Tensor) the first matrix to be multiplied

+
mat2
+

(Tensor) the second matrix to be multiplied

+
+
+

Note

This function does not broadcast . -For broadcasting matrix products, see torch_matmul.

-

mm(input, mat2, out=NULL) -> Tensor

- +For broadcasting matrix products, see torch_matmul.

+
+
+

mm(input, mat2, out=NULL) -> Tensor

Performs a matrix multiplication of the matrices input and mat2.

If input is a \((n \times m)\) tensor, mat2 is a \((m \times p)\) tensor, out will be a \((n \times p)\) tensor.

+
-

Examples

-
if (torch_is_installed()) {
-
-mat1 = torch_randn(c(2, 3))
-mat2 = torch_randn(c(3, 3))
-torch_mm(mat1, mat2)
-}
-#> torch_tensor
-#> -0.0497 -0.2810  0.7637
-#>  0.0435 -0.0214 -0.1599
-#> [ CPUFloatType{2,3} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+mat1 = torch_randn(c(2, 3))
+mat2 = torch_randn(c(3, 3))
+torch_mm(mat1, mat2)
+}
+#> torch_tensor
+#>  3.3528 -1.1272  3.9619
+#> -1.1036 -0.5797 -1.0366
+#> [ CPUFloatType{2,3} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_mode.html b/dev/reference/torch_mode.html index 55d5d5eca..92e5230dd 100644 --- a/dev/reference/torch_mode.html +++ b/dev/reference/torch_mode.html @@ -1,79 +1,18 @@ - - - - - - - -Mode — torch_mode • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Mode — torch_mode • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_mode(self, dim = -1L, keepdim = FALSE)
- -

Arguments

- - - - - - - - - - - - - - -
self

(Tensor) the input tensor.

dim

(int) the dimension to reduce.

keepdim

(bool) whether the output tensor has dim retained or not.

- -

Note

+
+
torch_mode(self, dim = -1L, keepdim = FALSE)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
dim
+

(int) the dimension to reduce.

+
keepdim
+

(bool) whether the output tensor has dim retained or not.

+
+
+

Note

This function is not defined for torch_cuda.Tensor yet.

-

mode(input, dim=-1, keepdim=False, out=NULL) -> (Tensor, LongTensor)

- +
+
+

mode(input, dim=-1, keepdim=False, out=NULL) -> (Tensor, LongTensor)

@@ -223,52 +140,51 @@ in that row, and indices is the index location of each mode value f

By default, dim is the last dimension of the input tensor.

If keepdim is TRUE, the output tensors are of the same size as input except in the dimension dim where they are of size 1. -Otherwise, dim is squeezed (see torch_squeeze), resulting +Otherwise, dim is squeezed (see torch_squeeze), resulting in the output tensors having 1 fewer dimension than input.

+
-

Examples

-
if (torch_is_installed()) {
-
-a = torch_randint(0, 50, size = list(5))
-a
-torch_mode(a, 1)
-}
-#> [[1]]
-#> torch_tensor
-#> 12
-#> [ CPUFloatType{} ]
-#> 
-#> [[2]]
-#> torch_tensor
-#> 0
-#> [ CPULongType{} ]
-#> 
-
+
+

Examples

+
if (torch_is_installed()) {
+
+a = torch_randint(0, 50, size = list(5))
+a
+torch_mode(a, 1)
+}
+#> [[1]]
+#> torch_tensor
+#> 4
+#> [ CPUFloatType{} ]
+#> 
+#> [[2]]
+#> torch_tensor
+#> 3
+#> [ CPULongType{} ]
+#> 
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_movedim.html b/dev/reference/torch_movedim.html index 351c6ffe5..9c7162f5a 100644 --- a/dev/reference/torch_movedim.html +++ b/dev/reference/torch_movedim.html @@ -1,79 +1,18 @@ - - - - - - - -Movedim — torch_movedim • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Movedim — torch_movedim • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,27 +111,21 @@

Movedim

-
torch_movedim(self, source, destination)
- -

Arguments

- - - - - - - - - - - - - - -
self

(Tensor) the input tensor.

source

(int or tuple of ints) Original positions of the dims to move. These must be unique.

destination

(int or tuple of ints) Destination positions for each of the original dims. These must also be unique.

- -

movedim(input, source, destination) -> Tensor

+
+
torch_movedim(self, source, destination)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
source
+

(int or tuple of ints) Original positions of the dims to move. These must be unique.

+
destination
+

(int or tuple of ints) Destination positions for each of the original dims. These must also be unique.

+
+
+

movedim(input, source, destination) -> Tensor

@@ -217,51 +133,49 @@ to the position(s) in destination.

Other dimensions of input that are not explicitly moved remain in their original order and appear at the positions not specified in destination.

+
-

Examples

-
if (torch_is_installed()) {
-
-t <- torch_randn(c(3,2,1))
-t
-torch_movedim(t, 2, 1)$shape
-torch_movedim(t, 2, 1)
-torch_movedim(t, c(2, 3), c(1, 2))$shape
-torch_movedim(t, c(2, 3), c(1, 2))
-}
-#> torch_tensor
-#> (1,.,.) = 
-#>  0.01 *
-#>  -4.4751 -142.7783 -86.9915
-#> 
-#> (2,.,.) = 
-#>   0.3034 -0.3926 -1.1589
-#> [ CPUFloatType{2,1,3} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+t <- torch_randn(c(3,2,1))
+t
+torch_movedim(t, 2, 1)$shape
+torch_movedim(t, 2, 1)
+torch_movedim(t, c(2, 3), c(1, 2))$shape
+torch_movedim(t, c(2, 3), c(1, 2))
+}
+#> torch_tensor
+#> (1,.,.) = 
+#>  -1.8958 -0.1665 -2.2735
+#> 
+#> (2,.,.) = 
+#>  -1.3904  0.3690 -0.8153
+#> [ CPUFloatType{2,1,3} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_mul.html b/dev/reference/torch_mul.html index 9123fd13c..6e0a04c6d 100644 --- a/dev/reference/torch_mul.html +++ b/dev/reference/torch_mul.html @@ -1,79 +1,18 @@ - - - - - - - -Mul — torch_mul • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Mul — torch_mul • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_mul(self, other)
- -

Arguments

- - - - - - - - - - -
self

(Tensor) the first multiplicand tensor

other

(Tensor) the second multiplicand tensor

- -

mul(input, other, out=NULL)

+
+
torch_mul(self, other)
+
+
+

Arguments

+
self
+

(Tensor) the first multiplicand tensor

+
other
+

(Tensor) the second multiplicand tensor

+
+
+

mul(input, other, out=NULL)

@@ -225,53 +143,52 @@ broadcastable .

$$ \mbox{out}_i = \mbox{input}_i \times \mbox{other}_i $$

+
-

Examples

-
if (torch_is_installed()) {
-
-a = torch_randn(c(3))
-a
-torch_mul(a, 100)
-
-
-a = torch_randn(c(4, 1))
-a
-b = torch_randn(c(1, 4))
-b
-torch_mul(a, b)
-}
-#> torch_tensor
-#>  0.1237 -0.1472  0.1136 -0.0869
-#>  0.6887 -0.8197  0.6324 -0.4839
-#>  0.8830 -1.0509  0.8107 -0.6204
-#>  1.2582 -1.4975  1.1553 -0.8840
-#> [ CPUFloatType{4,4} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+a = torch_randn(c(3))
+a
+torch_mul(a, 100)
+
+
+a = torch_randn(c(4, 1))
+a
+b = torch_randn(c(1, 4))
+b
+torch_mul(a, b)
+}
+#> torch_tensor
+#>  0.2176 -0.3330 -1.2895 -0.0865
+#> -0.6225  0.9527  3.6894  0.2474
+#>  0.4232 -0.6478 -2.5085 -0.1682
+#>  0.2894 -0.4430 -1.7154 -0.1150
+#> [ CPUFloatType{4,4} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_multinomial.html b/dev/reference/torch_multinomial.html index af6fa6fe1..75c39442d 100644 --- a/dev/reference/torch_multinomial.html +++ b/dev/reference/torch_multinomial.html @@ -1,79 +1,18 @@ - - - - - - - -Multinomial — torch_multinomial • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Multinomial — torch_multinomial • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,36 +111,28 @@

Multinomial

-
torch_multinomial(self, num_samples, replacement = FALSE, generator = NULL)
- -

Arguments

- - - - - - - - - - - - - - - - - - -
self

(Tensor) the input tensor containing probabilities

num_samples

(int) number of samples to draw

replacement

(bool, optional) whether to draw with replacement or not

generator

(torch.Generator, optional) a pseudorandom number generator for sampling

- -

Note

+
+
torch_multinomial(self, num_samples, replacement = FALSE, generator = NULL)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor containing probabilities

+
num_samples
+

(int) number of samples to draw

+
replacement
+

(bool, optional) whether to draw with replacement or not

+
generator
+

(torch.Generator, optional) a pseudorandom number generator for sampling

+
+
+

Note

-
The rows of `input` do not need to sum to one (in which case we use
+
The rows of `input` do not need to sum to one (in which case we use
 the values as weights), but must be non-negative, finite and have
 a non-zero sum.
-
+

Indices are ordered from left to right according to when each was sampled (first samples are placed in first column).

@@ -228,59 +142,59 @@ a non-zero sum.

If replacement is TRUE, samples are drawn with replacement.

If not, they are drawn without replacement, which means that when a sample index is drawn for a row, it cannot be drawn again for that row.

-
When drawn without replacement, `num_samples` must be lower than
+
When drawn without replacement, `num_samples` must be lower than
 number of non-zero elements in `input` (or the min number of non-zero
 elements in each row of `input` if it is a matrix).
-
- -

multinomial(input, num_samples, replacement=False, *, generator=NULL, out=NULL) -> LongTensor

+
+
+
+

multinomial(input, num_samples, replacement=False, *, generator=NULL, out=NULL) -> LongTensor

Returns a tensor where each row contains num_samples indices sampled from the multinomial probability distribution located in the corresponding row of tensor input.

+
-

Examples

-
if (torch_is_installed()) {
-
-weights = torch_tensor(c(0, 10, 3, 0), dtype=torch_float()) # create a tensor of weights
-torch_multinomial(weights, 2)
-torch_multinomial(weights, 4, replacement=TRUE)
-}
-#> torch_tensor
-#>  2
-#>  2
-#>  2
-#>  2
-#> [ CPULongType{4} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+weights = torch_tensor(c(0, 10, 3, 0), dtype=torch_float()) # create a tensor of weights
+torch_multinomial(weights, 2)
+torch_multinomial(weights, 4, replacement=TRUE)
+}
+#> torch_tensor
+#>  2
+#>  2
+#>  3
+#>  3
+#> [ CPULongType{4} ]
+
+
+ -
- +
- - + + diff --git a/dev/reference/torch_multiply.html b/dev/reference/torch_multiply.html index 480141888..af52df46c 100644 --- a/dev/reference/torch_multiply.html +++ b/dev/reference/torch_multiply.html @@ -1,79 +1,18 @@ - - - - - - - -Multiply — torch_multiply • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Multiply — torch_multiply • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,53 +111,46 @@

Multiply

-
torch_multiply(self, other)
- -

Arguments

- - - - - - - - - - -
self

(Tensor) the first multiplicand tensor

other

(Tensor) the second multiplicand tensor

- -

multiply(input, other, *, out=None)

+
+
torch_multiply(self, other)
+
+
+

Arguments

+
self
+

(Tensor) the first multiplicand tensor

+
other
+

(Tensor) the second multiplicand tensor

+
+
+

multiply(input, other, *, out=None)

-

Alias for torch_mul().

+

Alias for torch_mul().

+
+
-
- +
- - + + diff --git a/dev/reference/torch_mv.html b/dev/reference/torch_mv.html index 507c9a6f2..d1995df86 100644 --- a/dev/reference/torch_mv.html +++ b/dev/reference/torch_mv.html @@ -1,79 +1,18 @@ - - - - - - - -Mv — torch_mv • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Mv — torch_mv • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_mv(self, vec)
- -

Arguments

- - - - - - - - - - -
self

(Tensor) matrix to be multiplied

vec

(Tensor) vector to be multiplied

- -

Note

+
+
torch_mv(self, vec)
+
+
+

Arguments

+
self
+

(Tensor) matrix to be multiplied

+
vec
+

(Tensor) vector to be multiplied

+
+
+

Note

This function does not broadcast .

-

mv(input, vec, out=NULL) -> Tensor

- +
+
+

mv(input, vec, out=NULL) -> Tensor

@@ -216,44 +135,43 @@ vec.

If input is a \((n \times m)\) tensor, vec is a 1-D tensor of size \(m\), out will be 1-D of size \(n\).

+
-

Examples

-
if (torch_is_installed()) {
-
-mat = torch_randn(c(2, 3))
-vec = torch_randn(c(3))
-torch_mv(mat, vec)
-}
-#> torch_tensor
-#>  1.8354
-#>  0.8041
-#> [ CPUFloatType{2} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+mat = torch_randn(c(2, 3))
+vec = torch_randn(c(3))
+torch_mv(mat, vec)
+}
+#> torch_tensor
+#> -0.2872
+#>  1.4578
+#> [ CPUFloatType{2} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_mvlgamma.html b/dev/reference/torch_mvlgamma.html index 6ef0ce470..3d0e06f2f 100644 --- a/dev/reference/torch_mvlgamma.html +++ b/dev/reference/torch_mvlgamma.html @@ -1,79 +1,18 @@ - - - - - - - -Mvlgamma — torch_mvlgamma • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Mvlgamma — torch_mvlgamma • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,23 +111,19 @@

Mvlgamma

-
torch_mvlgamma(self, p)
- -

Arguments

- - - - - - - - - - -
self

(Tensor) the tensor to compute the multivariate log-gamma function

p

(int) the number of dimensions

- -

mvlgamma(input, p) -> Tensor

+
+
torch_mvlgamma(self, p)
+
+
+

Arguments

+
self
+

(Tensor) the tensor to compute the multivariate log-gamma function

+
p
+

(int) the number of dimensions

+
+
+

mvlgamma(input, p) -> Tensor

@@ -216,44 +134,43 @@ $$ where \(C = \log(\pi) \times \frac{p (p - 1)}{4}\) and \(\Gamma(\cdot)\) is the Gamma function.

All elements must be greater than \(\frac{p - 1}{2}\), otherwise an error would be thrown.

+
-

Examples

-
if (torch_is_installed()) {
-
-a = torch_empty(c(2, 3))$uniform_(1, 2)
-a
-torch_mvlgamma(a, 2)
-}
-#> torch_tensor
-#>  0.4208  0.3913  0.4130
-#>  0.5387  0.5505  0.3906
-#> [ CPUFloatType{2,3} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+a = torch_empty(c(2, 3))$uniform_(1, 2)
+a
+torch_mvlgamma(a, 2)
+}
+#> torch_tensor
+#>  0.4848  0.3945  0.4120
+#>  0.4038  0.3956  0.6886
+#> [ CPUFloatType{2,3} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_nanquantile.html b/dev/reference/torch_nanquantile.html index a98a71ec1..8b0e6dfe1 100644 --- a/dev/reference/torch_nanquantile.html +++ b/dev/reference/torch_nanquantile.html @@ -1,79 +1,18 @@ - - - - - - - -Nanquantile — torch_nanquantile • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Nanquantile — torch_nanquantile • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,85 +111,74 @@

Nanquantile

-
torch_nanquantile(self, q, dim = NULL, keepdim = FALSE, interpolation)
- -

Arguments

- - - - - - - - - - - - - - - - - - - - - - -
self

(Tensor) the input tensor.

q

(float or Tensor) a scalar or 1D tensor of quantile values in the range [0, 1]

dim

(int) the dimension to reduce.

keepdim

(bool) whether the output tensor has dim retained or not.

interpolation

The interpolation method.

- -

nanquantile(input, q, dim=None, keepdim=FALSE, *, out=None) -> Tensor

+
+
torch_nanquantile(self, q, dim = NULL, keepdim = FALSE, interpolation)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
q
+

(float or Tensor) a scalar or 1D tensor of quantile values in the range [0, 1]

+
dim
+

(int) the dimension to reduce.

+
keepdim
+

(bool) whether the output tensor has dim retained or not.

+
interpolation
+

The interpolation method.

+
+
+

nanquantile(input, q, dim=None, keepdim=FALSE, *, out=None) -> Tensor

-

This is a variant of torch_quantile() that "ignores" NaN values, +

This is a variant of torch_quantile() that "ignores" NaN values, computing the quantiles q as if NaN values in input did not exist. If all values in a reduced row are NaN then the quantiles for -that reduction will be NaN. See the documentation for torch_quantile().

+that reduction will be NaN. See the documentation for torch_quantile().

+
-

Examples

-
if (torch_is_installed()) {
-
-t <- torch_tensor(c(NaN, 1, 2))
-t$quantile(0.5)
-t$nanquantile(0.5)
-t <- torch_tensor(rbind(c(NaN, NaN), c(1, 2)))
-t
-t$nanquantile(0.5, dim=1)
-t$nanquantile(0.5, dim=2)
-torch_nanquantile(t, 0.5, dim = 1)
-torch_nanquantile(t, 0.5, dim = 2)
-}
-#> torch_tensor
-#>     nan  1.5000
-#> [ CPUFloatType{1,2} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+t <- torch_tensor(c(NaN, 1, 2))
+t$quantile(0.5)
+t$nanquantile(0.5)
+t <- torch_tensor(rbind(c(NaN, NaN), c(1, 2)))
+t
+t$nanquantile(0.5, dim=1)
+t$nanquantile(0.5, dim=2)
+torch_nanquantile(t, 0.5, dim = 1)
+torch_nanquantile(t, 0.5, dim = 2)
+}
+#> torch_tensor
+#>     nan  1.5000
+#> [ CPUFloatType{1,2} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_nansum.html b/dev/reference/torch_nansum.html index 8a98dc3f2..e55eb54ac 100644 --- a/dev/reference/torch_nansum.html +++ b/dev/reference/torch_nansum.html @@ -1,79 +1,18 @@ - - - - - - - -Nansum — torch_nansum • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Nansum — torch_nansum • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_nansum(self, dim, keepdim = FALSE, dtype = NULL)
+
+
torch_nansum(self, dim, keepdim = FALSE, dtype = NULL)
+
-

Arguments

- - - - - - - - - - - - - - - - - - -
self

(Tensor) the input tensor.

dim

(int or tuple of ints) the dimension or dimensions to reduce.

keepdim

(bool) whether the output tensor has dim retained or not.

dtype

the desired data type of returned tensor. If specified, the +

+

Arguments

+
self
+

(Tensor) the input tensor.

+
dim
+

(int or tuple of ints) the dimension or dimensions to reduce.

+
keepdim
+

(bool) whether the output tensor has dim retained or not.

+
dtype
+

the desired data type of returned tensor. If specified, the input tensor is casted to dtype before the operation is performed. This is -useful for preventing data type overflows. Default: NULL.

- -

nansum(input, *, dtype=None) -> Tensor

- +useful for preventing data type overflows. Default: NULL.

+
+
+

nansum(input, *, dtype=None) -> Tensor

Returns the sum of all elements, treating Not a Numbers (NaNs) as zero.

-

nansum(input, dim, keepdim=FALSE, *, dtype=None) -> Tensor

- +
+
+

nansum(input, dim, keepdim=FALSE, *, dtype=None) -> Tensor

@@ -230,52 +145,51 @@ dimension dim, treating Not a Numbers (NaNs) as zero. If dim is a list of dimensions, reduce over all of them.

If keepdim is TRUE, the output tensor is of the same size as input except in the dimension(s) dim where it is of size 1. -Otherwise, dim is squeezed (see torch_squeeze), resulting in the +Otherwise, dim is squeezed (see torch_squeeze), resulting in the output tensor having 1 (or len(dim)) fewer dimension(s).

+
-

Examples

-
if (torch_is_installed()) {
-
-a <- torch_tensor(c(1., 2., NaN, 4.))
-torch_nansum(a)
-
-
-torch_nansum(torch_tensor(c(1., NaN)))
-a <- torch_tensor(rbind(c(1, 2), c(3., NaN)))
-torch_nansum(a)
-torch_nansum(a, dim=1)
-torch_nansum(a, dim=2)
-}
-#> torch_tensor
-#>  3
-#>  3
-#> [ CPUFloatType{2} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+a <- torch_tensor(c(1., 2., NaN, 4.))
+torch_nansum(a)
+
+
+torch_nansum(torch_tensor(c(1., NaN)))
+a <- torch_tensor(rbind(c(1, 2), c(3., NaN)))
+torch_nansum(a)
+torch_nansum(a, dim=1)
+torch_nansum(a, dim=2)
+}
+#> torch_tensor
+#>  3
+#>  3
+#> [ CPUFloatType{2} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_narrow.html b/dev/reference/torch_narrow.html index ddcfe887d..b2831a0d3 100644 --- a/dev/reference/torch_narrow.html +++ b/dev/reference/torch_narrow.html @@ -1,79 +1,18 @@ - - - - - - - -Narrow — torch_narrow • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Narrow — torch_narrow • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,76 +111,67 @@

Narrow

-
torch_narrow(self, dim, start, length)
- -

Arguments

- - - - - - - - - - - - - - - - - - -
self

(Tensor) the tensor to narrow

dim

(int) the dimension along which to narrow

start

(int) the starting dimension

length

(int) the distance to the ending dimension

- -

narrow(input, dim, start, length) -> Tensor

+
+
torch_narrow(self, dim, start, length)
+
+
+

Arguments

+
self
+

(Tensor) the tensor to narrow

+
dim
+

(int) the dimension along which to narrow

+
start
+

(int) the starting dimension

+
length
+

(int) the distance to the ending dimension

+
+
+

narrow(input, dim, start, length) -> Tensor

Returns a new tensor that is a narrowed version of input tensor. The dimension dim is input from start to start + length. The returned tensor and input tensor share the same underlying storage.

+
-

Examples

-
if (torch_is_installed()) {
-
-x = torch_tensor(matrix(c(1:9), ncol = 3, byrow= TRUE))
-torch_narrow(x, 1, 1, 2)
-torch_narrow(x, 2, 2, 2)
-}
-#> torch_tensor
-#>  2  3
-#>  5  6
-#>  8  9
-#> [ CPULongType{3,2} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+x = torch_tensor(matrix(c(1:9), ncol = 3, byrow= TRUE))
+torch_narrow(x, 1, 1, 2)
+torch_narrow(x, 2, 2, 2)
+}
+#> torch_tensor
+#>  2  3
+#>  5  6
+#>  8  9
+#> [ CPULongType{3,2} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_ne.html b/dev/reference/torch_ne.html index ab76e63a0..b0208cbb0 100644 --- a/dev/reference/torch_ne.html +++ b/dev/reference/torch_ne.html @@ -1,79 +1,18 @@ - - - - - - - -Ne — torch_ne • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Ne — torch_ne • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_ne(self, other)
- -

Arguments

- - - - - - - - - - -
self

(Tensor) the tensor to compare

other

(Tensor or float) the tensor or value to compare

- -

ne(input, other, out=NULL) -> Tensor

+
+
torch_ne(self, other)
+
+
+

Arguments

+
self
+

(Tensor) the tensor to compare

+
other
+

(Tensor or float) the tensor or value to compare

+
+
+

ne(input, other, out=NULL) -> Tensor

Computes \(input \neq other\) element-wise.

The second argument can be a number or a tensor whose shape is broadcastable with the first argument.

+
-

Examples

-
if (torch_is_installed()) {
-
-torch_ne(torch_tensor(matrix(1:4, ncol = 2, byrow=TRUE)), 
-         torch_tensor(matrix(rep(c(1,4), each = 2), ncol = 2, byrow=TRUE)))
-}
-#> torch_tensor
-#>  0  1
-#>  1  0
-#> [ CPUBoolType{2,2} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+torch_ne(torch_tensor(matrix(1:4, ncol = 2, byrow=TRUE)), 
+         torch_tensor(matrix(rep(c(1,4), each = 2), ncol = 2, byrow=TRUE)))
+}
+#> torch_tensor
+#>  0  1
+#>  1  0
+#> [ CPUBoolType{2,2} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_neg.html b/dev/reference/torch_neg.html index 6ed4bb1ad..c94eebb00 100644 --- a/dev/reference/torch_neg.html +++ b/dev/reference/torch_neg.html @@ -1,79 +1,18 @@ - - - - - - - -Neg — torch_neg • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Neg — torch_neg • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_neg(self)
- -

Arguments

- - - - - - -
self

(Tensor) the input tensor.

- -

neg(input, out=NULL) -> Tensor

+
+
torch_neg(self)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
+
+

neg(input, out=NULL) -> Tensor

@@ -209,47 +129,46 @@

$$ \mbox{out} = -1 \times \mbox{input} $$

+
-

Examples

-
if (torch_is_installed()) {
-
-a = torch_randn(c(5))
-a
-torch_neg(a)
-}
-#> torch_tensor
-#>  0.4130
-#>  0.1488
-#> -1.3886
-#> -0.8531
-#> -0.1611
-#> [ CPUFloatType{5} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+a = torch_randn(c(5))
+a
+torch_neg(a)
+}
+#> torch_tensor
+#> -0.3462
+#> -0.0974
+#>  1.1529
+#>  0.0023
+#> -0.8103
+#> [ CPUFloatType{5} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_negative.html b/dev/reference/torch_negative.html index b7403b271..14d94f09f 100644 --- a/dev/reference/torch_negative.html +++ b/dev/reference/torch_negative.html @@ -1,79 +1,18 @@ - - - - - - - -Negative — torch_negative • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Negative — torch_negative • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,49 +111,44 @@

Negative

-
torch_negative(self)
- -

Arguments

- - - - - - -
self

(Tensor) the input tensor.

- -

negative(input, *, out=None) -> Tensor

+
+
torch_negative(self)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
+
+

negative(input, *, out=None) -> Tensor

-

Alias for torch_neg()

+

Alias for torch_neg()

+
+
-
- +
- - + + diff --git a/dev/reference/torch_nextafter.html b/dev/reference/torch_nextafter.html index ce72ce890..37e067615 100644 --- a/dev/reference/torch_nextafter.html +++ b/dev/reference/torch_nextafter.html @@ -1,79 +1,18 @@ - - - - - - - -Nextafter — torch_nextafter • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Nextafter — torch_nextafter • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,66 +111,61 @@

Nextafter

-
torch_nextafter(self, other)
- -

Arguments

- - - - - - - - - - -
self

(Tensor) the first input tensor

other

(Tensor) the second input tensor

- -

nextafter(input, other, *, out=None) -> Tensor

+
+
torch_nextafter(self, other)
+
+
+

Arguments

+
self
+

(Tensor) the first input tensor

+
other
+

(Tensor) the second input tensor

+
+
+

nextafter(input, other, *, out=None) -> Tensor

Return the next floating-point value after input towards other, elementwise.

The shapes of input and other must be broadcastable .

+
-

Examples

-
if (torch_is_installed()) {
-
-eps <- torch_finfo(torch_float32())$eps
-torch_nextafter(torch_tensor(c(1, 2)), torch_tensor(c(2, 1))) == torch_tensor(c(eps + 1, 2 - eps))
-}
-#> torch_tensor
-#>  1
-#>  1
-#> [ CPUBoolType{2} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+eps <- torch_finfo(torch_float32())$eps
+torch_nextafter(torch_tensor(c(1, 2)), torch_tensor(c(2, 1))) == torch_tensor(c(eps + 1, 2 - eps))
+}
+#> torch_tensor
+#>  1
+#>  1
+#> [ CPUBoolType{2} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_nonzero.html b/dev/reference/torch_nonzero.html index 64ce47234..5cb9f8331 100644 --- a/dev/reference/torch_nonzero.html +++ b/dev/reference/torch_nonzero.html @@ -1,79 +1,18 @@ - - - - - - - -Nonzero — torch_nonzero • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Nonzero — torch_nonzero • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,18 +111,16 @@

Nonzero elements of tensors.

-
torch_nonzero(self, as_list = FALSE)
+
+
torch_nonzero(self, as_list = FALSE)
+
-

Arguments

- - - - - - - - - - -
self

(Tensor) the input tensor.

as_list

If FALSE, the output tensor containing indices. If TRUE, one +

+

Arguments

+
self
+

(Tensor) the input tensor.

+
as_list
+

If FALSE, the output tensor containing indices. If TRUE, one 1-D tensor for each dimension, containing the indices of each nonzero element along that dimension.

When as_list is FALSE (default):

@@ -219,48 +139,44 @@ each containing the indices (in that dimension) of all non-zero elements of tensors of size \(z\), where \(z\) is the total number of non-zero elements in the input tensor.

As a special case, when input has zero dimensions and a nonzero scalar -value, it is treated as a one-dimensional tensor with one element.

- - -

Examples

-
if (torch_is_installed()) {
-
-torch_nonzero(torch_tensor(c(1, 1, 1, 0, 1)))
-}
-#> torch_tensor
-#>  1
-#>  2
-#>  3
-#>  5
-#> [ CPULongType{4,1} ]
-
+value, it is treated as a one-dimensional tensor with one element.

+
+ +
+

Examples

+
if (torch_is_installed()) {
+
+torch_nonzero(torch_tensor(c(1, 1, 1, 0, 1)))
+}
+#> torch_tensor
+#>  1
+#>  2
+#>  3
+#>  5
+#> [ CPULongType{4,1} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_norm.html b/dev/reference/torch_norm.html index 606ba32f2..a9f39a87a 100644 --- a/dev/reference/torch_norm.html +++ b/dev/reference/torch_norm.html @@ -1,79 +1,18 @@ - - - - - - - -Norm — torch_norm • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Norm — torch_norm • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_norm(self, p = 2L, dim, keepdim = FALSE, dtype)
- -

Arguments

- - - - - - - - - - - - - - - - - - - - - - -
self

(Tensor) the input tensor

p

(int, float, inf, -inf, 'fro', 'nuc', optional) the order of norm. Default: 'fro' The following norms can be calculated: ===== ============================ ========================== ord matrix norm vector norm ===== ============================ ========================== NULL Frobenius norm 2-norm 'fro' Frobenius norm -- 'nuc' nuclear norm -- Other as vec norm when dim is NULL sum(abs(x)ord)(1./ord) ===== ============================ ==========================

dim

(int, 2-tuple of ints, 2-list of ints, optional) If it is an int, vector norm will be calculated, if it is 2-tuple of ints, matrix norm will be calculated. If the value is NULL, matrix norm will be calculated when the input tensor only has two dimensions, vector norm will be calculated when the input tensor only has one dimension. If the input tensor has more than two dimensions, the vector norm will be applied to last dimension.

keepdim

(bool, optional) whether the output tensors have dim retained or not. Ignored if dim = NULL and out = NULL. Default: FALSE -Ignored if dim = NULL and out = NULL.

dtype

(torch.dtype, optional) the desired data type of returned tensor. If specified, the input tensor is casted to 'dtype' while performing the operation. Default: NULL.

- -

TEST

+
+
torch_norm(self, p = 2L, dim, keepdim = FALSE, dtype)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor

+
p
+

(int, float, inf, -inf, 'fro', 'nuc', optional) the order of norm. Default: 'fro' The following norms can be calculated: ===== ============================ ========================== ord matrix norm vector norm ===== ============================ ========================== NULL Frobenius norm 2-norm 'fro' Frobenius norm -- 'nuc' nuclear norm -- Other as vec norm when dim is NULL sum(abs(x)ord)(1./ord) ===== ============================ ==========================

+
dim
+

(int, 2-tuple of ints, 2-list of ints, optional) If it is an int, vector norm will be calculated, if it is 2-tuple of ints, matrix norm will be calculated. If the value is NULL, matrix norm will be calculated when the input tensor only has two dimensions, vector norm will be calculated when the input tensor only has one dimension. If the input tensor has more than two dimensions, the vector norm will be applied to last dimension.

+
keepdim
+

(bool, optional) whether the output tensors have dim retained or not. Ignored if dim = NULL and out = NULL. Default: FALSE +Ignored if dim = NULL and out = NULL.

+
dtype
+

(torch.dtype, optional) the desired data type of returned tensor. If specified, the input tensor is casted to 'dtype' while performing the operation. Default: NULL.

+
+
+

TEST

Returns the matrix norm or vector norm of a given tensor.

+
-

Examples

-
if (torch_is_installed()) {
-
-a <- torch_arange(1, 9, dtype = torch_float())
-b <- a$reshape(list(3, 3))
-torch_norm(a)
-torch_norm(b)
-torch_norm(a, Inf)
-torch_norm(b, Inf)
-
-}
-#> torch_tensor
-#> 9
-#> [ CPUFloatType{} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+a <- torch_arange(1, 9, dtype = torch_float())
+b <- a$reshape(list(3, 3))
+torch_norm(a)
+torch_norm(b)
+torch_norm(a, Inf)
+torch_norm(b, Inf)
+
+}
+#> torch_tensor
+#> 9
+#> [ CPUFloatType{} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_normal.html b/dev/reference/torch_normal.html index 3eb1b8c31..714b24746 100644 --- a/dev/reference/torch_normal.html +++ b/dev/reference/torch_normal.html @@ -1,80 +1,19 @@ - - - - - - - -Normal — torch_normal • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Normal — torch_normal • torch - - - - - - - - + + -
-
- -
- -
+
@@ -191,47 +113,38 @@ Normal distributed" />

Normal distributed

-
torch_normal(mean, std, size = NULL, generator = NULL, ...)
+
+
torch_normal(mean, std, size = NULL, generator = NULL, ...)
+
-

Arguments

- - - - - - - - - - - - - - - - - - - - - - -
mean

(tensor or scalar double) Mean of the normal distribution. -If this is a torch_tensor() then the output has the same dim as mean +

+

Arguments

+
mean
+

(tensor or scalar double) Mean of the normal distribution. +If this is a torch_tensor() then the output has the same dim as mean and it represents the per-element mean. If it's a scalar value, it's reused -for all elements.

std

(tensor or scalar double) The standard deviation of the normal -distribution. If this is a torch_tensor() then the output has the same size as std +for all elements.

+
std
+

(tensor or scalar double) The standard deviation of the normal +distribution. If this is a torch_tensor() then the output has the same size as std and it represents the per-element standard deviation. If it's a scalar value, -it's reused for all elements.

size

(integers, optional) only used if both mean and std are scalars.

generator

a random number generator created with torch_generator(). If NULL -a default generator is used.

...

Tensor option parameters like dtype, layout, and device. -Can only be used when mean and std are both scalar numerics.

- -

Note

- +it's reused for all elements.

+
size
+

(integers, optional) only used if both mean and std are scalars.

+
generator
+

a random number generator created with torch_generator(). If NULL +a default generator is used.

+
...
+

Tensor option parameters like dtype, layout, and device. +Can only be used when mean and std are both scalar numerics.

+
+
+

Note

When the shapes do not match, the shape of mean is used as the shape for the returned output tensor

-

normal(mean, std, *) -> Tensor

- +
+
+

normal(mean, std, *) -> Tensor

@@ -243,66 +156,68 @@ each output element's normal distribution

each output element's normal distribution

The shapes of mean and std don't need to match, but the total number of elements in each tensor need to be the same.

-

normal(mean=0.0, std) -> Tensor

- +
+
+

normal(mean=0.0, std) -> Tensor

Similar to the function above, but the means are shared among all drawn elements.

-

normal(mean, std=1.0) -> Tensor

- +
+
+

normal(mean, std=1.0) -> Tensor

Similar to the function above, but the standard-deviations are shared among all drawn elements.

-

normal(mean, std, size, *) -> Tensor

- +
+
+

normal(mean, std, size, *) -> Tensor

Similar to the function above, but the means and standard deviations are shared among all drawn elements. The resulting tensor has size given by size.

+
-

Examples

-
if (torch_is_installed()) {
-
-torch_normal(mean=0, std=torch_arange(1, 0, -0.1) + 1e-6)
-torch_normal(mean=0.5, std=torch_arange(1., 6.))
-torch_normal(mean=torch_arange(1., 6.))
-torch_normal(2, 3, size=c(1, 4))
-
-}
-#> torch_tensor
-#>  2.0100  3.2109 -0.0579  1.9645
-#> [ CPUFloatType{1,4} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+torch_normal(mean=0, std=torch_arange(1, 0, -0.1) + 1e-6)
+torch_normal(mean=0.5, std=torch_arange(1., 6.))
+torch_normal(mean=torch_arange(1., 6.))
+torch_normal(2, 3, size=c(1, 4))
+
+}
+#> torch_tensor
+#>  6.7230  5.0421  4.4763  1.1071
+#> [ CPUFloatType{1,4} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_not_equal.html b/dev/reference/torch_not_equal.html index 2f87d8463..0eb3d4f4c 100644 --- a/dev/reference/torch_not_equal.html +++ b/dev/reference/torch_not_equal.html @@ -1,79 +1,18 @@ - - - - - - - -Not_equal — torch_not_equal • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Not_equal — torch_not_equal • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,53 +111,46 @@

Not_equal

-
torch_not_equal(self, other)
- -

Arguments

- - - - - - - - - - -
self

(Tensor) the tensor to compare

other

(Tensor or float) the tensor or value to compare

- -

not_equal(input, other, *, out=None) -> Tensor

+
+
torch_not_equal(self, other)
+
+
+

Arguments

+
self
+

(Tensor) the tensor to compare

+
other
+

(Tensor or float) the tensor or value to compare

+
+
+

not_equal(input, other, *, out=None) -> Tensor

-

Alias for torch_ne().

+

Alias for torch_ne().

+
+
-
- +
- - + + diff --git a/dev/reference/torch_ones.html b/dev/reference/torch_ones.html index 712b2c855..ead99862b 100644 --- a/dev/reference/torch_ones.html +++ b/dev/reference/torch_ones.html @@ -1,79 +1,18 @@ - - - - - - - -Ones — torch_ones • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Ones — torch_ones • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_ones(
-  ...,
-  names = NULL,
-  dtype = NULL,
-  layout = torch_strided(),
-  device = NULL,
-  requires_grad = FALSE
-)
- -

Arguments

- - - - - - - - - - - - - - - - - - - - - - - - - - -
...

(int...) a sequence of integers defining the shape of the output tensor. Can be a variable number of arguments or a collection like a list or tuple.

names

optional names for the dimensions

dtype

(torch.dtype, optional) the desired data type of returned tensor. Default: if NULL, uses a global default (see torch_set_default_tensor_type).

layout

(torch.layout, optional) the desired layout of returned Tensor. Default: torch_strided.

device

(torch.device, optional) the desired device of returned tensor. Default: if NULL, uses the current device for the default tensor type (see torch_set_default_tensor_type). device will be the CPU for CPU tensor types and the current CUDA device for CUDA tensor types.

requires_grad

(bool, optional) If autograd should record operations on the returned tensor. Default: FALSE.

- -

ones(*size, out=NULL, dtype=NULL, layout=torch.strided, device=NULL, requires_grad=False) -> Tensor

+
+
torch_ones(
+  ...,
+  names = NULL,
+  dtype = NULL,
+  layout = torch_strided(),
+  device = NULL,
+  requires_grad = FALSE
+)
+
+
+

Arguments

+
...
+

(int...) a sequence of integers defining the shape of the output tensor. Can be a variable number of arguments or a collection like a list or tuple.

+
names
+

optional names for the dimensions

+
dtype
+

(torch.dtype, optional) the desired data type of returned tensor. Default: if NULL, uses a global default (see torch_set_default_tensor_type).

+
layout
+

(torch.layout, optional) the desired layout of returned Tensor. Default: torch_strided.

+
device
+

(torch.device, optional) the desired device of returned tensor. Default: if NULL, uses the current device for the default tensor type (see torch_set_default_tensor_type). device will be the CPU for CPU tensor types and the current CUDA device for CUDA tensor types.

+
requires_grad
+

(bool, optional) If autograd should record operations on the returned tensor. Default: FALSE.

+
+
+

ones(*size, out=NULL, dtype=NULL, layout=torch.strided, device=NULL, requires_grad=False) -> Tensor

Returns a tensor filled with the scalar value 1, with the shape defined by the variable argument size.

+
-

Examples

-
if (torch_is_installed()) {
-
-torch_ones(c(2, 3))
-torch_ones(c(5))
-}
-#> torch_tensor
-#>  1
-#>  1
-#>  1
-#>  1
-#>  1
-#> [ CPUFloatType{5} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+torch_ones(c(2, 3))
+torch_ones(c(5))
+}
+#> torch_tensor
+#>  1
+#>  1
+#>  1
+#>  1
+#>  1
+#> [ CPUFloatType{5} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_ones_like.html b/dev/reference/torch_ones_like.html index 65a3bbe64..e6fa80bf5 100644 --- a/dev/reference/torch_ones_like.html +++ b/dev/reference/torch_ones_like.html @@ -1,79 +1,18 @@ - - - - - - - -Ones_like — torch_ones_like • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Ones_like — torch_ones_like • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,96 +111,84 @@

Ones_like

-
torch_ones_like(
-  input,
-  dtype = NULL,
-  layout = torch_strided(),
-  device = NULL,
-  requires_grad = FALSE,
-  memory_format = torch_preserve_format()
-)
- -

Arguments

- - - - - - - - - - - - - - - - - - - - - - - - - - -
input

(Tensor) the size of input will determine size of the output tensor.

dtype

(torch.dtype, optional) the desired data type of returned Tensor. Default: if NULL, defaults to the dtype of input.

layout

(torch.layout, optional) the desired layout of returned tensor. Default: if NULL, defaults to the layout of input.

device

(torch.device, optional) the desired device of returned tensor. Default: if NULL, defaults to the device of input.

requires_grad

(bool, optional) If autograd should record operations on the returned tensor. Default: FALSE.

memory_format

(torch.memory_format, optional) the desired memory format of returned Tensor. Default: torch_preserve_format.

- -

ones_like(input, dtype=NULL, layout=NULL, device=NULL, requires_grad=False, memory_format=torch.preserve_format) -> Tensor

+
+
torch_ones_like(
+  input,
+  dtype = NULL,
+  layout = torch_strided(),
+  device = NULL,
+  requires_grad = FALSE,
+  memory_format = torch_preserve_format()
+)
+
+
+

Arguments

+
input
+

(Tensor) the size of input will determine size of the output tensor.

+
dtype
+

(torch.dtype, optional) the desired data type of returned Tensor. Default: if NULL, defaults to the dtype of input.

+
layout
+

(torch.layout, optional) the desired layout of returned tensor. Default: if NULL, defaults to the layout of input.

+
device
+

(torch.device, optional) the desired device of returned tensor. Default: if NULL, defaults to the device of input.

+
requires_grad
+

(bool, optional) If autograd should record operations on the returned tensor. Default: FALSE.

+
memory_format
+

(torch.memory_format, optional) the desired memory format of returned Tensor. Default: torch_preserve_format.

+
+
+

ones_like(input, dtype=NULL, layout=NULL, device=NULL, requires_grad=False, memory_format=torch.preserve_format) -> Tensor

Returns a tensor filled with the scalar value 1, with the same size as input. torch_ones_like(input) is equivalent to torch_ones(input.size(), dtype=input.dtype, layout=input.layout, device=input.device).

-

Warning

- +
+
+

Warning

As of 0.4, this function does not support an out keyword. As an alternative, the old torch_ones_like(input, out=output) is equivalent to torch_ones(input.size(), out=output).

+
-

Examples

-
if (torch_is_installed()) {
-
-input = torch_empty(c(2, 3))
-torch_ones_like(input)
-}
-#> torch_tensor
-#>  1  1  1
-#>  1  1  1
-#> [ CPUFloatType{2,3} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+input = torch_empty(c(2, 3))
+torch_ones_like(input)
+}
+#> torch_tensor
+#>  1  1  1
+#>  1  1  1
+#> [ CPUFloatType{2,3} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_orgqr.html b/dev/reference/torch_orgqr.html index c8dffffc8..4e4d1b9ee 100644 --- a/dev/reference/torch_orgqr.html +++ b/dev/reference/torch_orgqr.html @@ -1,79 +1,18 @@ - - - - - - - -Orgqr — torch_orgqr • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Orgqr — torch_orgqr • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_orgqr(self, input2)
- -

Arguments

- - - - - - - - - - -
self

(Tensor) the a from torch_geqrf.

input2

(Tensor) the tau from torch_geqrf.

- -

orgqr(input, input2) -> Tensor

+
+
torch_orgqr(self, input2)
+
+
+

Arguments

+
self
+

(Tensor) the a from torch_geqrf.

+
input2
+

(Tensor) the tau from torch_geqrf.

+
+
+

orgqr(input, input2) -> Tensor

Computes the orthogonal matrix Q of a QR factorization, from the (input, input2) -tuple returned by torch_geqrf.

+tuple returned by torch_geqrf.

This directly calls the underlying LAPACK function ?orgqr. See LAPACK documentation for orgqr_ for further details.

+
+
-
- +
- - + + diff --git a/dev/reference/torch_ormqr.html b/dev/reference/torch_ormqr.html index 12ad3d487..bab9936d4 100644 --- a/dev/reference/torch_ormqr.html +++ b/dev/reference/torch_ormqr.html @@ -1,79 +1,18 @@ - - - - - - - -Ormqr — torch_ormqr • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Ormqr — torch_ormqr • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_ormqr(self, input2, input3, left = TRUE, transpose = FALSE)
- -

Arguments

- - - - - - - - - - - - - - - - - - - - - - -
self

(Tensor) the a from torch_geqrf.

input2

(Tensor) the tau from torch_geqrf.

input3

(Tensor) the matrix to be multiplied.

left

see LAPACK documentation

transpose

see LAPACK documentation

- -

ormqr(input, input2, input3, left=TRUE, transpose=False) -> Tensor

+
+
torch_ormqr(self, input2, input3, left = TRUE, transpose = FALSE)
+
+
+

Arguments

+
self
+

(Tensor) the a from torch_geqrf.

+
input2
+

(Tensor) the tau from torch_geqrf.

+
input3
+

(Tensor) the matrix to be multiplied.

+
left
+

see LAPACK documentation

+
transpose
+

see LAPACK documentation

+
+
+

ormqr(input, input2, input3, left=TRUE, transpose=False) -> Tensor

Multiplies mat (given by input3) by the orthogonal Q matrix of the QR factorization -formed by torch_geqrf() that is represented by (a, tau) (given by (input, input2)).

+formed by torch_geqrf() that is represented by (a, tau) (given by (input, input2)).

This directly calls the underlying LAPACK function ?ormqr. -See LAPACK documentation for ormqr for further details.

+See LAPACK documentation for ormqr for further details.

+
+
-
- +
- - + + diff --git a/dev/reference/torch_outer.html b/dev/reference/torch_outer.html index 441f90d2f..f9816f81e 100644 --- a/dev/reference/torch_outer.html +++ b/dev/reference/torch_outer.html @@ -1,79 +1,18 @@ - - - - - - - -Outer — torch_outer • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Outer — torch_outer • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_outer(self, vec2)
- -

Arguments

- - - - - - - - - - -
self

(Tensor) 1-D input vector

vec2

(Tensor) 1-D input vector

- -

Note

+
+
torch_outer(self, vec2)
+
+
+

Arguments

+
self
+

(Tensor) 1-D input vector

+
vec2
+

(Tensor) 1-D input vector

+
+
+

Note

This function does not broadcast.

-

outer(input, vec2, *, out=None) -> Tensor

- +
+
+

outer(input, vec2, *, out=None) -> Tensor

Outer product of input and vec2. If input is a vector of size \(n\) and vec2 is a vector of size \(m\), then out must be a matrix of size \((n \times m)\).

+
-

Examples

-
if (torch_is_installed()) {
-
-v1 <- torch_arange(1., 5.)
-v2 <- torch_arange(1., 4.)
-torch_outer(v1, v2)
-}
-#> torch_tensor
-#>   1   2   3   4
-#>   2   4   6   8
-#>   3   6   9  12
-#>   4   8  12  16
-#>   5  10  15  20
-#> [ CPUFloatType{5,4} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+v1 <- torch_arange(1., 5.)
+v2 <- torch_arange(1., 4.)
+torch_outer(v1, v2)
+}
+#> torch_tensor
+#>   1   2   3   4
+#>   2   4   6   8
+#>   3   6   9  12
+#>   4   8  12  16
+#>   5  10  15  20
+#> [ CPUFloatType{5,4} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_pdist.html b/dev/reference/torch_pdist.html index 5b08ba6a8..9cedfa210 100644 --- a/dev/reference/torch_pdist.html +++ b/dev/reference/torch_pdist.html @@ -1,79 +1,18 @@ - - - - - - - -Pdist — torch_pdist • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Pdist — torch_pdist • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_pdist(self, p = 2L)
- -

Arguments

- - - - - - - - - - -
self

NA input tensor of shape \(N \times M\).

p

NA p value for the p-norm distance to calculate between each vector pair \(\in [0, \infty]\).

- -

pdist(input, p=2) -> Tensor

+
+
torch_pdist(self, p = 2L)
+
+
+

Arguments

+
self
+

NA input tensor of shape \(N \times M\).

+
p
+

NA p value for the p-norm distance to calculate between each vector pair \(\in [0, \infty]\).

+
+
+

pdist(input, p=2) -> Tensor

@@ -219,32 +137,29 @@ if the rows are contiguous.

equivalent to scipy.spatial.distance.pdist(input, 'hamming') * M. When \(p = \infty\), the closest scipy function is scipy.spatial.distance.pdist(xn, lambda x, y: np.abs(x - y).max()).

+
+
-
- +
- - + + diff --git a/dev/reference/torch_pinverse.html b/dev/reference/torch_pinverse.html index 98da7faea..ffa8a65a0 100644 --- a/dev/reference/torch_pinverse.html +++ b/dev/reference/torch_pinverse.html @@ -1,79 +1,18 @@ - - - - - - - -Pinverse — torch_pinverse • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Pinverse — torch_pinverse • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,90 +111,86 @@

Pinverse

-
torch_pinverse(self, rcond = 0)
- -

Arguments

- - - - - - - - - - -
self

(Tensor) The input tensor of size \((*, m, n)\) where \(*\) is zero or more batch dimensions

rcond

(float) A floating point value to determine the cutoff for small singular values. Default: 1e-15

- -

Note

+
+
torch_pinverse(self, rcond = 0)
+
+
+

Arguments

+
self
+

(Tensor) The input tensor of size \((*, m, n)\) where \(*\) is zero or more batch dimensions

+
rcond
+

(float) A floating point value to determine the cutoff for small singular values. Default: 1e-15

+
+
+

Note

-
This method is implemented using the Singular Value Decomposition.
-
+
This method is implemented using the Singular Value Decomposition.
+
-
The pseudo-inverse is not necessarily a continuous function in the elements of the matrix `[1]`_.
+
The pseudo-inverse is not necessarily a continuous function in the elements of the matrix `[1]`_.
 Therefore, derivatives are not always existent, and exist for a constant rank only `[2]`_.
 However, this method is backprop-able due to the implementation by using SVD results, and
 could be unstable. Double-backward will also be unstable due to the usage of SVD internally.
 See `~torch.svd` for more details.
-
- -

pinverse(input, rcond=1e-15) -> Tensor

+
+
+
+

pinverse(input, rcond=1e-15) -> Tensor

Calculates the pseudo-inverse (also known as the Moore-Penrose inverse) of a 2D tensor. Please look at Moore-Penrose inverse_ for more details

+
-

Examples

-
if (torch_is_installed()) {
-
-input = torch_randn(c(3, 5))
-input
-torch_pinverse(input)
-# Batched pinverse example
-a = torch_randn(c(2,6,3))
-b = torch_pinverse(a)
-torch_matmul(b, a)
-}
-#> torch_tensor
-#> (1,.,.) = 
-#>   1.0000e+00 -5.5879e-09  1.5320e-07
-#>   2.1420e-08  1.0000e+00  8.3819e-09
-#>   3.6787e-08  1.4063e-07  1.0000e+00
-#> 
-#> (2,.,.) = 
-#>   1.0000e+00  2.9802e-07 -8.9407e-08
-#>  -7.4506e-08  1.0000e+00  3.2783e-07
-#>   7.4506e-08  4.4703e-08  1.0000e+00
-#> [ CPUFloatType{2,3,3} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+input = torch_randn(c(3, 5))
+input
+torch_pinverse(input)
+# Batched pinverse example
+a = torch_randn(c(2,6,3))
+b = torch_pinverse(a)
+torch_matmul(b, a)
+}
+#> torch_tensor
+#> (1,.,.) = 
+#>   1.0000e+00 -5.1316e-07 -4.7684e-07
+#>   8.1956e-08  1.0000e+00  3.3528e-07
+#>   4.2841e-08 -9.6683e-08  1.0000e+00
+#> 
+#> (2,.,.) = 
+#>   1.0000e+00  2.8312e-07 -1.1921e-07
+#>  -1.4901e-08  1.0000e+00  1.1921e-07
+#>  -1.6391e-07  2.6822e-07  1.0000e+00
+#> [ CPUFloatType{2,3,3} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_pixel_shuffle.html b/dev/reference/torch_pixel_shuffle.html index db81c1a74..adf02ef42 100644 --- a/dev/reference/torch_pixel_shuffle.html +++ b/dev/reference/torch_pixel_shuffle.html @@ -1,79 +1,18 @@ - - - - - - - -Pixel_shuffle — torch_pixel_shuffle • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Pixel_shuffle — torch_pixel_shuffle • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,62 +111,57 @@

Pixel_shuffle

-
torch_pixel_shuffle(self, upscale_factor)
- -

Arguments

- - - - - - - - - - -
self

(Tensor) the input tensor

upscale_factor

(int) factor to increase spatial resolution by

- -

Rearranges elements in a tensor of shape

+
+
torch_pixel_shuffle(self, upscale_factor)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor

+
upscale_factor
+

(int) factor to increase spatial resolution by

+
+
+

Rearranges elements in a tensor of shape

math:(*, C \times r^2, H, W) to a :

Rearranges elements in a tensor of shape \((*, C \times r^2, H, W)\) to a tensor of shape \((*, C, H \times r, W \times r)\).

See ~torch.nn.PixelShuffle for details.

+
-

Examples

-
if (torch_is_installed()) {
-
-input = torch_randn(c(1, 9, 4, 4))
-output = nnf_pixel_shuffle(input, 3)
-print(output$size())
-}
-#> [1]  1  1 12 12
-
+
+

Examples

+
if (torch_is_installed()) {
+
+input = torch_randn(c(1, 9, 4, 4))
+output = nnf_pixel_shuffle(input, 3)
+print(output$size())
+}
+#> [1]  1  1 12 12
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_poisson.html b/dev/reference/torch_poisson.html index 9cd5a348b..647e6e717 100644 --- a/dev/reference/torch_poisson.html +++ b/dev/reference/torch_poisson.html @@ -1,79 +1,18 @@ - - - - - - - -Poisson — torch_poisson • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Poisson — torch_poisson • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_poisson(self, generator = NULL)
- -

Arguments

- - - - - - - - - - -
self

(Tensor) the input tensor containing the rates of the Poisson distribution

generator

(torch.Generator, optional) a pseudorandom number generator for sampling

- -

poisson(input *, generator=NULL) -> Tensor

+
+
torch_poisson(self, generator = NULL)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor containing the rates of the Poisson distribution

+
generator
+

(torch.Generator, optional) a pseudorandom number generator for sampling

+
+
+

poisson(input *, generator=NULL) -> Tensor

@@ -215,45 +133,44 @@ element in input i.e.,

$$ \mbox{out}_i \sim \mbox{Poisson}(\mbox{input}_i) $$

+
-

Examples

-
if (torch_is_installed()) {
-
-rates = torch_rand(c(4, 4)) * 5  # rate parameter between 0 and 5
-torch_poisson(rates)
-}
-#> torch_tensor
-#>  1  1  3  3
-#>  3  1  8  3
-#>  3  0  4  2
-#>  2  2  1  3
-#> [ CPUFloatType{4,4} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+rates = torch_rand(c(4, 4)) * 5  # rate parameter between 0 and 5
+torch_poisson(rates)
+}
+#> torch_tensor
+#>  8  0  0  1
+#>  2  3  6  0
+#>  0  5  1  5
+#>  2  0  2  2
+#> [ CPUFloatType{4,4} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_polar.html b/dev/reference/torch_polar.html index 8d4e5ad27..960b19a9a 100644 --- a/dev/reference/torch_polar.html +++ b/dev/reference/torch_polar.html @@ -1,79 +1,18 @@ - - - - - - - -Polar — torch_polar • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Polar — torch_polar • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_polar(abs, angle)
- -

Arguments

- - - - - - - - - - -
abs

(Tensor) The absolute value the complex tensor. Must be float or -double.

angle

(Tensor) The angle of the complex tensor. Must be same dtype as -abs.

- -

polar(abs, angle, *, out=None) -> Tensor

+
+
torch_polar(abs, angle)
+
+
+

Arguments

+
abs
+

(Tensor) The absolute value the complex tensor. Must be float or +double.

+
angle
+

(Tensor) The angle of the complex tensor. Must be same dtype as +abs.

+
+
+

polar(abs, angle, *, out=None) -> Tensor

@@ -217,46 +135,45 @@ corresponding to the polar coordinates with absolute value abs and

$$ \mbox{out} = \mbox{abs} \cdot \cos(\mbox{angle}) + \mbox{abs} \cdot \sin(\mbox{angle}) \cdot j $$

+
-

Examples

-
if (torch_is_installed()) {
-
-abs <- torch_tensor(c(1, 2), dtype=torch_float64())
-angle <- torch_tensor(c(pi / 2, 5 * pi / 4), dtype=torch_float64())
-z <- torch_polar(abs, angle)
-z
-}
-#> torch_tensor
-#> 1e-17 *
-#>  6.1232
-#> -141421356237309520.0000
-#> [ CPUComplexDoubleType{2} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+abs <- torch_tensor(c(1, 2), dtype=torch_float64())
+angle <- torch_tensor(c(pi / 2, 5 * pi / 4), dtype=torch_float64())
+z <- torch_polar(abs, angle)
+z
+}
+#> torch_tensor
+#> 1e-17 *
+#>  6.1232
+#> -141421356237309520.0000
+#> [ CPUComplexDoubleType{2} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_polygamma.html b/dev/reference/torch_polygamma.html index 8549235cb..d2e8bbda0 100644 --- a/dev/reference/torch_polygamma.html +++ b/dev/reference/torch_polygamma.html @@ -1,79 +1,18 @@ - - - - - - - -Polygamma — torch_polygamma • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Polygamma — torch_polygamma • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,29 +111,26 @@

Polygamma

-
torch_polygamma(n, input)
- -

Arguments

- - - - - - - - - - -
n

(int) the order of the polygamma function

input

(Tensor) the input tensor.

- -

Note

+
+
torch_polygamma(n, input)
+
+
+

Arguments

+
n
+

(int) the order of the polygamma function

+
input
+

(Tensor) the input tensor.

+
+
+

Note

-
This function is not implemented for \eqn{n \geq 2}.
-
- -

polygamma(n, input, out=NULL) -> Tensor

+
This function is not implemented for \eqn{n \geq 2}.
+
+
+
+

polygamma(n, input, out=NULL) -> Tensor

@@ -220,40 +139,39 @@

$$ \psi^{(n)}(x) = \frac{d^{(n)}}{dx^{(n)}} \psi(x) $$

+
-

Examples

-
if (torch_is_installed()) {
-if (FALSE) {
-a = torch_tensor(c(1, 0.5))
-torch_polygamma(1, a)
-}
-}
-
+
+

Examples

+
if (torch_is_installed()) {
+if (FALSE) {
+a = torch_tensor(c(1, 0.5))
+torch_polygamma(1, a)
+}
+}
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_pow.html b/dev/reference/torch_pow.html index 4db1474de..ada6ea5cd 100644 --- a/dev/reference/torch_pow.html +++ b/dev/reference/torch_pow.html @@ -1,79 +1,18 @@ - - - - - - - -Pow — torch_pow • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Pow — torch_pow • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_pow(self, exponent)
- -

Arguments

- - - - - - - - - - -
self

(float) the scalar base value for the power operation

exponent

(float or tensor) the exponent value

- -

pow(input, exponent, out=NULL) -> Tensor

+
+
torch_pow(self, exponent)
+
+
+

Arguments

+
self
+

(float) the scalar base value for the power operation

+
exponent
+

(float or tensor) the exponent value

+
+
+

pow(input, exponent, out=NULL) -> Tensor

@@ -223,8 +141,9 @@ When exponent is a tensor, the operation applied is:

$$ When exponent is a tensor, the shapes of input and exponent must be broadcastable .

-

pow(self, exponent, out=NULL) -> Tensor

- +
+
+

pow(self, exponent, out=NULL) -> Tensor

@@ -234,57 +153,56 @@ The returned tensor out is of the same shape as exponent$$ \mbox{out}_i = \mbox{self} ^ {\mbox{exponent}_i} $$

+
-

Examples

-
if (torch_is_installed()) {
-
-a = torch_randn(c(4))
-a
-torch_pow(a, 2)
-exp <- torch_arange(1, 5)
-a <- torch_arange(1, 5)
-a
-exp
-torch_pow(a, exp)
-
-
-exp <- torch_arange(1, 5)
-base <- 2
-torch_pow(base, exp)
-}
-#> torch_tensor
-#>   2
-#>   4
-#>   8
-#>  16
-#>  32
-#> [ CPUFloatType{5} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+a = torch_randn(c(4))
+a
+torch_pow(a, 2)
+exp <- torch_arange(1, 5)
+a <- torch_arange(1, 5)
+a
+exp
+torch_pow(a, exp)
+
+
+exp <- torch_arange(1, 5)
+base <- 2
+torch_pow(base, exp)
+}
+#> torch_tensor
+#>   2
+#>   4
+#>   8
+#>  16
+#>  32
+#> [ CPUFloatType{5} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_prod.html b/dev/reference/torch_prod.html index dc6a112fe..bbb4ca752 100644 --- a/dev/reference/torch_prod.html +++ b/dev/reference/torch_prod.html @@ -1,79 +1,18 @@ - - - - - - - -Prod — torch_prod • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Prod — torch_prod • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_prod(self, dim, keepdim = FALSE, dtype = NULL)
- -

Arguments

- - - - - - - - - - - - - - - - - - -
self

(Tensor) the input tensor.

dim

(int) the dimension to reduce.

keepdim

(bool) whether the output tensor has dim retained or not.

dtype

(torch.dtype, optional) the desired data type of returned tensor. If specified, the input tensor is casted to dtype before the operation is performed. This is useful for preventing data type overflows. Default: NULL.

- -

prod(input, dtype=NULL) -> Tensor

+
+
torch_prod(self, dim, keepdim = FALSE, dtype = NULL)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
dim
+

(int) the dimension to reduce.

+
keepdim
+

(bool) whether the output tensor has dim retained or not.

+
dtype
+

(torch.dtype, optional) the desired data type of returned tensor. If specified, the input tensor is casted to dtype before the operation is performed. This is useful for preventing data type overflows. Default: NULL.

+
+
+

prod(input, dtype=NULL) -> Tensor

Returns the product of all elements in the input tensor.

-

prod(input, dim, keepdim=False, dtype=NULL) -> Tensor

- +
+
+

prod(input, dim, keepdim=False, dtype=NULL) -> Tensor

@@ -227,52 +142,50 @@ dimension dim.

If keepdim is TRUE, the output tensor is of the same size as input except in the dimension dim where it is of size 1. -Otherwise, dim is squeezed (see torch_squeeze), resulting in +Otherwise, dim is squeezed (see torch_squeeze), resulting in the output tensor having 1 fewer dimension than input.

+
-

Examples

-
if (torch_is_installed()) {
-
-a = torch_randn(c(1, 3))
-a
-torch_prod(a)
-
-
-a = torch_randn(c(4, 2))
-a
-torch_prod(a, 1)
-}
-#> torch_tensor
-#> 0.001 *
-#>  4.4359
-#> -67.6969
-#> [ CPUFloatType{2} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+a = torch_randn(c(1, 3))
+a
+torch_prod(a)
+
+
+a = torch_randn(c(4, 2))
+a
+torch_prod(a, 1)
+}
+#> torch_tensor
+#> -0.1586
+#>  0.0262
+#> [ CPUFloatType{2} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_promote_types.html b/dev/reference/torch_promote_types.html index 31a0579e7..dc5165d9e 100644 --- a/dev/reference/torch_promote_types.html +++ b/dev/reference/torch_promote_types.html @@ -1,79 +1,18 @@ - - - - - - - -Promote_types — torch_promote_types • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Promote_types — torch_promote_types • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,23 +111,19 @@

Promote_types

-
torch_promote_types(type1, type2)
- -

Arguments

- - - - - - - - - - -
type1

(torch.dtype)

type2

(torch.dtype)

- -

promote_types(type1, type2) -> dtype

+
+
torch_promote_types(type1, type2)
+
+
+

Arguments

+
type1
+

(torch.dtype)

+
type2
+

(torch.dtype)

+
+
+

promote_types(type1, type2) -> dtype

@@ -213,40 +131,39 @@ not smaller nor of lower kind than either type1 or type2. See type promotion documentation for more information on the type promotion logic.

+
-

Examples

-
if (torch_is_installed()) {
-
-torch_promote_types(torch_int32(), torch_float32())
-torch_promote_types(torch_uint8(), torch_long())
-}
-#> torch_Long
-
+
+

Examples

+
if (torch_is_installed()) {
+
+torch_promote_types(torch_int32(), torch_float32())
+torch_promote_types(torch_uint8(), torch_long())
+}
+#> torch_Long
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_qr.html b/dev/reference/torch_qr.html index faadcd40d..4868afaae 100644 --- a/dev/reference/torch_qr.html +++ b/dev/reference/torch_qr.html @@ -1,79 +1,18 @@ - - - - - - - -Qr — torch_qr • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Qr — torch_qr • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_qr(self, some = TRUE)
- -

Arguments

- - - - - - - - - - -
self

(Tensor) the input tensor of size \((*, m, n)\) where * is zero or more batch dimensions consisting of matrices of dimension \(m \times n\).

some

(bool, optional) Set to TRUE for reduced QR decomposition and FALSE for complete QR decomposition.

- -

Note

+
+
torch_qr(self, some = TRUE)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor of size \((*, m, n)\) where * is zero or more batch dimensions consisting of matrices of dimension \(m \times n\).

+
some
+

(bool, optional) Set to TRUE for reduced QR decomposition and FALSE for complete QR decomposition.

+
+
+

Note

precision may be lost if the magnitudes of the elements of input are large

While it should always give you a valid decomposition, it may not give you the same one across platforms - it will depend on your LAPACK implementation.

-

qr(input, some=TRUE, out=NULL) -> (Tensor, Tensor)

- +
+
+

qr(input, some=TRUE, out=NULL) -> (Tensor, Tensor)

@@ -222,48 +141,47 @@ with \(Q\) being an orthogonal matrix or batch of orthogonal matrices and \(R\) being an upper triangular matrix or batch of upper triangular matrices.

If some is TRUE, then this function returns the thin (reduced) QR factorization. Otherwise, if some is FALSE, this function returns the complete QR factorization.

+
-

Examples

-
if (torch_is_installed()) {
-
-a = torch_tensor(matrix(c(12., -51, 4, 6, 167, -68, -4, 24, -41), ncol = 3, byrow = TRUE))
-out = torch_qr(a)
-q = out[[1]]
-r = out[[2]]
-torch_mm(q, r)$round()
-torch_mm(q$t(), q)$round()
-}
-#> torch_tensor
-#>  1  0  0
-#>  0  1  0
-#>  0  0  1
-#> [ CPUFloatType{3,3} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+a = torch_tensor(matrix(c(12., -51, 4, 6, 167, -68, -4, 24, -41), ncol = 3, byrow = TRUE))
+out = torch_qr(a)
+q = out[[1]]
+r = out[[2]]
+torch_mm(q, r)$round()
+torch_mm(q$t(), q)$round()
+}
+#> torch_tensor
+#>  1  0  0
+#>  0  1  0
+#>  0  0  1
+#> [ CPUFloatType{3,3} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_qscheme.html b/dev/reference/torch_qscheme.html index 235234b5b..0d055fd3d 100644 --- a/dev/reference/torch_qscheme.html +++ b/dev/reference/torch_qscheme.html @@ -1,79 +1,18 @@ - - - - - - - -Creates the corresponding Scheme object — torch_qscheme • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Creates the corresponding Scheme object — torch_qscheme • torch - - - - - - + + - - -
-
- -
- -
+
@@ -189,41 +111,38 @@

Creates the corresponding Scheme object

-
torch_per_channel_affine()
+    
+
torch_per_channel_affine()
 
-torch_per_tensor_affine()
+torch_per_tensor_affine()
 
-torch_per_channel_symmetric()
-
-torch_per_tensor_symmetric()
+torch_per_channel_symmetric() +torch_per_tensor_symmetric()
+
+ -
- +
- - + + diff --git a/dev/reference/torch_quantile.html b/dev/reference/torch_quantile.html index 8f249176b..c9f0ea1de 100644 --- a/dev/reference/torch_quantile.html +++ b/dev/reference/torch_quantile.html @@ -1,79 +1,18 @@ - - - - - - - -Quantile — torch_quantile • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Quantile — torch_quantile • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,42 +111,33 @@

Quantile

-
torch_quantile(self, q, dim = NULL, keepdim = FALSE, interpolation)
- -

Arguments

- - - - - - - - - - - - - - - - - - - - - - -
self

(Tensor) the input tensor.

q

(float or Tensor) a scalar or 1D tensor of quantile values in the range [0, 1]

dim

(int) the dimension to reduce.

keepdim

(bool) whether the output tensor has dim retained or not.

interpolation

The interpolation method.

- -

quantile(input, q) -> Tensor

+
+
torch_quantile(self, q, dim = NULL, keepdim = FALSE, interpolation)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
q
+

(float or Tensor) a scalar or 1D tensor of quantile values in the range [0, 1]

+
dim
+

(int) the dimension to reduce.

+
keepdim
+

(bool) whether the output tensor has dim retained or not.

+
interpolation
+

The interpolation method.

+
+
+

quantile(input, q) -> Tensor

Returns the q-th quantiles of all elements in the input tensor, doing a linear interpolation when the q-th quantile lies between two data points.

-

quantile(input, q, dim=None, keepdim=FALSE, *, out=None) -> Tensor

- +
+
+

quantile(input, q, dim=None, keepdim=FALSE, *, out=None) -> Tensor

@@ -234,52 +147,51 @@ data points. By default, dim is None resulting in the being flattened before computation.

If keepdim is TRUE, the output dimensions are of the same size as input except in the dimensions being reduced (dim or all if dim is NULL) where they -have size 1. Otherwise, the dimensions being reduced are squeezed (see torch_squeeze). +have size 1. Otherwise, the dimensions being reduced are squeezed (see torch_squeeze). If q is a 1D tensor, an extra dimension is prepended to the output tensor with the same size as q which represents the quantiles.

+
-

Examples

-
if (torch_is_installed()) {
-
-a <- torch_randn(c(1, 3))
-a
-q <- torch_tensor(c(0, 0.5, 1))
-torch_quantile(a, q)
-
-
-a <- torch_randn(c(2, 3))
-a
-q <- torch_tensor(c(0.25, 0.5, 0.75))
-torch_quantile(a, q, dim=1, keepdim=TRUE)
-torch_quantile(a, q, dim=1, keepdim=TRUE)$shape
-}
-#> [1] 3 1 3
-
+
+

Examples

+
if (torch_is_installed()) {
+
+a <- torch_randn(c(1, 3))
+a
+q <- torch_tensor(c(0, 0.5, 1))
+torch_quantile(a, q)
+
+
+a <- torch_randn(c(2, 3))
+a
+q <- torch_tensor(c(0.25, 0.5, 0.75))
+torch_quantile(a, q, dim=1, keepdim=TRUE)
+torch_quantile(a, q, dim=1, keepdim=TRUE)$shape
+}
+#> [1] 3 1 3
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_quantize_per_channel.html b/dev/reference/torch_quantize_per_channel.html index d57711e10..04e429281 100644 --- a/dev/reference/torch_quantize_per_channel.html +++ b/dev/reference/torch_quantize_per_channel.html @@ -1,79 +1,18 @@ - - - - - - - -Quantize_per_channel — torch_quantize_per_channel • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Quantize_per_channel — torch_quantize_per_channel • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,78 +111,67 @@

Quantize_per_channel

-
torch_quantize_per_channel(self, scales, zero_points, axis, dtype)
- -

Arguments

- - - - - - - - - - - - - - - - - - - - - - -
self

(Tensor) float tensor to quantize

scales

(Tensor) float 1D tensor of scales to use, size should match input.size(axis)

zero_points

(int) integer 1D tensor of offset to use, size should match input.size(axis)

axis

(int) dimension on which apply per-channel quantization

dtype

(torch.dtype) the desired data type of returned tensor. Has to be one of the quantized dtypes: torch_quint8, torch.qint8, torch.qint32

- -

quantize_per_channel(input, scales, zero_points, axis, dtype) -> Tensor

+
+
torch_quantize_per_channel(self, scales, zero_points, axis, dtype)
+
+
+

Arguments

+
self
+

(Tensor) float tensor to quantize

+
scales
+

(Tensor) float 1D tensor of scales to use, size should match input.size(axis)

+
zero_points
+

(int) integer 1D tensor of offset to use, size should match input.size(axis)

+
axis
+

(int) dimension on which apply per-channel quantization

+
dtype
+

(torch.dtype) the desired data type of returned tensor. Has to be one of the quantized dtypes: torch_quint8, torch.qint8, torch.qint32

+
+
+

quantize_per_channel(input, scales, zero_points, axis, dtype) -> Tensor

Converts a float tensor to per-channel quantized tensor with given scales and zero points.

+
-

Examples

-
if (torch_is_installed()) {
-x = torch_tensor(matrix(c(-1.0, 0.0, 1.0, 2.0), ncol = 2, byrow = TRUE))
-torch_quantize_per_channel(x, torch_tensor(c(0.1, 0.01)), 
-                           torch_tensor(c(10L, 0L)), 0, torch_quint8())
-torch_quantize_per_channel(x, torch_tensor(c(0.1, 0.01)), 
-                           torch_tensor(c(10L, 0L)), 0, torch_quint8())$int_repr()
-}
-#> torch_tensor
-#>    0   10
-#>  100  200
-#> [ CPUByteType{2,2} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+x = torch_tensor(matrix(c(-1.0, 0.0, 1.0, 2.0), ncol = 2, byrow = TRUE))
+torch_quantize_per_channel(x, torch_tensor(c(0.1, 0.01)), 
+                           torch_tensor(c(10L, 0L)), 0, torch_quint8())
+torch_quantize_per_channel(x, torch_tensor(c(0.1, 0.01)), 
+                           torch_tensor(c(10L, 0L)), 0, torch_quint8())$int_repr()
+}
+#> torch_tensor
+#>    0   10
+#>  100  200
+#> [ CPUByteType{2,2} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_quantize_per_tensor.html b/dev/reference/torch_quantize_per_tensor.html index 24c7d53bc..59309becd 100644 --- a/dev/reference/torch_quantize_per_tensor.html +++ b/dev/reference/torch_quantize_per_tensor.html @@ -1,79 +1,18 @@ - - - - - - - -Quantize_per_tensor — torch_quantize_per_tensor • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Quantize_per_tensor — torch_quantize_per_tensor • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,73 +111,64 @@

Quantize_per_tensor

-
torch_quantize_per_tensor(self, scale, zero_point, dtype)
- -

Arguments

- - - - - - - - - - - - - - - - - - -
self

(Tensor) float tensor to quantize

scale

(float) scale to apply in quantization formula

zero_point

(int) offset in integer value that maps to float zero

dtype

(torch.dtype) the desired data type of returned tensor. Has to be one of the quantized dtypes: torch_quint8, torch.qint8, torch.qint32

- -

quantize_per_tensor(input, scale, zero_point, dtype) -> Tensor

+
+
torch_quantize_per_tensor(self, scale, zero_point, dtype)
+
+
+

Arguments

+
self
+

(Tensor) float tensor to quantize

+
scale
+

(float) scale to apply in quantization formula

+
zero_point
+

(int) offset in integer value that maps to float zero

+
dtype
+

(torch.dtype) the desired data type of returned tensor. Has to be one of the quantized dtypes: torch_quint8, torch.qint8, torch.qint32

+
+
+

quantize_per_tensor(input, scale, zero_point, dtype) -> Tensor

Converts a float tensor to quantized tensor with given scale and zero point.

+
-

Examples

-
if (torch_is_installed()) {
-torch_quantize_per_tensor(torch_tensor(c(-1.0, 0.0, 1.0, 2.0)), 0.1, 10, torch_quint8())
-torch_quantize_per_tensor(torch_tensor(c(-1.0, 0.0, 1.0, 2.0)), 0.1, 10, torch_quint8())$int_repr()
-}
-#> torch_tensor
-#>   0
-#>  10
-#>  20
-#>  30
-#> [ CPUByteType{4} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+torch_quantize_per_tensor(torch_tensor(c(-1.0, 0.0, 1.0, 2.0)), 0.1, 10, torch_quint8())
+torch_quantize_per_tensor(torch_tensor(c(-1.0, 0.0, 1.0, 2.0)), 0.1, 10, torch_quint8())$int_repr()
+}
+#> torch_tensor
+#>   0
+#>  10
+#>  20
+#>  30
+#> [ CPUByteType{4} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_rad2deg.html b/dev/reference/torch_rad2deg.html index 2d20d6b8f..5bd0a987d 100644 --- a/dev/reference/torch_rad2deg.html +++ b/dev/reference/torch_rad2deg.html @@ -1,79 +1,18 @@ - - - - - - - -Rad2deg — torch_rad2deg • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Rad2deg — torch_rad2deg • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_rad2deg(self)
- -

Arguments

- - - - - - -
self

(Tensor) the input tensor.

- -

rad2deg(input, *, out=None) -> Tensor

+
+
torch_rad2deg(self)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
+
+

rad2deg(input, *, out=None) -> Tensor

Returns a new tensor with each of the elements of input converted from angles in radians to degrees.

+
-

Examples

-
if (torch_is_installed()) {
-
-a <- torch_tensor(rbind(c(3.142, -3.142), c(6.283, -6.283), c(1.570, -1.570)))
-torch_rad2deg(a)
-}
-#> torch_tensor
-#>  180.0233 -180.0233
-#>  359.9894 -359.9894
-#>   89.9544  -89.9544
-#> [ CPUFloatType{3,2} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+a <- torch_tensor(rbind(c(3.142, -3.142), c(6.283, -6.283), c(1.570, -1.570)))
+torch_rad2deg(a)
+}
+#> torch_tensor
+#>  180.0233 -180.0233
+#>  359.9894 -359.9894
+#>   89.9544  -89.9544
+#> [ CPUFloatType{3,2} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_rand.html b/dev/reference/torch_rand.html index 02c4c18a7..3e466f605 100644 --- a/dev/reference/torch_rand.html +++ b/dev/reference/torch_rand.html @@ -1,79 +1,18 @@ - - - - - - - -Rand — torch_rand • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Rand — torch_rand • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_rand(
-  ...,
-  names = NULL,
-  dtype = NULL,
-  layout = torch_strided(),
-  device = NULL,
-  requires_grad = FALSE
-)
- -

Arguments

- - - - - - - - - - - - - - - - - - - - - - - - - - -
...

(int...) a sequence of integers defining the shape of the output tensor. Can be a variable number of arguments or a collection like a list or tuple.

names

optional dimension names

dtype

(torch.dtype, optional) the desired data type of returned tensor. Default: if NULL, uses a global default (see torch_set_default_tensor_type).

layout

(torch.layout, optional) the desired layout of returned Tensor. Default: torch_strided.

device

(torch.device, optional) the desired device of returned tensor. Default: if NULL, uses the current device for the default tensor type (see torch_set_default_tensor_type). device will be the CPU for CPU tensor types and the current CUDA device for CUDA tensor types.

requires_grad

(bool, optional) If autograd should record operations on the returned tensor. Default: FALSE.

- -

rand(*size, out=NULL, dtype=NULL, layout=torch.strided, device=NULL, requires_grad=False) -> Tensor

+
+
torch_rand(
+  ...,
+  names = NULL,
+  dtype = NULL,
+  layout = torch_strided(),
+  device = NULL,
+  requires_grad = FALSE
+)
+
+
+

Arguments

+
...
+

(int...) a sequence of integers defining the shape of the output tensor. Can be a variable number of arguments or a collection like a list or tuple.

+
names
+

optional dimension names

+
dtype
+

(torch.dtype, optional) the desired data type of returned tensor. Default: if NULL, uses a global default (see torch_set_default_tensor_type).

+
layout
+

(torch.layout, optional) the desired layout of returned Tensor. Default: torch_strided.

+
device
+

(torch.device, optional) the desired device of returned tensor. Default: if NULL, uses the current device for the default tensor type (see torch_set_default_tensor_type). device will be the CPU for CPU tensor types and the current CUDA device for CUDA tensor types.

+
requires_grad
+

(bool, optional) If autograd should record operations on the returned tensor. Default: FALSE.

+
+
+

rand(*size, out=NULL, dtype=NULL, layout=torch.strided, device=NULL, requires_grad=False) -> Tensor

Returns a tensor filled with random numbers from a uniform distribution on the interval \([0, 1)\)

The shape of the tensor is defined by the variable argument size.

+
-

Examples

-
if (torch_is_installed()) {
-
-torch_rand(4)
-torch_rand(c(2, 3))
-}
-#> torch_tensor
-#>  0.2689  0.7828  0.4615
-#>  0.4835  0.8843  0.2912
-#> [ CPUFloatType{2,3} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+torch_rand(4)
+torch_rand(c(2, 3))
+}
+#> torch_tensor
+#>  0.1373  0.2308  0.4866
+#>  0.4432  0.6311  0.7305
+#> [ CPUFloatType{2,3} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_rand_like.html b/dev/reference/torch_rand_like.html index 1d2dd9078..6dcd47aed 100644 --- a/dev/reference/torch_rand_like.html +++ b/dev/reference/torch_rand_like.html @@ -1,79 +1,18 @@ - - - - - - - -Rand_like — torch_rand_like • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Rand_like — torch_rand_like • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,46 +111,34 @@

Rand_like

-
torch_rand_like(
-  input,
-  dtype = NULL,
-  layout = torch_strided(),
-  device = NULL,
-  requires_grad = FALSE,
-  memory_format = torch_preserve_format()
-)
- -

Arguments

- - - - - - - - - - - - - - - - - - - - - - - - - - -
input

(Tensor) the size of input will determine size of the output tensor.

dtype

(torch.dtype, optional) the desired data type of returned Tensor. Default: if NULL, defaults to the dtype of input.

layout

(torch.layout, optional) the desired layout of returned tensor. Default: if NULL, defaults to the layout of input.

device

(torch.device, optional) the desired device of returned tensor. Default: if NULL, defaults to the device of input.

requires_grad

(bool, optional) If autograd should record operations on the returned tensor. Default: FALSE.

memory_format

(torch.memory_format, optional) the desired memory format of returned Tensor. Default: torch_preserve_format.

- -

rand_like(input, dtype=NULL, layout=NULL, device=NULL, requires_grad=False, memory_format=torch.preserve_format) -> Tensor

+
+
torch_rand_like(
+  input,
+  dtype = NULL,
+  layout = torch_strided(),
+  device = NULL,
+  requires_grad = FALSE,
+  memory_format = torch_preserve_format()
+)
+
+
+

Arguments

+
input
+

(Tensor) the size of input will determine size of the output tensor.

+
dtype
+

(torch.dtype, optional) the desired data type of returned Tensor. Default: if NULL, defaults to the dtype of input.

+
layout
+

(torch.layout, optional) the desired layout of returned tensor. Default: if NULL, defaults to the layout of input.

+
device
+

(torch.device, optional) the desired device of returned tensor. Default: if NULL, defaults to the device of input.

+
requires_grad
+

(bool, optional) If autograd should record operations on the returned tensor. Default: FALSE.

+
memory_format
+

(torch.memory_format, optional) the desired memory format of returned Tensor. Default: torch_preserve_format.

+
+
+

rand_like(input, dtype=NULL, layout=NULL, device=NULL, requires_grad=False, memory_format=torch.preserve_format) -> Tensor

@@ -236,32 +146,29 @@ random numbers from a uniform distribution on the interval \([0, 1)\). torch_rand_like(input) is equivalent to torch_rand(input.size(), dtype=input.dtype, layout=input.layout, device=input.device).

+
+
-
- +
- - + + diff --git a/dev/reference/torch_randint.html b/dev/reference/torch_randint.html index 03c06b0c0..14c22bef8 100644 --- a/dev/reference/torch_randint.html +++ b/dev/reference/torch_randint.html @@ -1,79 +1,18 @@ - - - - - - - -Randint — torch_randint • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Randint — torch_randint • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,61 +111,43 @@

Randint

-
torch_randint(
-  low,
-  high,
-  size,
-  generator = NULL,
-  dtype = NULL,
-  layout = torch_strided(),
-  device = NULL,
-  requires_grad = FALSE,
-  memory_format = torch_preserve_format()
-)
- -

Arguments

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
low

(int, optional) Lowest integer to be drawn from the distribution. Default: 0.

high

(int) One above the highest integer to be drawn from the distribution.

size

(tuple) a tuple defining the shape of the output tensor.

generator

(torch.Generator, optional) a pseudorandom number generator for sampling

dtype

(torch.dtype, optional) the desired data type of returned tensor. Default: if NULL, uses a global default (see torch_set_default_tensor_type).

layout

(torch.layout, optional) the desired layout of returned Tensor. Default: torch_strided.

device

(torch.device, optional) the desired device of returned tensor. Default: if NULL, uses the current device for the default tensor type (see torch_set_default_tensor_type). device will be the CPU for CPU tensor types and the current CUDA device for CUDA tensor types.

requires_grad

(bool, optional) If autograd should record operations on the returned tensor. Default: FALSE.

memory_format

memory format for the resulting tensor.

- -

randint(low=0, high, size, *, generator=NULL, out=NULL, \

+
+
torch_randint(
+  low,
+  high,
+  size,
+  generator = NULL,
+  dtype = NULL,
+  layout = torch_strided(),
+  device = NULL,
+  requires_grad = FALSE,
+  memory_format = torch_preserve_format()
+)
+
+
+

Arguments

+
low
+

(int, optional) Lowest integer to be drawn from the distribution. Default: 0.

+
high
+

(int) One above the highest integer to be drawn from the distribution.

+
size
+

(tuple) a tuple defining the shape of the output tensor.

+
generator
+

(torch.Generator, optional) a pseudorandom number generator for sampling

+
dtype
+

(torch.dtype, optional) the desired data type of returned tensor. Default: if NULL, uses a global default (see torch_set_default_tensor_type).

+
layout
+

(torch.layout, optional) the desired layout of returned Tensor. Default: torch_strided.

+
device
+

(torch.device, optional) the desired device of returned tensor. Default: if NULL, uses the current device for the default tensor type (see torch_set_default_tensor_type). device will be the CPU for CPU tensor types and the current CUDA device for CUDA tensor types.

+
requires_grad
+

(bool, optional) If autograd should record operations on the returned tensor. Default: FALSE.

+
memory_format
+

memory format for the resulting tensor.

+
+
+

randint(low=0, high, size, *, generator=NULL, out=NULL, \

@@ -254,44 +158,43 @@ between low (inclusive) and high (exclusive).

.. note: With the global dtype default (torch_float32), this function returns a tensor with dtype torch_int64.

+
-

Examples

-
if (torch_is_installed()) {
-
-torch_randint(3, 5, list(3))
-torch_randint(0, 10, size = list(2, 2))
-torch_randint(3, 10, list(2, 2))
-}
-#> torch_tensor
-#>  9  5
-#>  3  5
-#> [ CPUFloatType{2,2} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+torch_randint(3, 5, list(3))
+torch_randint(0, 10, size = list(2, 2))
+torch_randint(3, 10, list(2, 2))
+}
+#> torch_tensor
+#>  4  6
+#>  8  8
+#> [ CPUFloatType{2,2} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_randint_like.html b/dev/reference/torch_randint_like.html index ccf21413e..1e7d8d117 100644 --- a/dev/reference/torch_randint_like.html +++ b/dev/reference/torch_randint_like.html @@ -1,79 +1,18 @@ - - - - - - - -Randint_like — torch_randint_like • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Randint_like — torch_randint_like • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,51 +111,37 @@

Randint_like

-
torch_randint_like(
-  input,
-  low,
-  high,
-  dtype = NULL,
-  layout = torch_strided(),
-  device = NULL,
-  requires_grad = FALSE
-)
- -

Arguments

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
input

(Tensor) the size of input will determine size of the output tensor.

low

(int, optional) Lowest integer to be drawn from the distribution. Default: 0.

high

(int) One above the highest integer to be drawn from the distribution.

dtype

(torch.dtype, optional) the desired data type of returned Tensor. Default: if NULL, defaults to the dtype of input.

layout

(torch.layout, optional) the desired layout of returned tensor. Default: if NULL, defaults to the layout of input.

device

(torch.device, optional) the desired device of returned tensor. Default: if NULL, defaults to the device of input.

requires_grad

(bool, optional) If autograd should record operations on the returned tensor. Default: FALSE.

- -

randint_like(input, low=0, high, dtype=NULL, layout=torch.strided, device=NULL, requires_grad=False,

+
+
torch_randint_like(
+  input,
+  low,
+  high,
+  dtype = NULL,
+  layout = torch_strided(),
+  device = NULL,
+  requires_grad = FALSE
+)
+
+
+

Arguments

+
input
+

(Tensor) the size of input will determine size of the output tensor.

+
low
+

(int, optional) Lowest integer to be drawn from the distribution. Default: 0.

+
high
+

(int) One above the highest integer to be drawn from the distribution.

+
dtype
+

(torch.dtype, optional) the desired data type of returned Tensor. Default: if NULL, defaults to the dtype of input.

+
layout
+

(torch.layout, optional) the desired layout of returned tensor. Default: if NULL, defaults to the layout of input.

+
device
+

(torch.device, optional) the desired device of returned tensor. Default: if NULL, defaults to the device of input.

+
requires_grad
+

(bool, optional) If autograd should record operations on the returned tensor. Default: FALSE.

+
+
+

randint_like(input, low=0, high, dtype=NULL, layout=torch.strided, device=NULL, requires_grad=False,

@@ -244,32 +152,29 @@ random integers generated uniformly between low (inclusive) and

.. note: With the global dtype default (torch_float32), this function returns a tensor with dtype torch_int64.

+
+
-
- +
- - + + diff --git a/dev/reference/torch_randn.html b/dev/reference/torch_randn.html index 7aa37cb93..4ffc02199 100644 --- a/dev/reference/torch_randn.html +++ b/dev/reference/torch_randn.html @@ -1,79 +1,18 @@ - - - - - - - -Randn — torch_randn • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Randn — torch_randn • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_randn(
-  ...,
-  names = NULL,
-  dtype = NULL,
-  layout = torch_strided(),
-  device = NULL,
-  requires_grad = FALSE
-)
- -

Arguments

- - - - - - - - - - - - - - - - - - - - - - - - - - -
...

(int...) a sequence of integers defining the shape of the output tensor. Can be a variable number of arguments or a collection like a list or tuple.

names

optional names for the dimensions

dtype

(torch.dtype, optional) the desired data type of returned tensor. Default: if NULL, uses a global default (see torch_set_default_tensor_type).

layout

(torch.layout, optional) the desired layout of returned Tensor. Default: torch_strided.

device

(torch.device, optional) the desired device of returned tensor. Default: if NULL, uses the current device for the default tensor type (see torch_set_default_tensor_type). device will be the CPU for CPU tensor types and the current CUDA device for CUDA tensor types.

requires_grad

(bool, optional) If autograd should record operations on the returned tensor. Default: FALSE.

- -

randn(*size, out=NULL, dtype=NULL, layout=torch.strided, device=NULL, requires_grad=False) -> Tensor

+
+
torch_randn(
+  ...,
+  names = NULL,
+  dtype = NULL,
+  layout = torch_strided(),
+  device = NULL,
+  requires_grad = FALSE
+)
+
+
+

Arguments

+
...
+

(int...) a sequence of integers defining the shape of the output tensor. Can be a variable number of arguments or a collection like a list or tuple.

+
names
+

optional names for the dimensions

+
dtype
+

(torch.dtype, optional) the desired data type of returned tensor. Default: if NULL, uses a global default (see torch_set_default_tensor_type).

+
layout
+

(torch.layout, optional) the desired layout of returned Tensor. Default: torch_strided.

+
device
+

(torch.device, optional) the desired device of returned tensor. Default: if NULL, uses the current device for the default tensor type (see torch_set_default_tensor_type). device will be the CPU for CPU tensor types and the current CUDA device for CUDA tensor types.

+
requires_grad
+

(bool, optional) If autograd should record operations on the returned tensor. Default: FALSE.

+
+
+

randn(*size, out=NULL, dtype=NULL, layout=torch.strided, device=NULL, requires_grad=False) -> Tensor

@@ -239,43 +149,42 @@ distribution).

\mbox{out}_{i} \sim \mathcal{N}(0, 1) $$ The shape of the tensor is defined by the variable argument size.

+
-

Examples

-
if (torch_is_installed()) {
-
-torch_randn(c(4))
-torch_randn(c(2, 3))
-}
-#> torch_tensor
-#>  0.1095 -0.4758  1.2508
-#> -1.4637 -0.8335  3.3825
-#> [ CPUFloatType{2,3} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+torch_randn(c(4))
+torch_randn(c(2, 3))
+}
+#> torch_tensor
+#> -1.0901  1.4860 -1.5434
+#>  1.4869 -1.7941  1.6130
+#> [ CPUFloatType{2,3} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_randn_like.html b/dev/reference/torch_randn_like.html index 6effef6e3..cff57a8b6 100644 --- a/dev/reference/torch_randn_like.html +++ b/dev/reference/torch_randn_like.html @@ -1,79 +1,18 @@ - - - - - - - -Randn_like — torch_randn_like • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Randn_like — torch_randn_like • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,46 +111,34 @@

Randn_like

-
torch_randn_like(
-  input,
-  dtype = NULL,
-  layout = torch_strided(),
-  device = NULL,
-  requires_grad = FALSE,
-  memory_format = torch_preserve_format()
-)
- -

Arguments

- - - - - - - - - - - - - - - - - - - - - - - - - - -
input

(Tensor) the size of input will determine size of the output tensor.

dtype

(torch.dtype, optional) the desired data type of returned Tensor. Default: if NULL, defaults to the dtype of input.

layout

(torch.layout, optional) the desired layout of returned tensor. Default: if NULL, defaults to the layout of input.

device

(torch.device, optional) the desired device of returned tensor. Default: if NULL, defaults to the device of input.

requires_grad

(bool, optional) If autograd should record operations on the returned tensor. Default: FALSE.

memory_format

(torch.memory_format, optional) the desired memory format of returned Tensor. Default: torch_preserve_format.

- -

randn_like(input, dtype=NULL, layout=NULL, device=NULL, requires_grad=False, memory_format=torch.preserve_format) -> Tensor

+
+
torch_randn_like(
+  input,
+  dtype = NULL,
+  layout = torch_strided(),
+  device = NULL,
+  requires_grad = FALSE,
+  memory_format = torch_preserve_format()
+)
+
+
+

Arguments

+
input
+

(Tensor) the size of input will determine size of the output tensor.

+
dtype
+

(torch.dtype, optional) the desired data type of returned Tensor. Default: if NULL, defaults to the dtype of input.

+
layout
+

(torch.layout, optional) the desired layout of returned tensor. Default: if NULL, defaults to the layout of input.

+
device
+

(torch.device, optional) the desired device of returned tensor. Default: if NULL, defaults to the device of input.

+
requires_grad
+

(bool, optional) If autograd should record operations on the returned tensor. Default: FALSE.

+
memory_format
+

(torch.memory_format, optional) the desired memory format of returned Tensor. Default: torch_preserve_format.

+
+
+

randn_like(input, dtype=NULL, layout=NULL, device=NULL, requires_grad=False, memory_format=torch.preserve_format) -> Tensor

@@ -236,32 +146,29 @@ random numbers from a normal distribution with mean 0 and variance 1. torch_randn_like(input) is equivalent to torch_randn(input.size(), dtype=input.dtype, layout=input.layout, device=input.device).

+
+
-
- +
- - + + diff --git a/dev/reference/torch_randperm.html b/dev/reference/torch_randperm.html index 0641a92f2..8e89ef364 100644 --- a/dev/reference/torch_randperm.html +++ b/dev/reference/torch_randperm.html @@ -1,79 +1,18 @@ - - - - - - - -Randperm — torch_randperm • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Randperm — torch_randperm • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,83 +111,72 @@

Randperm

-
torch_randperm(
-  n,
-  dtype = torch_int64(),
-  layout = torch_strided(),
-  device = NULL,
-  requires_grad = FALSE
-)
- -

Arguments

- - - - - - - - - - - - - - - - - - - - - - -
n

(int) the upper bound (exclusive)

dtype

(torch.dtype, optional) the desired data type of returned tensor. Default: torch_int64.

layout

(torch.layout, optional) the desired layout of returned Tensor. Default: torch_strided.

device

(torch.device, optional) the desired device of returned tensor. Default: if NULL, uses the current device for the default tensor type (see torch_set_default_tensor_type). device will be the CPU for CPU tensor types and the current CUDA device for CUDA tensor types.

requires_grad

(bool, optional) If autograd should record operations on the returned tensor. Default: FALSE.

- -

randperm(n, out=NULL, dtype=torch.int64, layout=torch.strided, device=NULL, requires_grad=False) -> LongTensor

+
+
torch_randperm(
+  n,
+  dtype = torch_int64(),
+  layout = torch_strided(),
+  device = NULL,
+  requires_grad = FALSE
+)
+
+
+

Arguments

+
n
+

(int) the upper bound (exclusive)

+
dtype
+

(torch.dtype, optional) the desired data type of returned tensor. Default: torch_int64.

+
layout
+

(torch.layout, optional) the desired layout of returned Tensor. Default: torch_strided.

+
device
+

(torch.device, optional) the desired device of returned tensor. Default: if NULL, uses the current device for the default tensor type (see torch_set_default_tensor_type). device will be the CPU for CPU tensor types and the current CUDA device for CUDA tensor types.

+
requires_grad
+

(bool, optional) If autograd should record operations on the returned tensor. Default: FALSE.

+
+
+

randperm(n, out=NULL, dtype=torch.int64, layout=torch.strided, device=NULL, requires_grad=False) -> LongTensor

Returns a random permutation of integers from 0 to n - 1.

+
-

Examples

-
if (torch_is_installed()) {
-
-torch_randperm(4)
-}
-#> torch_tensor
-#>  3
-#>  0
-#>  2
-#>  1
-#> [ CPULongType{4} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+torch_randperm(4)
+}
+#> torch_tensor
+#>  0
+#>  1
+#>  2
+#>  3
+#> [ CPULongType{4} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_range.html b/dev/reference/torch_range.html index 04c6102ad..7769cb51b 100644 --- a/dev/reference/torch_range.html +++ b/dev/reference/torch_range.html @@ -1,79 +1,18 @@ - - - - - - - -Range — torch_range • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Range — torch_range • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_range(
-  start,
-  end,
-  step = 1,
-  dtype = NULL,
-  layout = torch_strided(),
-  device = NULL,
-  requires_grad = FALSE
-)
- -

Arguments

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
start

(float) the starting value for the set of points. Default: 0.

end

(float) the ending value for the set of points

step

(float) the gap between each pair of adjacent points. Default: 1.

dtype

(torch.dtype, optional) the desired data type of returned tensor. Default: if NULL, uses a global default (see torch_set_default_tensor_type). If dtype is not given, infer the data type from the other input arguments. If any of start, end, or stop are floating-point, the dtype is inferred to be the default dtype, see ~torch.get_default_dtype. Otherwise, the dtype is inferred to be torch.int64.

layout

(torch.layout, optional) the desired layout of returned Tensor. Default: torch_strided.

device

(torch.device, optional) the desired device of returned tensor. Default: if NULL, uses the current device for the default tensor type (see torch_set_default_tensor_type). device will be the CPU for CPU tensor types and the current CUDA device for CUDA tensor types.

requires_grad

(bool, optional) If autograd should record operations on the returned tensor. Default: FALSE.

- -

range(start=0, end, step=1, out=NULL, dtype=NULL, layout=torch.strided, device=NULL, requires_grad=False) -> Tensor

+
+
torch_range(
+  start,
+  end,
+  step = 1,
+  dtype = NULL,
+  layout = torch_strided(),
+  device = NULL,
+  requires_grad = FALSE
+)
+
+
+

Arguments

+
start
+

(float) the starting value for the set of points. Default: 0.

+
end
+

(float) the ending value for the set of points

+
step
+

(float) the gap between each pair of adjacent points. Default: 1.

+
dtype
+

(torch.dtype, optional) the desired data type of returned tensor. Default: if NULL, uses a global default (see torch_set_default_tensor_type). If dtype is not given, infer the data type from the other input arguments. If any of start, end, or stop are floating-point, the dtype is inferred to be the default dtype, see ~torch.get_default_dtype. Otherwise, the dtype is inferred to be torch.int64.

+
layout
+

(torch.layout, optional) the desired layout of returned Tensor. Default: torch_strided.

+
device
+

(torch.device, optional) the desired device of returned tensor. Default: if NULL, uses the current device for the default tensor type (see torch_set_default_tensor_type). device will be the CPU for CPU tensor types and the current CUDA device for CUDA tensor types.

+
requires_grad
+

(bool, optional) If autograd should record operations on the returned tensor. Default: FALSE.

+
+
+

range(start=0, end, step=1, out=NULL, dtype=NULL, layout=torch.strided, device=NULL, requires_grad=False) -> Tensor

@@ -243,55 +151,55 @@ the gap between two values in the tensor.

$$ \mbox{out}_{i+1} = \mbox{out}_i + \mbox{step}. $$

-

Warning

- +
+
+

Warning

-

This function is deprecated in favor of torch_arange.

+

This function is deprecated in favor of torch_arange.

+
-

Examples

-
if (torch_is_installed()) {
-
-torch_range(1, 4)
-torch_range(1, 4, 0.5)
-}
-#> Warning: This function is deprecated in favor of torch_arange.
-#> Warning: This function is deprecated in favor of torch_arange.
-#> torch_tensor
-#>  1.0000
-#>  1.5000
-#>  2.0000
-#>  2.5000
-#>  3.0000
-#>  3.5000
-#>  4.0000
-#> [ CPUFloatType{7} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+torch_range(1, 4)
+torch_range(1, 4, 0.5)
+}
+#> Warning: This function is deprecated in favor of torch_arange.
+#> Warning: This function is deprecated in favor of torch_arange.
+#> torch_tensor
+#>  1.0000
+#>  1.5000
+#>  2.0000
+#>  2.5000
+#>  3.0000
+#>  3.5000
+#>  4.0000
+#> [ CPUFloatType{7} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_real.html b/dev/reference/torch_real.html index 73cae93e5..44bbcaeda 100644 --- a/dev/reference/torch_real.html +++ b/dev/reference/torch_real.html @@ -1,79 +1,18 @@ - - - - - - - -Real — torch_real • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Real — torch_real • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_real(self)
- -

Arguments

- - - - - - -
self

(Tensor) the input tensor.

- -

real(input) -> Tensor

+
+
torch_real(self)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
+
+

real(input) -> Tensor

Returns the real part of the input tensor. If input is a real (non-complex) tensor, this function just returns it.

-

Warning

- +
+
+

Warning

Not yet implemented for complex tensors.

$$ \mbox{out}_{i} = real(\mbox{input}_{i}) $$

+
-

Examples

-
if (torch_is_installed()) {
-if (FALSE) {
-torch_real(torch_tensor(c(-1 + 1i, -2 + 2i, 3 - 3i)))
-}
-}
-
+
+

Examples

+
if (torch_is_installed()) {
+if (FALSE) {
+torch_real(torch_tensor(c(-1 + 1i, -2 + 2i, 3 - 3i)))
+}
+}
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_reciprocal.html b/dev/reference/torch_reciprocal.html index 37ec1582c..1c2e48942 100644 --- a/dev/reference/torch_reciprocal.html +++ b/dev/reference/torch_reciprocal.html @@ -1,79 +1,18 @@ - - - - - - - -Reciprocal — torch_reciprocal • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Reciprocal — torch_reciprocal • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,19 +111,17 @@

Reciprocal

-
torch_reciprocal(self)
- -

Arguments

- - - - - - -
self

(Tensor) the input tensor.

- -

reciprocal(input, out=NULL) -> Tensor

+
+
torch_reciprocal(self)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
+
+

reciprocal(input, out=NULL) -> Tensor

@@ -209,46 +129,45 @@

$$ \mbox{out}_{i} = \frac{1}{\mbox{input}_{i}} $$

+
-

Examples

-
if (torch_is_installed()) {
-
-a = torch_randn(c(4))
-a
-torch_reciprocal(a)
-}
-#> torch_tensor
-#>  9.0585
-#> -1.5912
-#> -1.0692
-#>  8.6893
-#> [ CPUFloatType{4} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+a = torch_randn(c(4))
+a
+torch_reciprocal(a)
+}
+#> torch_tensor
+#> -0.4091
+#>  2.7370
+#> -1.8316
+#> -2.6616
+#> [ CPUFloatType{4} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_reduction.html b/dev/reference/torch_reduction.html index 773d695f3..c170b824d 100644 --- a/dev/reference/torch_reduction.html +++ b/dev/reference/torch_reduction.html @@ -1,79 +1,18 @@ - - - - - - - -Creates the reduction objet — torch_reduction • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Creates the reduction objet — torch_reduction • torch - - - - - - + + - - -
-
- -
- -
+
@@ -189,39 +111,36 @@

Creates the reduction objet

-
torch_reduction_sum()
+    
+
torch_reduction_sum()
 
-torch_reduction_mean()
-
-torch_reduction_none()
+torch_reduction_mean() +torch_reduction_none()
+
+ -
- +
- - + + diff --git a/dev/reference/torch_relu.html b/dev/reference/torch_relu.html index a7305a47c..9d737b91d 100644 --- a/dev/reference/torch_relu.html +++ b/dev/reference/torch_relu.html @@ -1,79 +1,18 @@ - - - - - - - -Relu — torch_relu • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Relu — torch_relu • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,49 +111,44 @@

Relu

-
torch_relu(self)
- -

Arguments

- - - - - - -
self

the input tensor

- -

relu(input) -> Tensor

+
+
torch_relu(self)
+
+
+

Arguments

+
self
+

the input tensor

+
+
+

relu(input) -> Tensor

Computes the relu tranformation.

+
+
-
- +
- - + + diff --git a/dev/reference/torch_relu_.html b/dev/reference/torch_relu_.html index a6d7430c1..75704aca4 100644 --- a/dev/reference/torch_relu_.html +++ b/dev/reference/torch_relu_.html @@ -1,79 +1,18 @@ - - - - - - - -Relu_ — torch_relu_ • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Relu_ — torch_relu_ • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_relu_(self)
- -

Arguments

- - - - - - -
self

the input tensor

- -

relu_(input) -> Tensor

+
+
torch_relu_(self)
+
+
+

Arguments

+
self
+

the input tensor

+
+
+

relu_(input) -> Tensor

-

In-place version of torch_relu().

+

In-place version of torch_relu().

+
+
-
- +
- - + + diff --git a/dev/reference/torch_remainder.html b/dev/reference/torch_remainder.html index 6abb55693..5229c7345 100644 --- a/dev/reference/torch_remainder.html +++ b/dev/reference/torch_remainder.html @@ -1,79 +1,18 @@ - - - - - - - -Remainder — torch_remainder • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Remainder — torch_remainder • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,23 +111,19 @@

Remainder

-
torch_remainder(self, other)
- -

Arguments

- - - - - - - - - - -
self

(Tensor) the dividend

other

(Tensor or float) the divisor that may be either a number or a Tensor of the same shape as the dividend

- -

remainder(input, other, out=NULL) -> Tensor

+
+
torch_remainder(self, other)
+
+
+

Arguments

+
self
+

(Tensor) the dividend

+
other
+

(Tensor or float) the divisor that may be either a number or a Tensor of the same shape as the dividend

+
+
+

remainder(input, other, out=NULL) -> Tensor

@@ -214,46 +132,45 @@ numbers. The remainder has the same sign as the divisor.

When other is a tensor, the shapes of input and other must be broadcastable .

+
-

Examples

-
if (torch_is_installed()) {
-
-torch_remainder(torch_tensor(c(-3., -2, -1, 1, 2, 3)), 2)
-torch_remainder(torch_tensor(c(1., 2, 3, 4, 5)), 1.5)
-}
-#> torch_tensor
-#>  1.0000
-#>  0.5000
-#>  0.0000
-#>  1.0000
-#>  0.5000
-#> [ CPUFloatType{5} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+torch_remainder(torch_tensor(c(-3., -2, -1, 1, 2, 3)), 2)
+torch_remainder(torch_tensor(c(1., 2, 3, 4, 5)), 1.5)
+}
+#> torch_tensor
+#>  1.0000
+#>  0.5000
+#>  0.0000
+#>  1.0000
+#>  0.5000
+#> [ CPUFloatType{5} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_renorm.html b/dev/reference/torch_renorm.html index 9a5f8bc48..bb11d2d01 100644 --- a/dev/reference/torch_renorm.html +++ b/dev/reference/torch_renorm.html @@ -1,79 +1,18 @@ - - - - - - - -Renorm — torch_renorm • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Renorm — torch_renorm • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_renorm(self, p, dim, maxnorm)
- -

Arguments

- - - - - - - - - - - - - - - - - - -
self

(Tensor) the input tensor.

p

(float) the power for the norm computation

dim

(int) the dimension to slice over to get the sub-tensors

maxnorm

(float) the maximum norm to keep each sub-tensor under

- -

Note

+
+
torch_renorm(self, p, dim, maxnorm)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
p
+

(float) the power for the norm computation

+
dim
+

(int) the dimension to slice over to get the sub-tensors

+
maxnorm
+

(float) the maximum norm to keep each sub-tensor under

+
+
+

Note

If the norm of a row is lower than maxnorm, the row is unchanged

-

renorm(input, p, dim, maxnorm, out=NULL) -> Tensor

- +
+
+

renorm(input, p, dim, maxnorm, out=NULL) -> Tensor

Returns a tensor where each sub-tensor of input along dimension dim is normalized such that the p-norm of the sub-tensor is lower than the value maxnorm

+
-

Examples

-
if (torch_is_installed()) {
-x = torch_ones(c(3, 3))
-x[2,]$fill_(2)
-x[3,]$fill_(3)
-x
-torch_renorm(x, 1, 1, 5)
-}
-#> torch_tensor
-#>  1.0000  1.0000  1.0000
-#>  1.6667  1.6667  1.6667
-#>  1.6667  1.6667  1.6667
-#> [ CPUFloatType{3,3} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+x = torch_ones(c(3, 3))
+x[2,]$fill_(2)
+x[3,]$fill_(3)
+x
+torch_renorm(x, 1, 1, 5)
+}
+#> torch_tensor
+#>  1.0000  1.0000  1.0000
+#>  1.6667  1.6667  1.6667
+#>  1.6667  1.6667  1.6667
+#> [ CPUFloatType{3,3} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_repeat_interleave.html b/dev/reference/torch_repeat_interleave.html index 7ce7918fb..e37831713 100644 --- a/dev/reference/torch_repeat_interleave.html +++ b/dev/reference/torch_repeat_interleave.html @@ -1,79 +1,18 @@ - - - - - - - -Repeat_interleave — torch_repeat_interleave • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Repeat_interleave — torch_repeat_interleave • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,83 +111,78 @@

Repeat_interleave

-
torch_repeat_interleave(self, repeats, dim = NULL)
- -

Arguments

- - - - - - - - - - - - - - -
self

(Tensor) the input tensor.

repeats

(Tensor or int) The number of repetitions for each element. repeats is broadcasted to fit the shape of the given axis.

dim

(int, optional) The dimension along which to repeat values. By default, use the flattened input array, and return a flat output array.

- -

repeat_interleave(input, repeats, dim=NULL) -> Tensor

+
+
torch_repeat_interleave(self, repeats, dim = NULL)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
repeats
+

(Tensor or int) The number of repetitions for each element. repeats is broadcasted to fit the shape of the given axis.

+
dim
+

(int, optional) The dimension along which to repeat values. By default, use the flattened input array, and return a flat output array.

+
+
+

repeat_interleave(input, repeats, dim=NULL) -> Tensor

Repeat elements of a tensor.

-

Warning

- +
+
+

Warning

-
This is different from `torch_Tensor.repeat` but similar to `numpy.repeat`.
-
- -

repeat_interleave(repeats) -> Tensor

+
This is different from `torch_Tensor.repeat` but similar to `numpy.repeat`.
+
+
+
+

repeat_interleave(repeats) -> Tensor

If the repeats is tensor([n1, n2, n3, ...]), then the output will be tensor([0, 0, ..., 1, 1, ..., 2, 2, ..., ...]) where 0 appears n1 times, 1 appears n2 times, 2 appears n3 times, etc.

+
-

Examples

-
if (torch_is_installed()) {
-if (FALSE) {
-x = torch_tensor(c(1, 2, 3))
-x$repeat_interleave(2)
-y = torch_tensor(matrix(c(1, 2, 3, 4), ncol = 2, byrow=TRUE))
-torch_repeat_interleave(y, 2)
-torch_repeat_interleave(y, 3, dim=1)
-torch_repeat_interleave(y, torch_tensor(c(1, 2)), dim=1)
-}
-}
-
+
+

Examples

+
if (torch_is_installed()) {
+if (FALSE) {
+x = torch_tensor(c(1, 2, 3))
+x$repeat_interleave(2)
+y = torch_tensor(matrix(c(1, 2, 3, 4), ncol = 2, byrow=TRUE))
+torch_repeat_interleave(y, 2)
+torch_repeat_interleave(y, 3, dim=1)
+torch_repeat_interleave(y, torch_tensor(c(1, 2)), dim=1)
+}
+}
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_reshape.html b/dev/reference/torch_reshape.html index 1a1138bc0..48007b6d5 100644 --- a/dev/reference/torch_reshape.html +++ b/dev/reference/torch_reshape.html @@ -1,79 +1,18 @@ - - - - - - - -Reshape — torch_reshape • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Reshape — torch_reshape • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_reshape(self, shape)
- -

Arguments

- - - - - - - - - - -
self

(Tensor) the tensor to be reshaped

shape

(tuple of ints) the new shape

- -

reshape(input, shape) -> Tensor

+
+
torch_reshape(self, shape)
+
+
+

Arguments

+
self
+

(Tensor) the tensor to be reshaped

+
shape
+

(tuple of ints) the new shape

+
+
+

reshape(input, shape) -> Tensor

@@ -217,47 +135,46 @@ depend on the copying vs. viewing behavior.

See torch_Tensor.view on when it is possible to return a view.

A single dimension may be -1, in which case it's inferred from the remaining dimensions and the number of elements in input.

+
-

Examples

-
if (torch_is_installed()) {
-
-a <- torch_arange(0, 3)
-torch_reshape(a, list(2, 2))
-b <- torch_tensor(matrix(c(0, 1, 2, 3), ncol = 2, byrow=TRUE))
-torch_reshape(b, list(-1))
-}
-#> torch_tensor
-#>  0
-#>  1
-#>  2
-#>  3
-#> [ CPUFloatType{4} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+a <- torch_arange(0, 3)
+torch_reshape(a, list(2, 2))
+b <- torch_tensor(matrix(c(0, 1, 2, 3), ncol = 2, byrow=TRUE))
+torch_reshape(b, list(-1))
+}
+#> torch_tensor
+#>  0
+#>  1
+#>  2
+#>  3
+#> [ CPUFloatType{4} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_result_type.html b/dev/reference/torch_result_type.html index 36370115b..c63ab75ec 100644 --- a/dev/reference/torch_result_type.html +++ b/dev/reference/torch_result_type.html @@ -1,79 +1,18 @@ - - - - - - - -Result_type — torch_result_type • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Result_type — torch_result_type • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,62 +111,57 @@

Result_type

-
torch_result_type(tensor1, tensor2)
- -

Arguments

- - - - - - - - - - -
tensor1

(Tensor or Number) an input tensor or number

tensor2

(Tensor or Number) an input tensor or number

- -

result_type(tensor1, tensor2) -> dtype

+
+
torch_result_type(tensor1, tensor2)
+
+
+

Arguments

+
tensor1
+

(Tensor or Number) an input tensor or number

+
tensor2
+

(Tensor or Number) an input tensor or number

+
+
+

result_type(tensor1, tensor2) -> dtype

Returns the torch_dtype that would result from performing an arithmetic operation on the provided input tensors. See type promotion documentation for more information on the type promotion logic.

+
-

Examples

-
if (torch_is_installed()) {
-
-torch_result_type(tensor1 = torch_tensor(c(1, 2), dtype=torch_int()), tensor2 = 1)
-}
-#> torch_Float
-
+
+

Examples

+
if (torch_is_installed()) {
+
+torch_result_type(tensor1 = torch_tensor(c(1, 2), dtype=torch_int()), tensor2 = 1)
+}
+#> torch_Float
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_rfft.html b/dev/reference/torch_rfft.html deleted file mode 100644 index 942f46fb6..000000000 --- a/dev/reference/torch_rfft.html +++ /dev/null @@ -1,322 +0,0 @@ - - - - - - - - -Rfft — torch_rfft • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - -
- -
-
- - -
-

Rfft

-
- -
torch_rfft(self, signal_ndim, normalized = FALSE, onesided = TRUE)
- -

Arguments

- - - - - - - - - - - - - - - - - - -
self

(Tensor) the input tensor of at least signal_ndim dimensions

signal_ndim

(int) the number of dimensions in each signal. signal_ndim can only be 1, 2 or 3

normalized

(bool, optional) controls whether to return normalized results. Default: FALSE

onesided

(bool, optional) controls whether to return half of results to avoid redundancy. Default: TRUE

- -

Note

- - -
For CUDA tensors, an LRU cache is used for cuFFT plans to speed up
-repeatedly running FFT methods on tensors of same geometry with same
-configuration. See cufft-plan-cache for more details on how to
-monitor and control the cache.
-
- -

rfft(input, signal_ndim, normalized=False, onesided=TRUE) -> Tensor

- - - - -

Real-to-complex Discrete Fourier Transform

-

This method computes the real-to-complex discrete Fourier transform. It is -mathematically equivalent with torch_fft with differences only in -formats of the input and output.

-

This method supports 1D, 2D and 3D real-to-complex transforms, indicated -by signal_ndim. input must be a tensor with at least -signal_ndim dimensions with optionally arbitrary number of leading batch -dimensions. If normalized is set to TRUE, this normalizes the result -by dividing it with \(\sqrt{\prod_{i=1}^K N_i}\) so that the operator is -unitary, where \(N_i\) is the size of signal dimension \(i\).

-

The real-to-complex Fourier transform results follow conjugate symmetry:

-

$$ - X[\omega_1, \dots, \omega_d] = X^*[N_1 - \omega_1, \dots, N_d - \omega_d], -$$ -where the index arithmetic is computed modulus the size of the corresponding -dimension, \(\ ^*\) is the conjugate operator, and -\(d\) = signal_ndim. onesided flag controls whether to avoid -redundancy in the output results. If set to TRUE (default), the output will -not be full complex result of shape \((*, 2)\), where \(*\) is the shape -of input, but instead the last dimension will be halfed as of size -\(\lfloor \frac{N_d}{2} \rfloor + 1\).

-

The inverse of this function is torch_irfft.

-

Warning

- - - -

For CPU tensors, this method is currently only available with MKL. Use -torch_backends.mkl.is_available to check if MKL is installed.

- -

Examples

-
if (torch_is_installed()) { - -x = torch_randn(c(5, 5)) -torch_rfft(x, 2) -torch_rfft(x, 2, onesided=FALSE) -} -
#> torch_tensor -#> (1,.,.) = -#> 9.3451 0.0000 -#> -3.6111 -1.2856 -#> -3.1741 0.6457 -#> -3.1741 -0.6457 -#> -3.6111 1.2856 -#> -#> (2,.,.) = -#> 0.7080 -5.3827 -#> -3.8377 3.3674 -#> -1.1930 -2.8132 -#> -0.3320 1.2334 -#> 4.8354 -5.1235 -#> -#> (3,.,.) = -#> -1.9403 0.5345 -#> -6.7969 0.1849 -#> -4.9812 1.6795 -#> -0.8296 3.4459 -#> -1.4997 -4.3439 -#> -#> (4,.,.) = -#> -1.9403 -0.5345 -#> -1.4997 4.3439 -#> -0.8296 -3.4459 -#> -4.9812 -1.6795 -#> -6.7969 -0.1849 -#> -#> (5,.,.) = -#> 0.7080 5.3827 -#> ... [the output was truncated (use n=-1 to disable)] -#> [ CPUFloatType{5,5,2} ]
-
- -
- - -
- - -
-

Site built with pkgdown 1.6.1.

-
- -
-
- - - - - - - - diff --git a/dev/reference/torch_roll.html b/dev/reference/torch_roll.html index 90cf0752d..181d82249 100644 --- a/dev/reference/torch_roll.html +++ b/dev/reference/torch_roll.html @@ -1,79 +1,18 @@ - - - - - - - -Roll — torch_roll • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Roll — torch_roll • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_roll(self, shifts, dims = list())
- -

Arguments

- - - - - - - - - - - - - - -
self

(Tensor) the input tensor.

shifts

(int or tuple of ints) The number of places by which the elements of the tensor are shifted. If shifts is a tuple, dims must be a tuple of the same size, and each dimension will be rolled by the corresponding value

dims

(int or tuple of ints) Axis along which to roll

- -

roll(input, shifts, dims=NULL) -> Tensor

+
+
torch_roll(self, shifts, dims = list())
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
shifts
+

(int or tuple of ints) The number of places by which the elements of the tensor are shifted. If shifts is a tuple, dims must be a tuple of the same size, and each dimension will be rolled by the corresponding value

+
dims
+

(int or tuple of ints) Axis along which to roll

+
+
+

roll(input, shifts, dims=NULL) -> Tensor

@@ -217,48 +133,47 @@ last position are re-introduced at the first position. If a dimension is not specified, the tensor will be flattened before rolling and then restored to the original shape.

+
-

Examples

-
if (torch_is_installed()) {
-
-x = torch_tensor(c(1, 2, 3, 4, 5, 6, 7, 8))$view(c(4, 2))
-x
-torch_roll(x, 1, 1)
-torch_roll(x, -1, 1)
-torch_roll(x, shifts=list(2, 1), dims=list(1, 2))
-}
-#> torch_tensor
-#>  6  5
-#>  8  7
-#>  2  1
-#>  4  3
-#> [ CPUFloatType{4,2} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+x = torch_tensor(c(1, 2, 3, 4, 5, 6, 7, 8))$view(c(4, 2))
+x
+torch_roll(x, 1, 1)
+torch_roll(x, -1, 1)
+torch_roll(x, shifts=list(2, 1), dims=list(1, 2))
+}
+#> torch_tensor
+#>  6  5
+#>  8  7
+#>  2  1
+#>  4  3
+#> [ CPUFloatType{4,2} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_rot90.html b/dev/reference/torch_rot90.html index bca4810a8..085818006 100644 --- a/dev/reference/torch_rot90.html +++ b/dev/reference/torch_rot90.html @@ -1,79 +1,18 @@ - - - - - - - -Rot90 — torch_rot90 • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Rot90 — torch_rot90 • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_rot90(self, k = 1L, dims = c(0, 1))
- -

Arguments

- - - - - - - - - - - - - - -
self

(Tensor) the input tensor.

k

(int) number of times to rotate

dims

(a list or tuple) axis to rotate

- -

rot90(input, k, dims) -> Tensor

+
+
torch_rot90(self, k = 1L, dims = c(0, 1))
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
k
+

(int) number of times to rotate

+
dims
+

(a list or tuple) axis to rotate

+
+
+

rot90(input, k, dims) -> Tensor

Rotate a n-D tensor by 90 degrees in the plane specified by dims axis. Rotation direction is from the first towards the second axis if k > 0, and from the second towards the first for k < 0.

+
-

Examples

-
if (torch_is_installed()) {
-
-x <- torch_arange(1, 4)$view(c(2, 2))
-x
-torch_rot90(x, 1, c(1, 2))
-x <- torch_arange(1, 8)$view(c(2, 2, 2))
-x
-torch_rot90(x, 1, c(1, 2))
-}
-#> torch_tensor
-#> (1,.,.) = 
-#>   3  4
-#>   7  8
-#> 
-#> (2,.,.) = 
-#>   1  2
-#>   5  6
-#> [ CPUFloatType{2,2,2} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+x <- torch_arange(1, 4)$view(c(2, 2))
+x
+torch_rot90(x, 1, c(1, 2))
+x <- torch_arange(1, 8)$view(c(2, 2, 2))
+x
+torch_rot90(x, 1, c(1, 2))
+}
+#> torch_tensor
+#> (1,.,.) = 
+#>   3  4
+#>   7  8
+#> 
+#> (2,.,.) = 
+#>   1  2
+#>   5  6
+#> [ CPUFloatType{2,2,2} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_round.html b/dev/reference/torch_round.html index 44f481071..e548f2806 100644 --- a/dev/reference/torch_round.html +++ b/dev/reference/torch_round.html @@ -1,79 +1,18 @@ - - - - - - - -Round — torch_round • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Round — torch_round • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_round(self)
- -

Arguments

- - - - - - -
self

(Tensor) the input tensor.

- -

round(input, out=NULL) -> Tensor

+
+
torch_round(self)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
+
+

round(input, out=NULL) -> Tensor

Returns a new tensor with each of the elements of input rounded to the closest integer.

+
-

Examples

-
if (torch_is_installed()) {
-
-a = torch_randn(c(4))
-a
-torch_round(a)
-}
-#> torch_tensor
-#> -0
-#> -1
-#> -1
-#> -1
-#> [ CPUFloatType{4} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+a = torch_randn(c(4))
+a
+torch_round(a)
+}
+#> torch_tensor
+#>  1
+#> -0
+#>  0
+#> -1
+#> [ CPUFloatType{4} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_rrelu_.html b/dev/reference/torch_rrelu_.html index 12930fcf0..316ceca25 100644 --- a/dev/reference/torch_rrelu_.html +++ b/dev/reference/torch_rrelu_.html @@ -1,79 +1,18 @@ - - - - - - - -Rrelu_ — torch_rrelu_ • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Rrelu_ — torch_rrelu_ • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_rrelu_(
-  self,
-  lower = 0.125,
-  upper = 0.333333,
-  training = FALSE,
-  generator = NULL
-)
- -

Arguments

- - - - - - - - - - - - - - - - - - - - - - -
self

the input tensor

lower

lower bound of the uniform distribution. Default: 1/8

upper

upper bound of the uniform distribution. Default: 1/3

training

bool wether it's a training pass. DEfault: FALSE

generator

random number generator

- -

rrelu_(input, lower=1./8, upper=1./3, training=False) -> Tensor

+
+
torch_rrelu_(
+  self,
+  lower = 0.125,
+  upper = 0.333333,
+  training = FALSE,
+  generator = NULL
+)
+
+
+

Arguments

+
self
+

the input tensor

+
lower
+

lower bound of the uniform distribution. Default: 1/8

+
upper
+

upper bound of the uniform distribution. Default: 1/3

+
training
+

bool wether it's a training pass. DEfault: FALSE

+
generator
+

random number generator

+
+
+

rrelu_(input, lower=1./8, upper=1./3, training=False) -> Tensor

In-place version of torch_rrelu.

+
+
-
- +
- - + + diff --git a/dev/reference/torch_rsqrt.html b/dev/reference/torch_rsqrt.html index 5f5cbed9b..28736cda5 100644 --- a/dev/reference/torch_rsqrt.html +++ b/dev/reference/torch_rsqrt.html @@ -1,79 +1,18 @@ - - - - - - - -Rsqrt — torch_rsqrt • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Rsqrt — torch_rsqrt • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_rsqrt(self)
- -

Arguments

- - - - - - -
self

(Tensor) the input tensor.

- -

rsqrt(input, out=NULL) -> Tensor

+
+
torch_rsqrt(self)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
+
+

rsqrt(input, out=NULL) -> Tensor

@@ -210,46 +130,45 @@ the elements of input.

$$ \mbox{out}_{i} = \frac{1}{\sqrt{\mbox{input}_{i}}} $$

+
-

Examples

-
if (torch_is_installed()) {
-
-a = torch_randn(c(4))
-a
-torch_rsqrt(a)
-}
-#> torch_tensor
-#>     nan
-#>  2.4017
-#>     nan
-#>  1.3152
-#> [ CPUFloatType{4} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+a = torch_randn(c(4))
+a
+torch_rsqrt(a)
+}
+#> torch_tensor
+#>     nan
+#>     nan
+#>  1.4510
+#>  0.7661
+#> [ CPUFloatType{4} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_save.html b/dev/reference/torch_save.html index 80569f161..448dfb14a 100644 --- a/dev/reference/torch_save.html +++ b/dev/reference/torch_save.html @@ -1,80 +1,19 @@ - - - - - - - -Saves an object to a disk file. — torch_save • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Saves an object to a disk file. — torch_save • torch - - - - - - + + - - -
-
- -
- -
+
@@ -191,55 +113,46 @@ term storage." /> term storage.

-
torch_save(obj, path, ...)
- -

Arguments

- - - - - - - - - - - - - - -
obj

the saved object

path

a connection or the name of the file to save.

...

not currently used.

- -

See also

- -

Other torch_save: -torch_load()

+
+
torch_save(obj, path, ...)
+
+ +
+

Arguments

+
obj
+

the saved object

+
path
+

a connection or the name of the file to save.

+
...
+

not currently used.

+
+
+

See also

+

Other torch_save: +torch_load()

+
+
-
- +
- - + + diff --git a/dev/reference/torch_scalar_tensor.html b/dev/reference/torch_scalar_tensor.html index 8fe034a5d..9a5bac52d 100644 --- a/dev/reference/torch_scalar_tensor.html +++ b/dev/reference/torch_scalar_tensor.html @@ -1,79 +1,18 @@ - - - - - - - -Scalar tensor — torch_scalar_tensor • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Scalar tensor — torch_scalar_tensor • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,55 +111,43 @@

Creates a singleton dimension tensor.

-
torch_scalar_tensor(value, dtype = NULL, device = NULL, requires_grad = FALSE)
- -

Arguments

- - - - - - - - - - - - - - - - - - -
value

the value you want to use

dtype

(torch.dtype, optional) the desired data type of returned tensor. Default: if NULL, uses a global default (see torch_set_default_tensor_type).

device

(torch.device, optional) the desired device of returned tensor. Default: if NULL, uses the current device for the default tensor type (see torch_set_default_tensor_type). device will be the CPU for CPU tensor types and the current CUDA device for CUDA tensor types.

requires_grad

(bool, optional) If autograd should record operations on the returned tensor. Default: FALSE.

+
+
torch_scalar_tensor(value, dtype = NULL, device = NULL, requires_grad = FALSE)
+
+
+

Arguments

+
value
+

the value you want to use

+
dtype
+

(torch.dtype, optional) the desired data type of returned tensor. Default: if NULL, uses a global default (see torch_set_default_tensor_type).

+
device
+

(torch.device, optional) the desired device of returned tensor. Default: if NULL, uses the current device for the default tensor type (see torch_set_default_tensor_type). device will be the CPU for CPU tensor types and the current CUDA device for CUDA tensor types.

+
requires_grad
+

(bool, optional) If autograd should record operations on the returned tensor. Default: FALSE.

+
+
-
- +
- - + + diff --git a/dev/reference/torch_searchsorted.html b/dev/reference/torch_searchsorted.html index 15428a5ca..d8c600552 100644 --- a/dev/reference/torch_searchsorted.html +++ b/dev/reference/torch_searchsorted.html @@ -1,79 +1,18 @@ - - - - - - - -Searchsorted — torch_searchsorted • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Searchsorted — torch_searchsorted • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,39 +111,31 @@

Searchsorted

-
torch_searchsorted(sorted_sequence, self, out_int32 = FALSE, right = FALSE)
+
+
torch_searchsorted(sorted_sequence, self, out_int32 = FALSE, right = FALSE)
+
-

Arguments

- - - - - - - - - - - - - - - - - - -
sorted_sequence

(Tensor) N-D or 1-D tensor, containing monotonically increasing -sequence on the innermost dimension.

self

(Tensor or Scalar) N-D tensor or a Scalar containing the search value(s).

out_int32

(bool, optional) – indicate the output data type. torch_int32() -if True, torch_int64() otherwise. Default value is FALSE, i.e. default output -data type is torch_int64().

right

(bool, optional) – if False, return the first suitable location +

+

Arguments

+
sorted_sequence
+

(Tensor) N-D or 1-D tensor, containing monotonically increasing +sequence on the innermost dimension.

+
self
+

(Tensor or Scalar) N-D tensor or a Scalar containing the search value(s).

+
out_int32
+

(bool, optional) – indicate the output data type. torch_int32() +if True, torch_int64() otherwise. Default value is FALSE, i.e. default output +data type is torch_int64().

+
right
+

(bool, optional) – if False, return the first suitable location that is found. If True, return the last such index. If no suitable index found, return 0 for non-numerical value (eg. nan, inf) or the size of boundaries (one pass the last index). In other words, if False, gets the lower bound index for each value in input from boundaries. If True, gets the upper bound index -instead. Default value is False.

- -

searchsorted(sorted_sequence, values, *, out_int32=FALSE, right=FALSE, out=None) -> Tensor

- +instead. Default value is False.

+
+
+

searchsorted(sorted_sequence, values, *, out_int32=FALSE, right=FALSE, out=None) -> Tensor

@@ -230,50 +144,49 @@ corresponding values in values were inserted before the indices, th corresponding innermost dimension within sorted_sequence would be preserved. Return a new tensor with the same size as values. If right is FALSE (default), then the left boundary of sorted_sequence is closed.

+
-

Examples

-
if (torch_is_installed()) {
-
-sorted_sequence <- torch_tensor(rbind(c(1, 3, 5, 7, 9), c(2, 4, 6, 8, 10)))
-sorted_sequence
-values <- torch_tensor(rbind(c(3, 6, 9), c(3, 6, 9)))
-values
-torch_searchsorted(sorted_sequence, values)
-torch_searchsorted(sorted_sequence, values, right=TRUE)
-sorted_sequence_1d <- torch_tensor(c(1, 3, 5, 7, 9))
-sorted_sequence_1d
-torch_searchsorted(sorted_sequence_1d, values)
-}
-#> torch_tensor
-#>  1  3  4
-#>  1  3  4
-#> [ CPULongType{2,3} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+sorted_sequence <- torch_tensor(rbind(c(1, 3, 5, 7, 9), c(2, 4, 6, 8, 10)))
+sorted_sequence
+values <- torch_tensor(rbind(c(3, 6, 9), c(3, 6, 9)))
+values
+torch_searchsorted(sorted_sequence, values)
+torch_searchsorted(sorted_sequence, values, right=TRUE)
+sorted_sequence_1d <- torch_tensor(c(1, 3, 5, 7, 9))
+sorted_sequence_1d
+torch_searchsorted(sorted_sequence_1d, values)
+}
+#> torch_tensor
+#>  1  3  4
+#>  1  3  4
+#> [ CPULongType{2,3} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_selu.html b/dev/reference/torch_selu.html index 9a0ebfa0b..d7fe86bb9 100644 --- a/dev/reference/torch_selu.html +++ b/dev/reference/torch_selu.html @@ -1,79 +1,18 @@ - - - - - - - -Selu — torch_selu • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Selu — torch_selu • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,49 +111,44 @@

Selu

-
torch_selu(self)
- -

Arguments

- - - - - - -
self

the input tensor

- -

selu(input) -> Tensor

+
+
torch_selu(self)
+
+
+

Arguments

+
self
+

the input tensor

+
+
+

selu(input) -> Tensor

Computes the selu transformation.

+
+
-
- +
- - + + diff --git a/dev/reference/torch_selu_.html b/dev/reference/torch_selu_.html index 035fdadac..7c090fcdf 100644 --- a/dev/reference/torch_selu_.html +++ b/dev/reference/torch_selu_.html @@ -1,79 +1,18 @@ - - - - - - - -Selu_ — torch_selu_ • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Selu_ — torch_selu_ • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_selu_(self)
- -

Arguments

- - - - - - -
self

the input tensor

- -

selu_(input) -> Tensor

+
+
torch_selu_(self)
+
+
+

Arguments

+
self
+

the input tensor

+
+
+

selu_(input) -> Tensor

-

In-place version of torch_selu().

+

In-place version of torch_selu().

+
+
-
- +
- - + + diff --git a/dev/reference/torch_sgn.html b/dev/reference/torch_sgn.html index 256058e2f..689c77e82 100644 --- a/dev/reference/torch_sgn.html +++ b/dev/reference/torch_sgn.html @@ -1,79 +1,18 @@ - - - - - - - -Sgn — torch_sgn • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Sgn — torch_sgn • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_sgn(self)
- -

Arguments

- - - - - - -
self

(Tensor) the input tensor.

- -

sgn(input, *, out=None) -> Tensor

+
+
torch_sgn(self)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
+
+

sgn(input, *, out=None) -> Tensor

For complex tensors, this function returns a new tensor whose elemants have the same angle as that of the elements of input and absolute value 1. For a non-complex tensor, this function -returns the signs of the elements of input (see torch_sign).

+returns the signs of the elements of input (see torch_sign).

\(\mbox{out}_{i} = 0\), if \(|{\mbox{{input}}_i}| == 0\) \(\mbox{out}_{i} = \frac{{\mbox{{input}}_i}}{|{\mbox{{input}}_i}|}\), otherwise

+
-

Examples

-
if (torch_is_installed()) {
-if (FALSE) {
-x <- torch_tensor(c(3+4i, 7-24i, 0, 1+2i))
-x$sgn()
-torch_sgn(x)
-}
-}
-
+
+

Examples

+
if (torch_is_installed()) {
+if (FALSE) {
+x <- torch_tensor(c(3+4i, 7-24i, 0, 1+2i))
+x$sgn()
+torch_sgn(x)
+}
+}
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_sigmoid.html b/dev/reference/torch_sigmoid.html index 5e3dcb894..fc2cde335 100644 --- a/dev/reference/torch_sigmoid.html +++ b/dev/reference/torch_sigmoid.html @@ -1,79 +1,18 @@ - - - - - - - -Sigmoid — torch_sigmoid • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Sigmoid — torch_sigmoid • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_sigmoid(self)
- -

Arguments

- - - - - - -
self

(Tensor) the input tensor.

- -

sigmoid(input, out=NULL) -> Tensor

+
+
torch_sigmoid(self)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
+
+

sigmoid(input, out=NULL) -> Tensor

@@ -209,46 +129,45 @@

$$ \mbox{out}_{i} = \frac{1}{1 + e^{-\mbox{input}_{i}}} $$

+
-

Examples

-
if (torch_is_installed()) {
-
-a = torch_randn(c(4))
-a
-torch_sigmoid(a)
-}
-#> torch_tensor
-#>  0.1341
-#>  0.3821
-#>  0.4059
-#>  0.3504
-#> [ CPUFloatType{4} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+a = torch_randn(c(4))
+a
+torch_sigmoid(a)
+}
+#> torch_tensor
+#>  0.6978
+#>  0.3755
+#>  0.8494
+#>  0.5212
+#> [ CPUFloatType{4} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_sign.html b/dev/reference/torch_sign.html index 121fa5713..217b44a71 100644 --- a/dev/reference/torch_sign.html +++ b/dev/reference/torch_sign.html @@ -1,79 +1,18 @@ - - - - - - - -Sign — torch_sign • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Sign — torch_sign • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_sign(self)
- -

Arguments

- - - - - - -
self

(Tensor) the input tensor.

- -

sign(input, out=NULL) -> Tensor

+
+
torch_sign(self)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
+
+

sign(input, out=NULL) -> Tensor

@@ -209,46 +129,45 @@

$$ \mbox{out}_{i} = \mbox{sgn}(\mbox{input}_{i}) $$

+
-

Examples

-
if (torch_is_installed()) {
-
-a = torch_tensor(c(0.7, -1.2, 0., 2.3))
-a
-torch_sign(a)
-}
-#> torch_tensor
-#>  1
-#> -1
-#>  0
-#>  1
-#> [ CPUFloatType{4} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+a = torch_tensor(c(0.7, -1.2, 0., 2.3))
+a
+torch_sign(a)
+}
+#> torch_tensor
+#>  1
+#> -1
+#>  0
+#>  1
+#> [ CPUFloatType{4} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_signbit.html b/dev/reference/torch_signbit.html index b4ce59cf5..c229cec5a 100644 --- a/dev/reference/torch_signbit.html +++ b/dev/reference/torch_signbit.html @@ -1,79 +1,18 @@ - - - - - - - -Signbit — torch_signbit • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Signbit — torch_signbit • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_signbit(self)
- -

Arguments

- - - - - - -
self

(Tensor) the input tensor.

- -

signbit(input, *, out=None) -> Tensor

+
+
torch_signbit(self)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
+
+

signbit(input, *, out=None) -> Tensor

Tests if each element of input has its sign bit set (is less than zero) or not.

+
-

Examples

-
if (torch_is_installed()) {
-
-a <- torch_tensor(c(0.7, -1.2, 0., 2.3))
-torch_signbit(a)
-}
-#> torch_tensor
-#>  0
-#>  1
-#>  0
-#>  0
-#> [ CPUBoolType{4} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+a <- torch_tensor(c(0.7, -1.2, 0., 2.3))
+torch_signbit(a)
+}
+#> torch_tensor
+#>  0
+#>  1
+#>  0
+#>  0
+#> [ CPUBoolType{4} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_sin.html b/dev/reference/torch_sin.html index a7ec3c0fe..3f77b48a3 100644 --- a/dev/reference/torch_sin.html +++ b/dev/reference/torch_sin.html @@ -1,79 +1,18 @@ - - - - - - - -Sin — torch_sin • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Sin — torch_sin • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_sin(self)
- -

Arguments

- - - - - - -
self

(Tensor) the input tensor.

- -

sin(input, out=NULL) -> Tensor

+
+
torch_sin(self)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
+
+

sin(input, out=NULL) -> Tensor

@@ -209,46 +129,45 @@

$$ \mbox{out}_{i} = \sin(\mbox{input}_{i}) $$

+
-

Examples

-
if (torch_is_installed()) {
-
-a = torch_randn(c(4))
-a
-torch_sin(a)
-}
-#> torch_tensor
-#> -0.3901
-#>  0.8413
-#>  0.8825
-#>  0.8864
-#> [ CPUFloatType{4} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+a = torch_randn(c(4))
+a
+torch_sin(a)
+}
+#> torch_tensor
+#> -0.0434
+#>  0.1401
+#> -0.1475
+#>  0.2083
+#> [ CPUFloatType{4} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_sinh.html b/dev/reference/torch_sinh.html index 96c7353d0..301053d46 100644 --- a/dev/reference/torch_sinh.html +++ b/dev/reference/torch_sinh.html @@ -1,79 +1,18 @@ - - - - - - - -Sinh — torch_sinh • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Sinh — torch_sinh • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_sinh(self)
- -

Arguments

- - - - - - -
self

(Tensor) the input tensor.

- -

sinh(input, out=NULL) -> Tensor

+
+
torch_sinh(self)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
+
+

sinh(input, out=NULL) -> Tensor

@@ -210,46 +130,45 @@

$$ \mbox{out}_{i} = \sinh(\mbox{input}_{i}) $$

+
-

Examples

-
if (torch_is_installed()) {
-
-a = torch_randn(c(4))
-a
-torch_sinh(a)
-}
-#> torch_tensor
-#> -0.7701
-#>  3.5733
-#>  0.1716
-#> -0.7064
-#> [ CPUFloatType{4} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+a = torch_randn(c(4))
+a
+torch_sinh(a)
+}
+#> torch_tensor
+#>  0.0107
+#>  0.8594
+#> -2.5189
+#>  0.1451
+#> [ CPUFloatType{4} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_slogdet.html b/dev/reference/torch_slogdet.html index 09b12000f..85d7808bd 100644 --- a/dev/reference/torch_slogdet.html +++ b/dev/reference/torch_slogdet.html @@ -1,79 +1,18 @@ - - - - - - - -Slogdet — torch_slogdet • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Slogdet — torch_slogdet • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_slogdet(self)
- -

Arguments

- - - - - - -
self

(Tensor) the input tensor of size (*, n, n) where * is zero or more batch dimensions.

- -

Note

+
+
torch_slogdet(self)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor of size (*, n, n) where * is zero or more batch dimensions.

+
+
+

Note

-
If `input` has zero determinant, this returns `(0, -inf)`.
-
+
If `input` has zero determinant, this returns `(0, -inf)`.
+
-
Backward through `slogdet` internally uses SVD results when `input`
+
Backward through `slogdet` internally uses SVD results when `input`
 is not invertible. In this case, double backward through `slogdet`
 will be unstable in when `input` doesn't have distinct singular values.
 See `~torch.svd` for details.
-
- -

slogdet(input) -> (Tensor, Tensor)

+
+
+
+

slogdet(input) -> (Tensor, Tensor)

Calculates the sign and log absolute value of the determinant(s) of a square matrix or batches of square matrices.

+
-

Examples

-
if (torch_is_installed()) {
-
-A = torch_randn(c(3, 3))
-A
-torch_det(A)
-torch_logdet(A)
-torch_slogdet(A)
-}
-#> [[1]]
-#> torch_tensor
-#> -1
-#> [ CPUFloatType{} ]
-#> 
-#> [[2]]
-#> torch_tensor
-#> -1.39026
-#> [ CPUFloatType{} ]
-#> 
-
+
+

Examples

+
if (torch_is_installed()) {
+
+A = torch_randn(c(3, 3))
+A
+torch_det(A)
+torch_logdet(A)
+torch_slogdet(A)
+}
+#> [[1]]
+#> torch_tensor
+#> 1
+#> [ CPUFloatType{} ]
+#> 
+#> [[2]]
+#> torch_tensor
+#> 1.07786
+#> [ CPUFloatType{} ]
+#> 
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_solve.html b/dev/reference/torch_solve.html index 5ea4bb20c..92a54c579 100644 --- a/dev/reference/torch_solve.html +++ b/dev/reference/torch_solve.html @@ -1,79 +1,18 @@ - - - - - - - -Solve — torch_solve • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Solve — torch_solve • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_solve(self, A)
- -

Arguments

- - - - - - - - - - -
self

(Tensor) input matrix \(B\) of size \((*, m, k)\) , where \(*\) is zero or more batch dimensions.

A

(Tensor) input square matrix of size \((*, m, m)\), where \(*\) is zero or more batch dimensions.

- -

Note

+
+
torch_solve(self, A)
+
+
+

Arguments

+
self
+

(Tensor) input matrix \(B\) of size \((*, m, k)\) , where \(*\) is zero or more batch dimensions.

+
A
+

(Tensor) input square matrix of size \((*, m, m)\), where \(*\) is zero or more batch dimensions.

+
+
+

Note

-
Irrespective of the original strides, the returned matrices
+
Irrespective of the original strides, the returned matrices
 `solution` and `LU` will be transposed, i.e. with strides like
 `B$contiguous()$transpose(-1, -2)$stride()` and
 `A$contiguous()$transpose(-1, -2)$stride()` respectively.
-
- -

solve(input, A) -> (Tensor, Tensor)

+
+
+
+

solve(input, A) -> (Tensor, Tensor)

@@ -225,59 +144,58 @@ A, in order as a namedtuple solution, LU.

torch_solve(B, A) can take in 2D inputs B, A or inputs that are batches of 2D matrices. If the inputs are batches, then returns batched outputs solution, LU.

+
-

Examples

-
if (torch_is_installed()) {
-
-A = torch_tensor(rbind(c(6.80, -2.11,  5.66,  5.97,  8.23),
-                      c(-6.05, -3.30,  5.36, -4.44,  1.08),
-                      c(-0.45,  2.58, -2.70,  0.27,  9.04),
-                      c(8.32,  2.71,  4.35,  -7.17,  2.14),
-                      c(-9.67, -5.14, -7.26,  6.08, -6.87)))$t()
-B = torch_tensor(rbind(c(4.02,  6.19, -8.22, -7.57, -3.03),
-                      c(-1.56,  4.00, -8.67,  1.75,  2.86),
-                      c(9.81, -4.09, -4.57, -8.61,  8.99)))$t()
-out = torch_solve(B, A)
-X = out[[1]]
-LU = out[[2]]
-torch_dist(B, torch_mm(A, X))
-# Batched solver example
-A = torch_randn(c(2, 3, 1, 4, 4))
-B = torch_randn(c(2, 3, 1, 4, 6))
-out = torch_solve(B, A)
-X = out[[1]]
-LU = out[[2]]
-torch_dist(B, A$matmul(X))
-}
-#> torch_tensor
-#> 2.55755e-06
-#> [ CPUFloatType{} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+A = torch_tensor(rbind(c(6.80, -2.11,  5.66,  5.97,  8.23),
+                      c(-6.05, -3.30,  5.36, -4.44,  1.08),
+                      c(-0.45,  2.58, -2.70,  0.27,  9.04),
+                      c(8.32,  2.71,  4.35,  -7.17,  2.14),
+                      c(-9.67, -5.14, -7.26,  6.08, -6.87)))$t()
+B = torch_tensor(rbind(c(4.02,  6.19, -8.22, -7.57, -3.03),
+                      c(-1.56,  4.00, -8.67,  1.75,  2.86),
+                      c(9.81, -4.09, -4.57, -8.61,  8.99)))$t()
+out = torch_solve(B, A)
+X = out[[1]]
+LU = out[[2]]
+torch_dist(B, torch_mm(A, X))
+# Batched solver example
+A = torch_randn(c(2, 3, 1, 4, 4))
+B = torch_randn(c(2, 3, 1, 4, 6))
+out = torch_solve(B, A)
+X = out[[1]]
+LU = out[[2]]
+torch_dist(B, A$matmul(X))
+}
+#> torch_tensor
+#> 2.77394e-05
+#> [ CPUFloatType{} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_sort.html b/dev/reference/torch_sort.html index 01d0c8721..117ea63b9 100644 --- a/dev/reference/torch_sort.html +++ b/dev/reference/torch_sort.html @@ -1,79 +1,18 @@ - - - - - - - -Sort — torch_sort • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Sort — torch_sort • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_sort(self, dim = -1L, descending = FALSE, stable)
- -

Arguments

- - - - - - - - - - - - - - - - - - -
self

(Tensor) the input tensor.

dim

(int, optional) the dimension to sort along

descending

(bool, optional) controls the sorting order (ascending or descending)

stable

(bool, optional) – makes the sorting routine stable, which guarantees -that the order of equivalent elements is preserved.

- -

sort(input, dim=-1, descending=FALSE) -> (Tensor, LongTensor)

+
+
torch_sort(self, dim = -1L, descending = FALSE, stable)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
dim
+

(int, optional) the dimension to sort along

+
descending
+

(bool, optional) controls the sorting order (ascending or descending)

+
stable
+

(bool, optional) – makes the sorting routine stable, which guarantees +that the order of equivalent elements is preserved.

+
+
+

sort(input, dim=-1, descending=FALSE) -> (Tensor, LongTensor)

@@ -226,56 +140,55 @@ order by value.

A namedtuple of (values, indices) is returned, where the values are the sorted values and indices are the indices of the elements in the original input tensor.

+
-

Examples

-
if (torch_is_installed()) {
-
-x = torch_randn(c(3, 4))
-out = torch_sort(x)
-out
-out = torch_sort(x, 1)
-out
-}
-#> [[1]]
-#> torch_tensor
-#> -1.7070 -0.4527 -0.8545  0.1054
-#> -0.6119  0.3404  0.3345  0.6154
-#>  1.2045  1.8430  1.2498  0.6608
-#> [ CPUFloatType{3,4} ]
-#> 
-#> [[2]]
-#> torch_tensor
-#>  1  2  2  0
-#>  2  1  1  1
-#>  0  0  0  2
-#> [ CPULongType{3,4} ]
-#> 
-
+
+

Examples

+
if (torch_is_installed()) {
+
+x = torch_randn(c(3, 4))
+out = torch_sort(x)
+out
+out = torch_sort(x, 1)
+out
+}
+#> [[1]]
+#> torch_tensor
+#> -1.0790 -0.9029 -0.3870 -1.4936
+#> -0.3612 -0.7831  0.1737  0.0345
+#>  0.2319  0.2723  0.9356  1.6049
+#> [ CPUFloatType{3,4} ]
+#> 
+#> [[2]]
+#> torch_tensor
+#>  0  0  2  0
+#>  2  1  0  1
+#>  1  2  1  2
+#> [ CPULongType{3,4} ]
+#> 
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_sparse_coo_tensor.html b/dev/reference/torch_sparse_coo_tensor.html index f3d3d5c29..ad44596e9 100644 --- a/dev/reference/torch_sparse_coo_tensor.html +++ b/dev/reference/torch_sparse_coo_tensor.html @@ -1,79 +1,18 @@ - - - - - - - -Sparse_coo_tensor — torch_sparse_coo_tensor • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Sparse_coo_tensor — torch_sparse_coo_tensor • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,46 +111,34 @@

Sparse_coo_tensor

-
torch_sparse_coo_tensor(
-  indices,
-  values,
-  size = NULL,
-  dtype = NULL,
-  device = NULL,
-  requires_grad = FALSE
-)
- -

Arguments

- - - - - - - - - - - - - - - - - - - - - - - - - - -
indices

(array_like) Initial data for the tensor. Can be a list, tuple, NumPy ndarray, scalar, and other types. Will be cast to a torch_LongTensor internally. The indices are the coordinates of the non-zero values in the matrix, and thus should be two-dimensional where the first dimension is the number of tensor dimensions and the second dimension is the number of non-zero values.

values

(array_like) Initial values for the tensor. Can be a list, tuple, NumPy ndarray, scalar, and other types.

size

(list, tuple, or torch.Size, optional) Size of the sparse tensor. If not provided the size will be inferred as the minimum size big enough to hold all non-zero elements.

dtype

(torch.dtype, optional) the desired data type of returned tensor. Default: if NULL, infers data type from values.

device

(torch.device, optional) the desired device of returned tensor. Default: if NULL, uses the current device for the default tensor type (see torch_set_default_tensor_type). device will be the CPU for CPU tensor types and the current CUDA device for CUDA tensor types.

requires_grad

(bool, optional) If autograd should record operations on the returned tensor. Default: FALSE.

- -

sparse_coo_tensor(indices, values, size=NULL, dtype=NULL, device=NULL, requires_grad=False) -> Tensor

+
+
torch_sparse_coo_tensor(
+  indices,
+  values,
+  size = NULL,
+  dtype = NULL,
+  device = NULL,
+  requires_grad = FALSE
+)
+
+
+

Arguments

+
indices
+

(array_like) Initial data for the tensor. Can be a list, tuple, NumPy ndarray, scalar, and other types. Will be cast to a torch_LongTensor internally. The indices are the coordinates of the non-zero values in the matrix, and thus should be two-dimensional where the first dimension is the number of tensor dimensions and the second dimension is the number of non-zero values.

+
values
+

(array_like) Initial values for the tensor. Can be a list, tuple, NumPy ndarray, scalar, and other types.

+
size
+

(list, tuple, or torch.Size, optional) Size of the sparse tensor. If not provided the size will be inferred as the minimum size big enough to hold all non-zero elements.

+
dtype
+

(torch.dtype, optional) the desired data type of returned tensor. Default: if NULL, infers data type from values.

+
device
+

(torch.device, optional) the desired device of returned tensor. Default: if NULL, uses the current device for the default tensor type (see torch_set_default_tensor_type). device will be the CPU for CPU tensor types and the current CUDA device for CUDA tensor types.

+
requires_grad
+

(bool, optional) If autograd should record operations on the returned tensor. Default: FALSE.

+
+
+

sparse_coo_tensor(indices, values, size=NULL, dtype=NULL, device=NULL, requires_grad=False) -> Tensor

@@ -236,53 +146,52 @@ with the given values. A sparse tensor can be uncoalesced, in that case, there are duplicate coordinates in the indices, and the value at that index is the sum of all duplicate value entries: torch_sparse_.

+
-

Examples

-
if (torch_is_installed()) {
-
-i = torch_tensor(matrix(c(1, 2, 2, 3, 1, 3), ncol = 3, byrow = TRUE), dtype=torch_int64())
-v = torch_tensor(c(3, 4, 5), dtype=torch_float32())
-torch_sparse_coo_tensor(i, v)
-torch_sparse_coo_tensor(i, v, c(2, 4))
-
-# create empty sparse tensors
-S = torch_sparse_coo_tensor(
-  torch_empty(c(1, 0), dtype = torch_int64()), 
-  torch_tensor(numeric(), dtype = torch_float32()), 
-  c(1)
-)
-S = torch_sparse_coo_tensor(
-  torch_empty(c(1, 0), dtype = torch_int64()), 
-  torch_empty(c(0, 2)), 
-  c(1, 2)
-)
-}
-
+
+

Examples

+
if (torch_is_installed()) {
+
+i = torch_tensor(matrix(c(1, 2, 2, 3, 1, 3), ncol = 3, byrow = TRUE), dtype=torch_int64())
+v = torch_tensor(c(3, 4, 5), dtype=torch_float32())
+torch_sparse_coo_tensor(i, v)
+torch_sparse_coo_tensor(i, v, c(2, 4))
+
+# create empty sparse tensors
+S = torch_sparse_coo_tensor(
+  torch_empty(c(1, 0), dtype = torch_int64()), 
+  torch_tensor(numeric(), dtype = torch_float32()), 
+  c(1)
+)
+S = torch_sparse_coo_tensor(
+  torch_empty(c(1, 0), dtype = torch_int64()), 
+  torch_empty(c(0, 2)), 
+  c(1, 2)
+)
+}
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_split.html b/dev/reference/torch_split.html index 8756d01e1..8bd091603 100644 --- a/dev/reference/torch_split.html +++ b/dev/reference/torch_split.html @@ -1,79 +1,18 @@ - - - - - - - -Split — torch_split • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Split — torch_split • torch - - - - - - + + - - -
-
- -
- -
+
@@ -189,28 +111,22 @@

Splits the tensor into chunks. Each chunk is a view of the original tensor.

-
torch_split(self, split_size, dim = 1L)
- -

Arguments

- - - - - - - - - - - - - - -
self

(Tensor) tensor to split.

split_size

(int) size of a single chunk or -list of sizes for each chunk

dim

(int) dimension along which to split the tensor.

- -

Details

+
+
torch_split(self, split_size, dim = 1L)
+
+
+

Arguments

+
self
+

(Tensor) tensor to split.

+
split_size
+

(int) size of a single chunk or +list of sizes for each chunk

+
dim
+

(int) dimension along which to split the tensor.

+
+
+

Details

If split_size is an integer type, then tensor will be split into equally sized chunks (if possible). Last chunk will be smaller if the tensor size along the given dimension dim is not divisible by @@ -218,32 +134,29 @@ the tensor size along the given dimension dim is not divisible by

If split_size is a list, then tensor will be split into length(split_size) chunks with sizes in dim according to split_size_or_sections.

+
+
-
- +
- - + + diff --git a/dev/reference/torch_sqrt.html b/dev/reference/torch_sqrt.html index 7834341eb..b66c7cb2a 100644 --- a/dev/reference/torch_sqrt.html +++ b/dev/reference/torch_sqrt.html @@ -1,79 +1,18 @@ - - - - - - - -Sqrt — torch_sqrt • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Sqrt — torch_sqrt • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_sqrt(self)
- -

Arguments

- - - - - - -
self

(Tensor) the input tensor.

- -

sqrt(input, out=NULL) -> Tensor

+
+
torch_sqrt(self)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
+
+

sqrt(input, out=NULL) -> Tensor

@@ -209,46 +129,45 @@

$$ \mbox{out}_{i} = \sqrt{\mbox{input}_{i}} $$

+
-

Examples

-
if (torch_is_installed()) {
-
-a = torch_randn(c(4))
-a
-torch_sqrt(a)
-}
-#> torch_tensor
-#>     nan
-#>     nan
-#>     nan
-#>  0.8274
-#> [ CPUFloatType{4} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+a = torch_randn(c(4))
+a
+torch_sqrt(a)
+}
+#> torch_tensor
+#>  0.5666
+#>  0.8515
+#>     nan
+#>  1.1684
+#> [ CPUFloatType{4} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_square.html b/dev/reference/torch_square.html index 6994c31e1..9dce6e3b6 100644 --- a/dev/reference/torch_square.html +++ b/dev/reference/torch_square.html @@ -1,79 +1,18 @@ - - - - - - - -Square — torch_square • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Square — torch_square • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_square(self)
- -

Arguments

- - - - - - -
self

(Tensor) the input tensor.

- -

square(input, out=NULL) -> Tensor

+
+
torch_square(self)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
+
+

square(input, out=NULL) -> Tensor

Returns a new tensor with the square of the elements of input.

+
-

Examples

-
if (torch_is_installed()) {
-
-a = torch_randn(c(4))
-a
-torch_square(a)
-}
-#> torch_tensor
-#>  1.6439
-#>  1.9595
-#>  0.4154
-#>  0.1860
-#> [ CPUFloatType{4} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+a = torch_randn(c(4))
+a
+torch_square(a)
+}
+#> torch_tensor
+#>  1.2311
+#>  0.2380
+#>  0.1663
+#>  2.7731
+#> [ CPUFloatType{4} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_squeeze.html b/dev/reference/torch_squeeze.html index c825ad511..5580b8374 100644 --- a/dev/reference/torch_squeeze.html +++ b/dev/reference/torch_squeeze.html @@ -1,79 +1,18 @@ - - - - - - - -Squeeze — torch_squeeze • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Squeeze — torch_squeeze • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_squeeze(self, dim)
- -

Arguments

- - - - - - - - - - -
self

(Tensor) the input tensor.

dim

(int, optional) if given, the input will be squeezed only in this dimension

- -

Note

+
+
torch_squeeze(self, dim)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
dim
+

(int, optional) if given, the input will be squeezed only in this dimension

+
+
+

Note

The returned tensor shares the storage with the input tensor, so changing the contents of one will change the contents of the other.

-

squeeze(input, dim=NULL, out=NULL) -> Tensor

- +
+
+

squeeze(input, dim=NULL, out=NULL) -> Tensor

@@ -221,58 +140,57 @@ will be of shape: \((A \times B \times C \times D)\).

dimension. If input is of shape: \((A \times 1 \times B)\), squeeze(input, 0) leaves the tensor unchanged, but squeeze(input, 1) will squeeze the tensor to the shape \((A \times B)\).

+
-

Examples

-
if (torch_is_installed()) {
-
-x = torch_zeros(c(2, 1, 2, 1, 2))
-x
-y = torch_squeeze(x)
-y
-y = torch_squeeze(x, 1)
-y
-y = torch_squeeze(x, 2)
-y
-}
-#> torch_tensor
-#> (1,1,.,.) = 
-#>   0  0
-#> 
-#> (2,1,.,.) = 
-#>   0  0
-#> 
-#> (1,2,.,.) = 
-#>   0  0
-#> 
-#> (2,2,.,.) = 
-#>   0  0
-#> [ CPUFloatType{2,2,1,2} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+x = torch_zeros(c(2, 1, 2, 1, 2))
+x
+y = torch_squeeze(x)
+y
+y = torch_squeeze(x, 1)
+y
+y = torch_squeeze(x, 2)
+y
+}
+#> torch_tensor
+#> (1,1,.,.) = 
+#>   0  0
+#> 
+#> (2,1,.,.) = 
+#>   0  0
+#> 
+#> (1,2,.,.) = 
+#>   0  0
+#> 
+#> (2,2,.,.) = 
+#>   0  0
+#> [ CPUFloatType{2,2,1,2} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_stack.html b/dev/reference/torch_stack.html index 2777f0d7a..8d7724136 100644 --- a/dev/reference/torch_stack.html +++ b/dev/reference/torch_stack.html @@ -1,79 +1,18 @@ - - - - - - - -Stack — torch_stack • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Stack — torch_stack • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_stack(tensors, dim = 1L)
- -

Arguments

- - - - - - - - - - -
tensors

(sequence of Tensors) sequence of tensors to concatenate

dim

(int) dimension to insert. Has to be between 0 and the number of dimensions of concatenated tensors (inclusive)

- -

stack(tensors, dim=0, out=NULL) -> Tensor

+
+
torch_stack(tensors, dim = 1L)
+
+
+

Arguments

+
tensors
+

(sequence of Tensors) sequence of tensors to concatenate

+
dim
+

(int) dimension to insert. Has to be between 0 and the number of dimensions of concatenated tensors (inclusive)

+
+
+

stack(tensors, dim=0, out=NULL) -> Tensor

Concatenates sequence of tensors along a new dimension.

All tensors need to be of the same size.

+
+
-
- +
- - + + diff --git a/dev/reference/torch_std.html b/dev/reference/torch_std.html index ef9aefa51..cdd207497 100644 --- a/dev/reference/torch_std.html +++ b/dev/reference/torch_std.html @@ -1,79 +1,18 @@ - - - - - - - -Std — torch_std • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Std — torch_std • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_std(self, dim, correction, unbiased = TRUE, keepdim = FALSE)
- -

Arguments

- - - - - - - - - - - - - - - - - - - - - - -
self

(Tensor) the input tensor.

dim

(int or tuple of ints) the dimension or dimensions to reduce.

correction

The type of correction.

unbiased

(bool) whether to use the unbiased estimation or not

keepdim

(bool) whether the output tensor has dim retained or not.

- -

std(input, unbiased=TRUE) -> Tensor

+
+
torch_std(self, dim, correction, unbiased = TRUE, keepdim = FALSE)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
dim
+

(int or tuple of ints) the dimension or dimensions to reduce.

+
correction
+

The type of correction.

+
unbiased
+

(bool) whether to use the unbiased estimation or not

+
keepdim
+

(bool) whether the output tensor has dim retained or not.

+
+
+

std(input, unbiased=TRUE) -> Tensor

Returns the standard-deviation of all elements in the input tensor.

If unbiased is FALSE, then the standard-deviation will be calculated via the biased estimator. Otherwise, Bessel's correction will be used.

-

std(input, dim, unbiased=TRUE, keepdim=False, out=NULL) -> Tensor

- +
+
+

std(input, dim, unbiased=TRUE, keepdim=False, out=NULL) -> Tensor

@@ -234,55 +147,54 @@ dimension dim. If dim is a list of dimensions, reduce over all of them.

If keepdim is TRUE, the output tensor is of the same size as input except in the dimension(s) dim where it is of size 1. -Otherwise, dim is squeezed (see torch_squeeze), resulting in the +Otherwise, dim is squeezed (see torch_squeeze), resulting in the output tensor having 1 (or len(dim)) fewer dimension(s).

If unbiased is FALSE, then the standard-deviation will be calculated via the biased estimator. Otherwise, Bessel's correction will be used.

+
-

Examples

-
if (torch_is_installed()) {
-
-a = torch_randn(c(1, 3))
-a
-torch_std(a)
-
-
-a = torch_randn(c(4, 4))
-a
-torch_std(a, dim=1)
-}
-#> torch_tensor
-#>  1.0154
-#>  0.6545
-#>  1.1549
-#>  0.7787
-#> [ CPUFloatType{4} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+a = torch_randn(c(1, 3))
+a
+torch_std(a)
+
+
+a = torch_randn(c(4, 4))
+a
+torch_std(a, dim=1)
+}
+#> torch_tensor
+#>  0.5710
+#>  1.0620
+#>  1.0028
+#>  0.3510
+#> [ CPUFloatType{4} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_std_mean.html b/dev/reference/torch_std_mean.html index c532f6807..d13aeac75 100644 --- a/dev/reference/torch_std_mean.html +++ b/dev/reference/torch_std_mean.html @@ -1,79 +1,18 @@ - - - - - - - -Std_mean — torch_std_mean • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Std_mean — torch_std_mean • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,43 +111,34 @@

Std_mean

-
torch_std_mean(self, dim, correction, unbiased = TRUE, keepdim = FALSE)
- -

Arguments

- - - - - - - - - - - - - - - - - - - - - - -
self

(Tensor) the input tensor.

dim

(int or tuple of ints) the dimension or dimensions to reduce.

correction

The type of correction.

unbiased

(bool) whether to use the unbiased estimation or not

keepdim

(bool) whether the output tensor has dim retained or not.

- -

std_mean(input, unbiased=TRUE) -> (Tensor, Tensor)

+
+
torch_std_mean(self, dim, correction, unbiased = TRUE, keepdim = FALSE)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
dim
+

(int or tuple of ints) the dimension or dimensions to reduce.

+
correction
+

The type of correction.

+
unbiased
+

(bool) whether to use the unbiased estimation or not

+
keepdim
+

(bool) whether the output tensor has dim retained or not.

+
+
+

std_mean(input, unbiased=TRUE) -> (Tensor, Tensor)

Returns the standard-deviation and mean of all elements in the input tensor.

If unbiased is FALSE, then the standard-deviation will be calculated via the biased estimator. Otherwise, Bessel's correction will be used.

-

std_mean(input, dim, unbiased=TRUE, keepdim=False) -> (Tensor, Tensor)

- +
+
+

std_mean(input, dim, unbiased=TRUE, keepdim=False) -> (Tensor, Tensor)

@@ -234,65 +147,64 @@ dimension dim. If dim is a list of dimensions, reduce over all of them.

If keepdim is TRUE, the output tensor is of the same size as input except in the dimension(s) dim where it is of size 1. -Otherwise, dim is squeezed (see torch_squeeze), resulting in the +Otherwise, dim is squeezed (see torch_squeeze), resulting in the output tensor having 1 (or len(dim)) fewer dimension(s).

If unbiased is FALSE, then the standard-deviation will be calculated via the biased estimator. Otherwise, Bessel's correction will be used.

+
-

Examples

-
if (torch_is_installed()) {
-
-a = torch_randn(c(1, 3))
-a
-torch_std_mean(a)
-
-
-a = torch_randn(c(4, 4))
-a
-torch_std_mean(a, 1)
-}
-#> [[1]]
-#> torch_tensor
-#>  0.5788
-#>  0.6651
-#>  1.1436
-#>  1.0714
-#> [ CPUFloatType{4} ]
-#> 
-#> [[2]]
-#> torch_tensor
-#> -0.1838
-#> -0.1379
-#> -0.9362
-#> -1.0955
-#> [ CPUFloatType{4} ]
-#> 
-
+
+

Examples

+
if (torch_is_installed()) {
+
+a = torch_randn(c(1, 3))
+a
+torch_std_mean(a)
+
+
+a = torch_randn(c(4, 4))
+a
+torch_std_mean(a, 1)
+}
+#> [[1]]
+#> torch_tensor
+#>  0.5861
+#>  0.4865
+#>  1.2701
+#>  1.2972
+#> [ CPUFloatType{4} ]
+#> 
+#> [[2]]
+#> torch_tensor
+#>  0.1825
+#> -0.3469
+#> -0.8437
+#>  0.2128
+#> [ CPUFloatType{4} ]
+#> 
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_stft.html b/dev/reference/torch_stft.html index 12d594879..3c22d52b0 100644 --- a/dev/reference/torch_stft.html +++ b/dev/reference/torch_stft.html @@ -1,79 +1,18 @@ - - - - - - - -Stft — torch_stft • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Stft — torch_stft • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_stft(
-  input,
-  n_fft,
-  hop_length = NULL,
-  win_length = NULL,
-  window = NULL,
-  center = TRUE,
-  pad_mode = "reflect",
-  normalized = FALSE,
-  onesided = TRUE,
-  return_complex = NULL
-)
+
+
torch_stft(
+  input,
+  n_fft,
+  hop_length = NULL,
+  win_length = NULL,
+  window = NULL,
+  center = TRUE,
+  pad_mode = "reflect",
+  normalized = FALSE,
+  onesided = TRUE,
+  return_complex = NULL
+)
+
-

Arguments

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
input

(Tensor) the input tensor

n_fft

(int) size of Fourier transform

hop_length

(int, optional) the distance between neighboring sliding window -frames. Default: NULL (treated as equal to floor(n_fft / 4))

win_length

(int, optional) the size of window frame and STFT filter. -Default: NULL (treated as equal to n_fft)

window

(Tensor, optional) the optional window function. -Default: NULL (treated as window of all \(1\) s)

center

(bool, optional) whether to pad input on both sides so +

+

Arguments

+
input
+

(Tensor) the input tensor

+
n_fft
+

(int) size of Fourier transform

+
hop_length
+

(int, optional) the distance between neighboring sliding window +frames. Default: NULL (treated as equal to floor(n_fft / 4))

+
win_length
+

(int, optional) the size of window frame and STFT filter. +Default: NULL (treated as equal to n_fft)

+
window
+

(Tensor, optional) the optional window function. +Default: NULL (treated as window of all \(1\) s)

+
center
+

(bool, optional) whether to pad input on both sides so that the \(t\)-th frame is centered at time \(t \times \mbox{hop\_length}\). -Default: TRUE

pad_mode

(string, optional) controls the padding method used when -center is TRUE. Default: "reflect"

normalized

(bool, optional) controls whether to return the normalized -STFT results Default: FALSE

onesided

(bool, optional) controls whether to return half of results to -avoid redundancy Default: TRUE

return_complex

(bool, optional) controls whether to return complex tensors -or not.

- -

Short-time Fourier transform (STFT).

- +Default: TRUE

+
pad_mode
+

(string, optional) controls the padding method used when +center is TRUE. Default: "reflect"

+
normalized
+

(bool, optional) controls whether to return the normalized +STFT results Default: FALSE

+
onesided
+

(bool, optional) controls whether to return half of results to +avoid redundancy Default: TRUE

+
return_complex
+

(bool, optional) controls whether to return complex tensors +or not.

+
+
+

Short-time Fourier transform (STFT).

-

Short-time Fourier transform (STFT).

Ignoring the optional batch dimension, this method computes the following
+

Short-time Fourier transform (STFT).

Ignoring the optional batch dimension, this method computes the following
 expression:
-
+

$$ X[m, \omega] = \sum_{k = 0}^{\mbox{win\_length-1}}% @@ -272,7 +174,7 @@ expression: $$ where \(m\) is the index of the sliding window, and \(\omega\) is the frequency that \(0 \leq \omega < \mbox{n\_fft}\). When -onesided is the default value TRUE,

* `input` must be either a 1-D time sequence or a 2-D batch of time
+onesided is the default value TRUE,

* `input` must be either a 1-D time sequence or a 2-D batch of time
   sequences.
 
 * If `hop_length` is `NULL` (default), it is treated as equal to
@@ -310,40 +212,38 @@ batch size of `input`, \eqn{N} is the number of frequencies where
 STFT is applied, \eqn{T} is the total number of frames used, and each pair
 in the last dimension represents a complex number as the real part and the
 imaginary part.
-
- -

Warning

+
+
+
+

Warning

This function changed signature at version 0.4.1. Calling with the previous signature may cause error or return incorrect result.

+
+ -
- +
- - + + diff --git a/dev/reference/torch_sub.html b/dev/reference/torch_sub.html index 152285868..aa44101c3 100644 --- a/dev/reference/torch_sub.html +++ b/dev/reference/torch_sub.html @@ -1,79 +1,18 @@ - - - - - - - -Sub — torch_sub • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Sub — torch_sub • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_sub(self, other, alpha = 1L)
- -

Arguments

- - - - - - - - - - - - - - -
self

(Tensor) the input tensor.

other

(Tensor or Scalar) the tensor or scalar to subtract from input

alpha

the scalar multiplier for other

- -

sub(input, other, *, alpha=1, out=None) -> Tensor

+
+
torch_sub(self, other, alpha = 1L)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
other
+

(Tensor or Scalar) the tensor or scalar to subtract from input

+
alpha
+

the scalar multiplier for other

+
+
+

sub(input, other, *, alpha=1, out=None) -> Tensor

@@ -219,44 +135,43 @@ $$

Supports broadcasting to a common shape , type promotion , and integer, float, and complex inputs.

+
-

Examples

-
if (torch_is_installed()) {
-
-a <- torch_tensor(c(1, 2))
-b <- torch_tensor(c(0, 1))
-torch_sub(a, b, alpha=2)
-}
-#> torch_tensor
-#>  1
-#>  0
-#> [ CPUFloatType{2} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+a <- torch_tensor(c(1, 2))
+b <- torch_tensor(c(0, 1))
+torch_sub(a, b, alpha=2)
+}
+#> torch_tensor
+#>  1
+#>  0
+#> [ CPUFloatType{2} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_subtract.html b/dev/reference/torch_subtract.html index d7074d44c..e6a51b3a4 100644 --- a/dev/reference/torch_subtract.html +++ b/dev/reference/torch_subtract.html @@ -1,79 +1,18 @@ - - - - - - - -Subtract — torch_subtract • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Subtract — torch_subtract • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,57 +111,48 @@

Subtract

-
torch_subtract(self, other, alpha = 1L)
- -

Arguments

- - - - - - - - - - - - - - -
self

(Tensor) the input tensor.

other

(Tensor or Scalar) the tensor or scalar to subtract from input

alpha

the scalar multiplier for other

- -

subtract(input, other, *, alpha=1, out=None) -> Tensor

+
+
torch_subtract(self, other, alpha = 1L)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
other
+

(Tensor or Scalar) the tensor or scalar to subtract from input

+
alpha
+

the scalar multiplier for other

+
+
+

subtract(input, other, *, alpha=1, out=None) -> Tensor

-

Alias for torch_sub().

+

Alias for torch_sub().

+
+
-
- +
- - + + diff --git a/dev/reference/torch_sum.html b/dev/reference/torch_sum.html index 5e7e801ec..8f71f9d56 100644 --- a/dev/reference/torch_sum.html +++ b/dev/reference/torch_sum.html @@ -1,79 +1,18 @@ - - - - - - - -Sum — torch_sum • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Sum — torch_sum • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_sum(self, dim, keepdim = FALSE, dtype = NULL)
- -

Arguments

- - - - - - - - - - - - - - - - - - -
self

(Tensor) the input tensor.

dim

(int or tuple of ints) the dimension or dimensions to reduce.

keepdim

(bool) whether the output tensor has dim retained or not.

dtype

(torch.dtype, optional) the desired data type of returned tensor. If specified, the input tensor is casted to dtype before the operation is performed. This is useful for preventing data type overflows. Default: NULL.

- -

sum(input, dtype=NULL) -> Tensor

+
+
torch_sum(self, dim, keepdim = FALSE, dtype = NULL)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
dim
+

(int or tuple of ints) the dimension or dimensions to reduce.

+
keepdim
+

(bool) whether the output tensor has dim retained or not.

+
dtype
+

(torch.dtype, optional) the desired data type of returned tensor. If specified, the input tensor is casted to dtype before the operation is performed. This is useful for preventing data type overflows. Default: NULL.

+
+
+

sum(input, dtype=NULL) -> Tensor

Returns the sum of all elements in the input tensor.

-

sum(input, dim, keepdim=False, dtype=NULL) -> Tensor

- +
+
+

sum(input, dim, keepdim=False, dtype=NULL) -> Tensor

@@ -228,57 +143,56 @@ dimension dim. If dim is a list of dimensions, reduce over all of them.

If keepdim is TRUE, the output tensor is of the same size as input except in the dimension(s) dim where it is of size 1. -Otherwise, dim is squeezed (see torch_squeeze), resulting in the +Otherwise, dim is squeezed (see torch_squeeze), resulting in the output tensor having 1 (or len(dim)) fewer dimension(s).

+
-

Examples

-
if (torch_is_installed()) {
-
-a = torch_randn(c(1, 3))
-a
-torch_sum(a)
-
-
-a <- torch_randn(c(4, 4))
-a
-torch_sum(a, 1)
-b <- torch_arange(1, 4 * 5 * 6)$view(c(4, 5, 6))
-torch_sum(b, list(2, 1))
-}
-#> torch_tensor
-#>  1160
-#>  1180
-#>  1200
-#>  1220
-#>  1240
-#>  1260
-#> [ CPUFloatType{6} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+a = torch_randn(c(1, 3))
+a
+torch_sum(a)
+
+
+a <- torch_randn(c(4, 4))
+a
+torch_sum(a, 1)
+b <- torch_arange(1, 4 * 5 * 6)$view(c(4, 5, 6))
+torch_sum(b, list(2, 1))
+}
+#> torch_tensor
+#>  1160
+#>  1180
+#>  1200
+#>  1220
+#>  1240
+#>  1260
+#> [ CPUFloatType{6} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_svd.html b/dev/reference/torch_svd.html index e6543ebd5..4d3787621 100644 --- a/dev/reference/torch_svd.html +++ b/dev/reference/torch_svd.html @@ -1,79 +1,18 @@ - - - - - - - -Svd — torch_svd • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Svd — torch_svd • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_svd(self, some = TRUE, compute_uv = TRUE)
- -

Arguments

- - - - - - - - - - - - - - -
self

(Tensor) the input tensor of size \((*, m, n)\) where * is zero or more batch dimensions consisting of \(m \times n\) matrices.

some

(bool, optional) controls the shape of returned U and V

compute_uv

(bool, optional) option whether to compute U and V or not

- -

Note

+
+
torch_svd(self, some = TRUE, compute_uv = TRUE)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor of size \((*, m, n)\) where * is zero or more batch dimensions consisting of \(m \times n\) matrices.

+
some
+

(bool, optional) controls the shape of returned U and V

+
compute_uv
+

(bool, optional) option whether to compute U and V or not

+
+
+

Note

The singular values are returned in descending order. If input is a batch of matrices, then the singular values of each matrix in the batch is returned in descending order.

The implementation of SVD on CPU uses the LAPACK routine ?gesdd (a divide-and-conquer @@ -228,8 +144,9 @@ and V[..., :, min(m, n):] will be ignored in backward as those vect can be arbitrary bases of the subspaces.

When compute_uv = FALSE, backward cannot be performed since U and V from the forward pass is required for the backward operation.

-

svd(input, some=TRUE, compute_uv=TRUE) -> (Tensor, Tensor, Tensor)

- +
+
+

svd(input, some=TRUE, compute_uv=TRUE) -> (Tensor, Tensor, Tensor)

@@ -241,53 +158,52 @@ i.e., if the last two dimensions of input are m and U
and V matrices will contain only \(min(n, m)\) orthonormal columns.

If compute_uv is FALSE, the returned U and V matrices will be zero matrices of shape \((m \times m)\) and \((n \times n)\) respectively. some will be ignored here.

+
-

Examples

-
if (torch_is_installed()) {
-
-a = torch_randn(c(5, 3))
-a
-out = torch_svd(a)
-u = out[[1]]
-s = out[[2]]
-v = out[[3]]
-torch_dist(a, torch_mm(torch_mm(u, torch_diag(s)), v$t()))
-a_big = torch_randn(c(7, 5, 3))
-out = torch_svd(a_big)
-u = out[[1]]
-s = out[[2]]
-v = out[[3]]
-torch_dist(a_big, torch_matmul(torch_matmul(u, torch_diag_embed(s)), v$transpose(-2, -1)))
-}
-#> torch_tensor
-#> 2.51836e-06
-#> [ CPUFloatType{} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+a = torch_randn(c(5, 3))
+a
+out = torch_svd(a)
+u = out[[1]]
+s = out[[2]]
+v = out[[3]]
+torch_dist(a, torch_mm(torch_mm(u, torch_diag(s)), v$t()))
+a_big = torch_randn(c(7, 5, 3))
+out = torch_svd(a_big)
+u = out[[1]]
+s = out[[2]]
+v = out[[3]]
+torch_dist(a_big, torch_matmul(torch_matmul(u, torch_diag_embed(s)), v$transpose(-2, -1)))
+}
+#> torch_tensor
+#> 3.58089e-06
+#> [ CPUFloatType{} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_symeig.html b/dev/reference/torch_symeig.html index 6a4188516..43a1f0eac 100644 --- a/dev/reference/torch_symeig.html +++ b/dev/reference/torch_symeig.html @@ -1,79 +1,18 @@ - - - - - - - -Symeig — torch_symeig • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Symeig — torch_symeig • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_symeig(self, eigenvectors = FALSE, upper = TRUE)
- -

Arguments

- - - - - - - - - - - - - - -
self

(Tensor) the input tensor of size \((*, n, n)\) where * is zero or more batch dimensions consisting of symmetric matrices.

eigenvectors

(boolean, optional) controls whether eigenvectors have to be computed

upper

(boolean, optional) controls whether to consider upper-triangular or lower-triangular region

- -

Note

+
+
torch_symeig(self, eigenvectors = FALSE, upper = TRUE)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor of size \((*, n, n)\) where * is zero or more batch dimensions consisting of symmetric matrices.

+
eigenvectors
+

(boolean, optional) controls whether eigenvectors have to be computed

+
upper
+

(boolean, optional) controls whether to consider upper-triangular or lower-triangular region

+
+
+

Note

The eigenvalues are returned in ascending order. If input is a batch of matrices, then the eigenvalues of each matrix in the batch is returned in ascending order.

Irrespective of the original strides, the returned matrix V will @@ -217,8 +133,9 @@ be transposed, i.e. with strides V.contiguous().transpose(-1, -2).stride()

Extra care needs to be taken when backward through outputs. Such operation is really only stable when all eigenvalues are distinct. Otherwise, NaN can appear as the gradients are not properly defined.

-

symeig(input, eigenvectors=False, upper=TRUE) -> (Tensor, Tensor)

- +
+
+

symeig(input, eigenvectors=False, upper=TRUE) -> (Tensor, Tensor)

@@ -234,52 +151,51 @@ both eigenvalues and eigenvectors are computed.

Since the input matrix input is supposed to be symmetric, only the upper triangular portion is used by default.

If upper is FALSE, then lower triangular portion is used.

+
-

Examples

-
if (torch_is_installed()) {
-
-a = torch_randn(c(5, 5))
-a = a + a$t()  # To make a symmetric
-a
-o = torch_symeig(a, eigenvectors=TRUE)
-e = o[[1]]
-v = o[[2]]
-e
-v
-a_big = torch_randn(c(5, 2, 2))
-a_big = a_big + a_big$transpose(-2, -1)  # To make a_big symmetric
-o = a_big$symeig(eigenvectors=TRUE)
-e = o[[1]]
-v = o[[2]]
-torch_allclose(torch_matmul(v, torch_matmul(e$diag_embed(), v$transpose(-2, -1))), a_big)
-}
-#> [1] TRUE
-
+
+

Examples

+
if (torch_is_installed()) {
+
+a = torch_randn(c(5, 5))
+a = a + a$t()  # To make a symmetric
+a
+o = torch_symeig(a, eigenvectors=TRUE)
+e = o[[1]]
+v = o[[2]]
+e
+v
+a_big = torch_randn(c(5, 2, 2))
+a_big = a_big + a_big$transpose(-2, -1)  # To make a_big symmetric
+o = a_big$symeig(eigenvectors=TRUE)
+e = o[[1]]
+v = o[[2]]
+torch_allclose(torch_matmul(v, torch_matmul(e$diag_embed(), v$transpose(-2, -1))), a_big)
+}
+#> [1] TRUE
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_t.html b/dev/reference/torch_t.html index f7deb8a2d..b4709e39a 100644 --- a/dev/reference/torch_t.html +++ b/dev/reference/torch_t.html @@ -1,79 +1,18 @@ - - - - - - - -T — torch_t • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -T — torch_t • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_t(self)
- -

Arguments

- - - - - - -
self

(Tensor) the input tensor.

- -

t(input) -> Tensor

+
+
torch_t(self)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
+
+

t(input) -> Tensor

@@ -209,51 +129,50 @@ and 1.

0-D and 1-D tensors are returned as is. When input is a 2-D tensor this is equivalent to transpose(input, 0, 1).

+
-

Examples

-
if (torch_is_installed()) {
-
-x = torch_randn(c(2,3))
-x
-torch_t(x)
-x = torch_randn(c(3))
-x
-torch_t(x)
-x = torch_randn(c(2, 3))
-x
-torch_t(x)
-}
-#> torch_tensor
-#>  0.8020 -0.9383
-#>  1.4307  0.0216
-#> -0.0582 -0.9145
-#> [ CPUFloatType{3,2} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+x = torch_randn(c(2,3))
+x
+torch_t(x)
+x = torch_randn(c(3))
+x
+torch_t(x)
+x = torch_randn(c(2, 3))
+x
+torch_t(x)
+}
+#> torch_tensor
+#> -0.6858  0.8717
+#> -1.3576 -0.0799
+#> -0.0242  1.1285
+#> [ CPUFloatType{3,2} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_take.html b/dev/reference/torch_take.html index 25d36c783..8508ea11b 100644 --- a/dev/reference/torch_take.html +++ b/dev/reference/torch_take.html @@ -1,79 +1,18 @@ - - - - - - - -Take — torch_take • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Take — torch_take • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_take(self, index)
- -

Arguments

- - - - - - - - - - -
self

(Tensor) the input tensor.

index

(LongTensor) the indices into tensor

- -

take(input, index) -> Tensor

+
+
torch_take(self, index)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
index
+

(LongTensor) the indices into tensor

+
+
+

take(input, index) -> Tensor

Returns a new tensor with the elements of input at the given indices. The input tensor is treated as if it were viewed as a 1-D tensor. The result takes the same shape as the indices.

+
-

Examples

-
if (torch_is_installed()) {
-
-src = torch_tensor(matrix(c(4,3,5,6,7,8), ncol = 3, byrow = TRUE))
-torch_take(src, torch_tensor(c(1, 2, 5), dtype = torch_int64()))
-}
-#> torch_tensor
-#>  4
-#>  3
-#>  7
-#> [ CPUFloatType{3} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+src = torch_tensor(matrix(c(4,3,5,6,7,8), ncol = 3, byrow = TRUE))
+torch_take(src, torch_tensor(c(1, 2, 5), dtype = torch_int64()))
+}
+#> torch_tensor
+#>  4
+#>  3
+#>  7
+#> [ CPUFloatType{3} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_tan.html b/dev/reference/torch_tan.html index 93dda371e..e4ff91733 100644 --- a/dev/reference/torch_tan.html +++ b/dev/reference/torch_tan.html @@ -1,79 +1,18 @@ - - - - - - - -Tan — torch_tan • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Tan — torch_tan • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_tan(self)
- -

Arguments

- - - - - - -
self

(Tensor) the input tensor.

- -

tan(input, out=NULL) -> Tensor

+
+
torch_tan(self)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
+
+

tan(input, out=NULL) -> Tensor

@@ -209,46 +129,45 @@

$$ \mbox{out}_{i} = \tan(\mbox{input}_{i}) $$

+
-

Examples

-
if (torch_is_installed()) {
-
-a = torch_randn(c(4))
-a
-torch_tan(a)
-}
-#> torch_tensor
-#> -3.9415
-#>  0.0214
-#> -1.8529
-#> -1.7272
-#> [ CPUFloatType{4} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+a = torch_randn(c(4))
+a
+torch_tan(a)
+}
+#> torch_tensor
+#> -1.4210
+#>  0.6762
+#>  0.4898
+#>  2.7220
+#> [ CPUFloatType{4} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_tanh.html b/dev/reference/torch_tanh.html index 513dbe105..e644b1ea8 100644 --- a/dev/reference/torch_tanh.html +++ b/dev/reference/torch_tanh.html @@ -1,79 +1,18 @@ - - - - - - - -Tanh — torch_tanh • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Tanh — torch_tanh • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_tanh(self)
- -

Arguments

- - - - - - -
self

(Tensor) the input tensor.

- -

tanh(input, out=NULL) -> Tensor

+
+
torch_tanh(self)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
+
+

tanh(input, out=NULL) -> Tensor

@@ -210,46 +130,45 @@ of input.

$$ \mbox{out}_{i} = \tanh(\mbox{input}_{i}) $$

+
-

Examples

-
if (torch_is_installed()) {
-
-a = torch_randn(c(4))
-a
-torch_tanh(a)
-}
-#> torch_tensor
-#>  0.8746
-#>  0.4747
-#>  0.9720
-#>  0.8456
-#> [ CPUFloatType{4} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+a = torch_randn(c(4))
+a
+torch_tanh(a)
+}
+#> torch_tensor
+#> -0.4118
+#> -0.8532
+#> -0.4083
+#>  0.6851
+#> [ CPUFloatType{4} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_tensor.html b/dev/reference/torch_tensor.html index cbe7b598e..71df1258c 100644 --- a/dev/reference/torch_tensor.html +++ b/dev/reference/torch_tensor.html @@ -1,79 +1,18 @@ - - - - - - - -Converts R objects to a torch tensor — torch_tensor • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Converts R objects to a torch tensor — torch_tensor • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,78 +111,66 @@

Converts R objects to a torch tensor

-
torch_tensor(
-  data,
-  dtype = NULL,
-  device = NULL,
-  requires_grad = FALSE,
-  pin_memory = FALSE
-)
- -

Arguments

- - - - - - - - - - - - - - - - - - - - - - -
data

an R atomic vector, matrix or array

dtype

a torch_dtype instance

device

a device creted with torch_device()

requires_grad

if autograd should record operations on the returned tensor.

pin_memory

If set, returned tensor would be allocated in the pinned memory.

- +
+
torch_tensor(
+  data,
+  dtype = NULL,
+  device = NULL,
+  requires_grad = FALSE,
+  pin_memory = FALSE
+)
+
-

Examples

-
if (torch_is_installed()) {
-torch_tensor(c(1,2,3,4))
-torch_tensor(c(1,2,3,4), dtype = torch_int())
-
-}
-#> torch_tensor
-#>  1
-#>  2
-#>  3
-#>  4
-#> [ CPUIntType{4} ]
-
+
+

Arguments

+
data
+

an R atomic vector, matrix or array

+
dtype
+

a torch_dtype instance

+
device
+

a device creted with torch_device()

+
requires_grad
+

if autograd should record operations on the returned tensor.

+
pin_memory
+

If set, returned tensor would be allocated in the pinned memory.

+
+ +
+

Examples

+
if (torch_is_installed()) {
+torch_tensor(c(1,2,3,4))
+torch_tensor(c(1,2,3,4), dtype = torch_int())
+
+}
+#> torch_tensor
+#>  1
+#>  2
+#>  3
+#>  4
+#> [ CPUIntType{4} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_tensordot.html b/dev/reference/torch_tensordot.html index 7d32b4356..e61d849be 100644 --- a/dev/reference/torch_tensordot.html +++ b/dev/reference/torch_tensordot.html @@ -1,80 +1,19 @@ - - - - - - - -Tensordot — torch_tensordot • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Tensordot — torch_tensordot • torch - - - - - - + + - - -
-
- -
- -
+
@@ -191,64 +113,56 @@ tensordot implements a generalized matrix product." /> tensordot implements a generalized matrix product.

-
torch_tensordot(a, b, dims = 2)
- -

Arguments

- - - - - - - - - - - - - - -
a

(Tensor) Left tensor to contract

b

(Tensor) Right tensor to contract

dims

(int or tuple of two lists of integers) number of dimensions to contract or explicit lists of dimensions for a and b respectively

- - -

Examples

-
if (torch_is_installed()) {
-
-a <- torch_arange(start = 1, end = 60)$reshape(c(3, 4, 5))
-b <- torch_arange(start = 1, end = 24)$reshape(c(4, 3, 2))
-torch_tensordot(a, b, dims = list(c(2, 1), c(1, 2)))
-if (FALSE) {
-a = torch_randn(3, 4, 5, device='cuda')
-b = torch_randn(4, 5, 6, device='cuda')
-c = torch_tensordot(a, b, dims=2)$cpu()
-}
-}
-
+
+
torch_tensordot(a, b, dims = 2)
+
+ +
+

Arguments

+
a
+

(Tensor) Left tensor to contract

+
b
+

(Tensor) Right tensor to contract

+
dims
+

(int or tuple of two lists of integers) number of dimensions to contract or explicit lists of dimensions for a and b respectively

+
+ +
+

Examples

+
if (torch_is_installed()) {
+
+a <- torch_arange(start = 1, end = 60)$reshape(c(3, 4, 5))
+b <- torch_arange(start = 1, end = 24)$reshape(c(4, 3, 2))
+torch_tensordot(a, b, dims = list(c(2, 1), c(1, 2)))
+if (FALSE) {
+a = torch_randn(3, 4, 5, device='cuda')
+b = torch_randn(4, 5, 6, device='cuda')
+c = torch_tensordot(a, b, dims=2)$cpu()
+}
+}
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_threshold_.html b/dev/reference/torch_threshold_.html index e844be326..1c044d19c 100644 --- a/dev/reference/torch_threshold_.html +++ b/dev/reference/torch_threshold_.html @@ -1,79 +1,18 @@ - - - - - - - -Threshold_ — torch_threshold_ • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Threshold_ — torch_threshold_ • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,57 +111,48 @@

Threshold_

-
torch_threshold_(self, threshold, value)
- -

Arguments

- - - - - - - - - - - - - - -
self

input tensor

threshold

The value to threshold at

value

The value to replace with

- -

threshold_(input, threshold, value) -> Tensor

+
+
torch_threshold_(self, threshold, value)
+
+
+

Arguments

+
self
+

input tensor

+
threshold
+

The value to threshold at

+
value
+

The value to replace with

+
+
+

threshold_(input, threshold, value) -> Tensor

In-place version of torch_threshold.

+
+
-
- +
- - + + diff --git a/dev/reference/torch_topk.html b/dev/reference/torch_topk.html index d0d4589d3..86af2eae2 100644 --- a/dev/reference/torch_topk.html +++ b/dev/reference/torch_topk.html @@ -1,79 +1,18 @@ - - - - - - - -Topk — torch_topk • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Topk — torch_topk • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_topk(self, k, dim = -1L, largest = TRUE, sorted = TRUE)
- -

Arguments

- - - - - - - - - - - - - - - - - - - - - - -
self

(Tensor) the input tensor.

k

(int) the k in "top-k"

dim

(int, optional) the dimension to sort along

largest

(bool, optional) controls whether to return largest or smallest elements

sorted

(bool, optional) controls whether to return the elements in sorted order

- -

topk(input, k, dim=NULL, largest=TRUE, sorted=TRUE) -> (Tensor, LongTensor)

+
+
torch_topk(self, k, dim = -1L, largest = TRUE, sorted = TRUE)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
k
+

(int) the k in "top-k"

+
dim
+

(int, optional) the dimension to sort along

+
largest
+

(bool, optional) controls whether to return largest or smallest elements

+
sorted
+

(bool, optional) controls whether to return the elements in sorted order

+
+
+

topk(input, k, dim=NULL, largest=TRUE, sorted=TRUE) -> (Tensor, LongTensor)

@@ -229,54 +141,53 @@ a given dimension.

of the elements in the original input tensor.

The boolean option sorted if TRUE, will make sure that the returned k elements are themselves sorted

+
-

Examples

-
if (torch_is_installed()) {
-
-x = torch_arange(1., 6.)
-x
-torch_topk(x, 3)
-}
-#> [[1]]
-#> torch_tensor
-#>  6
-#>  5
-#>  4
-#> [ CPUFloatType{3} ]
-#> 
-#> [[2]]
-#> torch_tensor
-#>  6
-#>  5
-#>  4
-#> [ CPULongType{3} ]
-#> 
-
+
+

Examples

+
if (torch_is_installed()) {
+
+x = torch_arange(1., 6.)
+x
+torch_topk(x, 3)
+}
+#> [[1]]
+#> torch_tensor
+#>  6
+#>  5
+#>  4
+#> [ CPUFloatType{3} ]
+#> 
+#> [[2]]
+#> torch_tensor
+#>  6
+#>  5
+#>  4
+#> [ CPULongType{3} ]
+#> 
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_trace.html b/dev/reference/torch_trace.html index b4a021afe..f9df5db89 100644 --- a/dev/reference/torch_trace.html +++ b/dev/reference/torch_trace.html @@ -1,79 +1,18 @@ - - - - - - - -Trace — torch_trace • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Trace — torch_trace • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_trace(self)
- -

Arguments

- - - - - - -
self

the input tensor

- -

trace(input) -> Tensor

+
+
torch_trace(self)
+
+
+

Arguments

+
self
+

the input tensor

+
+
+

trace(input) -> Tensor

Returns the sum of the elements of the diagonal of the input 2-D matrix.

+
-

Examples

-
if (torch_is_installed()) {
-
-x <- torch_arange(1, 9)$view(c(3, 3))
-x
-torch_trace(x)
-}
-#> torch_tensor
-#> 15
-#> [ CPUFloatType{} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+x <- torch_arange(1, 9)$view(c(3, 3))
+x
+torch_trace(x)
+}
+#> torch_tensor
+#> 15
+#> [ CPUFloatType{} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_transpose.html b/dev/reference/torch_transpose.html index 421057cec..ab23a195c 100644 --- a/dev/reference/torch_transpose.html +++ b/dev/reference/torch_transpose.html @@ -1,79 +1,18 @@ - - - - - - - -Transpose — torch_transpose • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Transpose — torch_transpose • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,27 +111,21 @@

Transpose

-
torch_transpose(self, dim0, dim1)
- -

Arguments

- - - - - - - - - - - - - - -
self

(Tensor) the input tensor.

dim0

(int) the first dimension to be transposed

dim1

(int) the second dimension to be transposed

- -

transpose(input, dim0, dim1) -> Tensor

+
+
torch_transpose(self, dim0, dim1)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
dim0
+

(int) the first dimension to be transposed

+
dim1
+

(int) the second dimension to be transposed

+
+
+

transpose(input, dim0, dim1) -> Tensor

@@ -218,45 +134,44 @@ The given dimensions dim0 and dim1 are swapped.

The resulting out tensor shares it's underlying storage with the input tensor, so changing the content of one would change the content of the other.

+
-

Examples

-
if (torch_is_installed()) {
-
-x = torch_randn(c(2, 3))
-x
-torch_transpose(x, 1, 2)
-}
-#> torch_tensor
-#> -1.8193  0.4626
-#> -0.1021 -0.9560
-#> -0.0041  2.3591
-#> [ CPUFloatType{3,2} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+x = torch_randn(c(2, 3))
+x
+torch_transpose(x, 1, 2)
+}
+#> torch_tensor
+#>  1.8015 -0.5876
+#> -1.0501  1.0284
+#>  0.4838 -0.2184
+#> [ CPUFloatType{3,2} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_trapz.html b/dev/reference/torch_trapz.html index efdc37451..054a378b3 100644 --- a/dev/reference/torch_trapz.html +++ b/dev/reference/torch_trapz.html @@ -1,79 +1,18 @@ - - - - - - - -Trapz — torch_trapz • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Trapz — torch_trapz • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_trapz(y, dx = 1L, x, dim = -1L)
- -

Arguments

- - - - - - - - - - - - - - - - - - -
y

(Tensor) The values of the function to integrate

dx

(float) The distance between points at which y is sampled.

x

(Tensor) The points at which the function y is sampled. If x is not in ascending order, intervals on which it is decreasing contribute negatively to the estimated integral (i.e., the convention \(\int_a^b f = -\int_b^a f\) is followed).

dim

(int) The dimension along which to integrate. By default, use the last dimension.

- -

trapz(y, x, *, dim=-1) -> Tensor

+
+
torch_trapz(y, dx = 1L, x, dim = -1L)
+
+
+

Arguments

+
y
+

(Tensor) The values of the function to integrate

+
dx
+

(float) The distance between points at which y is sampled.

+
x
+

(Tensor) The points at which the function y is sampled. If x is not in ascending order, intervals on which it is decreasing contribute negatively to the estimated integral (i.e., the convention \(\int_a^b f = -\int_b^a f\) is followed).

+
dim
+

(int) The dimension along which to integrate. By default, use the last dimension.

+
+
+

trapz(y, x, *, dim=-1) -> Tensor

Estimate \(\int y\,dx\) along dim, using the trapezoid rule.

-

trapz(y, *, dx=1, dim=-1) -> Tensor

- +
+
+

trapz(y, *, dx=1, dim=-1) -> Tensor

As above, but the sample points are spaced uniformly at a distance of dx.

+
-

Examples

-
if (torch_is_installed()) {
-
-y = torch_randn(list(2, 3))
-y
-x = torch_tensor(matrix(c(1, 3, 4, 1, 2, 3), ncol = 3, byrow=TRUE))
-torch_trapz(y, x = x)
-
-}
-#> torch_tensor
-#> -1.7574
-#>  0.0709
-#> [ CPUFloatType{2} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+y = torch_randn(list(2, 3))
+y
+x = torch_tensor(matrix(c(1, 3, 4, 1, 2, 3), ncol = 3, byrow=TRUE))
+torch_trapz(y, x = x)
+
+}
+#> torch_tensor
+#> -1.5980
+#>  0.4931
+#> [ CPUFloatType{2} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_triangular_solve.html b/dev/reference/torch_triangular_solve.html index b02526b02..0d85952a1 100644 --- a/dev/reference/torch_triangular_solve.html +++ b/dev/reference/torch_triangular_solve.html @@ -1,79 +1,18 @@ - - - - - - - -Triangular_solve — torch_triangular_solve • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Triangular_solve — torch_triangular_solve • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,41 +111,31 @@

Triangular_solve

-
torch_triangular_solve(
-  self,
-  A,
-  upper = TRUE,
-  transpose = FALSE,
-  unitriangular = FALSE
-)
- -

Arguments

- - - - - - - - - - - - - - - - - - - - - - -
self

(Tensor) multiple right-hand sides of size \((*, m, k)\) where \(*\) is zero of more batch dimensions (\(b\))

A

(Tensor) the input triangular coefficient matrix of size \((*, m, m)\) where \(*\) is zero or more batch dimensions

upper

(bool, optional) whether to solve the upper-triangular system of equations (default) or the lower-triangular system of equations. Default: TRUE.

transpose

(bool, optional) whether \(A\) should be transposed before being sent into the solver. Default: FALSE.

unitriangular

(bool, optional) whether \(A\) is unit triangular. If TRUE, the diagonal elements of \(A\) are assumed to be 1 and not referenced from \(A\). Default: FALSE.

- -

triangular_solve(input, A, upper=TRUE, transpose=False, unitriangular=False) -> (Tensor, Tensor)

+
+
torch_triangular_solve(
+  self,
+  A,
+  upper = TRUE,
+  transpose = FALSE,
+  unitriangular = FALSE
+)
+
+
+

Arguments

+
self
+

(Tensor) multiple right-hand sides of size \((*, m, k)\) where \(*\) is zero of more batch dimensions (\(b\))

+
A
+

(Tensor) the input triangular coefficient matrix of size \((*, m, m)\) where \(*\) is zero or more batch dimensions

+
upper
+

(bool, optional) whether to solve the upper-triangular system of equations (default) or the lower-triangular system of equations. Default: TRUE.

+
transpose
+

(bool, optional) whether \(A\) should be transposed before being sent into the solver. Default: FALSE.

+
unitriangular
+

(bool, optional) whether \(A\) is unit triangular. If TRUE, the diagonal elements of \(A\) are assumed to be 1 and not referenced from \(A\). Default: FALSE.

+
+
+

triangular_solve(input, A, upper=TRUE, transpose=False, unitriangular=False) -> (Tensor, Tensor)

@@ -234,54 +146,53 @@ with the default keyword arguments.

torch_triangular_solve(b, A) can take in 2D inputs b, A or inputs that are batches of 2D matrices. If the inputs are batches, then returns batched outputs X

+
-

Examples

-
if (torch_is_installed()) {
-
-A = torch_randn(c(2, 2))$triu()
-A
-b = torch_randn(c(2, 3))
-b
-torch_triangular_solve(b, A)
-}
-#> [[1]]
-#> torch_tensor
-#> -13.1331  -9.7320   3.9804
-#>  -5.9878  -5.3316   1.3763
-#> [ CPUFloatType{2,3} ]
-#> 
-#> [[2]]
-#> torch_tensor
-#> -0.5985  0.9713
-#>  0.0000  0.2471
-#> [ CPUFloatType{2,2} ]
-#> 
-
+
+

Examples

+
if (torch_is_installed()) {
+
+A = torch_randn(c(2, 2))$triu()
+A
+b = torch_randn(c(2, 3))
+b
+torch_triangular_solve(b, A)
+}
+#> [[1]]
+#> torch_tensor
+#>   0.6662  -2.1877  -0.2814
+#>   1.2484  30.9253   5.2644
+#> [ CPUFloatType{2,3} ]
+#> 
+#> [[2]]
+#> torch_tensor
+#> -1.0806 -0.0484
+#>  0.0000  0.0760
+#> [ CPUFloatType{2,2} ]
+#> 
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_tril.html b/dev/reference/torch_tril.html index b9a2ed992..1fc9d83a6 100644 --- a/dev/reference/torch_tril.html +++ b/dev/reference/torch_tril.html @@ -1,79 +1,18 @@ - - - - - - - -Tril — torch_tril • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Tril — torch_tril • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_tril(self, diagonal = 0L)
- -

Arguments

- - - - - - - - - - -
self

(Tensor) the input tensor.

diagonal

(int, optional) the diagonal to consider

- -

tril(input, diagonal=0, out=NULL) -> Tensor

+
+
torch_tril(self, diagonal = 0L)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
diagonal
+

(int, optional) the diagonal to consider

+
+
+

tril(input, diagonal=0, out=NULL) -> Tensor

@@ -220,50 +138,49 @@ diagonal, and similarly a negative value excludes just as many diagonals below the main diagonal. The main diagonal are the set of indices \(\lbrace (i, i) \rbrace\) for \(i \in [0, \min\{d_{1}, d_{2}\} - 1]\) where \(d_{1}, d_{2}\) are the dimensions of the matrix.

+
-

Examples

-
if (torch_is_installed()) {
-
-a = torch_randn(c(3, 3))
-a
-torch_tril(a)
-b = torch_randn(c(4, 6))
-b
-torch_tril(b, diagonal=1)
-torch_tril(b, diagonal=-1)
-}
-#> torch_tensor
-#>  0.0000  0.0000  0.0000  0.0000  0.0000  0.0000
-#>  1.6171  0.0000  0.0000  0.0000  0.0000  0.0000
-#>  0.1809 -0.7544  0.0000  0.0000  0.0000  0.0000
-#> -0.4218 -1.2127 -1.1258  0.0000  0.0000  0.0000
-#> [ CPUFloatType{4,6} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+a = torch_randn(c(3, 3))
+a
+torch_tril(a)
+b = torch_randn(c(4, 6))
+b
+torch_tril(b, diagonal=1)
+torch_tril(b, diagonal=-1)
+}
+#> torch_tensor
+#>  0.0000  0.0000  0.0000  0.0000  0.0000  0.0000
+#>  1.4302  0.0000  0.0000  0.0000  0.0000  0.0000
+#>  0.3984  0.2092  0.0000  0.0000  0.0000  0.0000
+#> -0.5634 -0.4056 -2.3276  0.0000  0.0000  0.0000
+#> [ CPUFloatType{4,6} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_tril_indices.html b/dev/reference/torch_tril_indices.html index 2cd66b2aa..54f19baa4 100644 --- a/dev/reference/torch_tril_indices.html +++ b/dev/reference/torch_tril_indices.html @@ -1,79 +1,18 @@ - - - - - - - -Tril_indices — torch_tril_indices • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Tril_indices — torch_tril_indices • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,53 +111,42 @@

Tril_indices

-
torch_tril_indices(
-  row,
-  col,
-  offset = 0,
-  dtype = torch_long(),
-  device = "cpu",
-  layout = torch_strided()
-)
- -

Arguments

- - - - - - - - - - - - - - - - - - - - - - - - - - -
row

(int) number of rows in the 2-D matrix.

col

(int) number of columns in the 2-D matrix.

offset

(int) diagonal offset from the main diagonal. Default: if not provided, 0.

dtype

(torch.dtype, optional) the desired data type of returned tensor. Default: if NULL, torch_long.

device

(torch.device, optional) the desired device of returned tensor. Default: if NULL, uses the current device for the default tensor type (see torch_set_default_tensor_type). device will be the CPU for CPU tensor types and the current CUDA device for CUDA tensor types.

layout

(torch.layout, optional) currently only support torch_strided.

- -

Note

+
+
torch_tril_indices(
+  row,
+  col,
+  offset = 0,
+  dtype = torch_long(),
+  device = "cpu",
+  layout = torch_strided()
+)
+
+
+

Arguments

+
row
+

(int) number of rows in the 2-D matrix.

+
col
+

(int) number of columns in the 2-D matrix.

+
offset
+

(int) diagonal offset from the main diagonal. Default: if not provided, 0.

+
dtype
+

(torch.dtype, optional) the desired data type of returned tensor. Default: if NULL, torch_long.

+
device
+

(torch.device, optional) the desired device of returned tensor. Default: if NULL, uses the current device for the default tensor type (see torch_set_default_tensor_type). device will be the CPU for CPU tensor types and the current CUDA device for CUDA tensor types.

+
layout
+

(torch.layout, optional) currently only support torch_strided.

+
+
+

Note

-
When running on CUDA, `row * col` must be less than \eqn{2^{59}} to
+
When running on CUDA, `row * col` must be less than \eqn{2^{59}} to
 prevent overflow during calculation.
-
- -

tril_indices(row, col, offset=0, dtype=torch.long, device='cpu', layout=torch.strided) -> Tensor

+
+
+
+

tril_indices(row, col, offset=0, dtype=torch.long, device='cpu', layout=torch.strided) -> Tensor

@@ -252,44 +163,43 @@ diagonal, and similarly a negative value excludes just as many diagonals below the main diagonal. The main diagonal are the set of indices \(\lbrace (i, i) \rbrace\) for \(i \in [0, \min\{d_{1}, d_{2}\} - 1]\) where \(d_{1}, d_{2}\) are the dimensions of the matrix.

+
-

Examples

-
if (torch_is_installed()) {
-if (FALSE) {
-a = torch_tril_indices(3, 3)
-a
-a = torch_tril_indices(4, 3, -1)
-a
-a = torch_tril_indices(4, 3, 1)
-a
-}
-}
-
+
+

Examples

+
if (torch_is_installed()) {
+if (FALSE) {
+a = torch_tril_indices(3, 3)
+a
+a = torch_tril_indices(4, 3, -1)
+a
+a = torch_tril_indices(4, 3, 1)
+a
+}
+}
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_triu.html b/dev/reference/torch_triu.html index a5eebc66b..03a1d3145 100644 --- a/dev/reference/torch_triu.html +++ b/dev/reference/torch_triu.html @@ -1,79 +1,18 @@ - - - - - - - -Triu — torch_triu • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Triu — torch_triu • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_triu(self, diagonal = 0L)
- -

Arguments

- - - - - - - - - - -
self

(Tensor) the input tensor.

diagonal

(int, optional) the diagonal to consider

- -

triu(input, diagonal=0, out=NULL) -> Tensor

+
+
torch_triu(self, diagonal = 0L)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
diagonal
+

(int, optional) the diagonal to consider

+
+
+

triu(input, diagonal=0, out=NULL) -> Tensor

@@ -220,52 +138,51 @@ diagonal, and similarly a negative value includes just as many diagonals below the main diagonal. The main diagonal are the set of indices \(\lbrace (i, i) \rbrace\) for \(i \in [0, \min\{d_{1}, d_{2}\} - 1]\) where \(d_{1}, d_{2}\) are the dimensions of the matrix.

+
-

Examples

-
if (torch_is_installed()) {
-
-a = torch_randn(c(3, 3))
-a
-torch_triu(a)
-torch_triu(a, diagonal=1)
-torch_triu(a, diagonal=-1)
-b = torch_randn(c(4, 6))
-b
-torch_triu(b, diagonal=1)
-torch_triu(b, diagonal=-1)
-}
-#> torch_tensor
-#> -0.9039  0.2676 -0.5836  1.0136  0.3033 -0.6250
-#>  1.1673  0.3175  1.6993 -0.9980 -0.8675  1.0028
-#>  0.0000 -1.0054  0.1130  1.0869 -1.6897  0.7564
-#>  0.0000  0.0000 -1.1161 -0.3349 -1.5448  0.9295
-#> [ CPUFloatType{4,6} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+a = torch_randn(c(3, 3))
+a
+torch_triu(a)
+torch_triu(a, diagonal=1)
+torch_triu(a, diagonal=-1)
+b = torch_randn(c(4, 6))
+b
+torch_triu(b, diagonal=1)
+torch_triu(b, diagonal=-1)
+}
+#> torch_tensor
+#>  1.6667  0.1364 -0.1780  2.4322  0.7140  0.9880
+#>  1.1858  0.8444 -0.6649 -0.8724  1.9515 -1.4735
+#>  0.0000  1.0973  0.4507  0.8721  0.7713 -0.1108
+#>  0.0000  0.0000  1.1485 -0.3038 -0.6244 -0.0548
+#> [ CPUFloatType{4,6} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_triu_indices.html b/dev/reference/torch_triu_indices.html index c4960036b..43659c844 100644 --- a/dev/reference/torch_triu_indices.html +++ b/dev/reference/torch_triu_indices.html @@ -1,79 +1,18 @@ - - - - - - - -Triu_indices — torch_triu_indices • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Triu_indices — torch_triu_indices • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,53 +111,42 @@

Triu_indices

-
torch_triu_indices(
-  row,
-  col,
-  offset = 0,
-  dtype = torch_long(),
-  device = "cpu",
-  layout = torch_strided()
-)
- -

Arguments

- - - - - - - - - - - - - - - - - - - - - - - - - - -
row

(int) number of rows in the 2-D matrix.

col

(int) number of columns in the 2-D matrix.

offset

(int) diagonal offset from the main diagonal. Default: if not provided, 0.

dtype

(torch.dtype, optional) the desired data type of returned tensor. Default: if NULL, torch_long.

device

(torch.device, optional) the desired device of returned tensor. Default: if NULL, uses the current device for the default tensor type (see torch_set_default_tensor_type). device will be the CPU for CPU tensor types and the current CUDA device for CUDA tensor types.

layout

(torch.layout, optional) currently only support torch_strided.

- -

Note

+
+
torch_triu_indices(
+  row,
+  col,
+  offset = 0,
+  dtype = torch_long(),
+  device = "cpu",
+  layout = torch_strided()
+)
+
+
+

Arguments

+
row
+

(int) number of rows in the 2-D matrix.

+
col
+

(int) number of columns in the 2-D matrix.

+
offset
+

(int) diagonal offset from the main diagonal. Default: if not provided, 0.

+
dtype
+

(torch.dtype, optional) the desired data type of returned tensor. Default: if NULL, torch_long.

+
device
+

(torch.device, optional) the desired device of returned tensor. Default: if NULL, uses the current device for the default tensor type (see torch_set_default_tensor_type). device will be the CPU for CPU tensor types and the current CUDA device for CUDA tensor types.

+
layout
+

(torch.layout, optional) currently only support torch_strided.

+
+
+

Note

-
When running on CUDA, `row * col` must be less than \eqn{2^{59}} to
+
When running on CUDA, `row * col` must be less than \eqn{2^{59}} to
 prevent overflow during calculation.
-
- -

triu_indices(row, col, offset=0, dtype=torch.long, device='cpu', layout=torch.strided) -> Tensor

+
+
+
+

triu_indices(row, col, offset=0, dtype=torch.long, device='cpu', layout=torch.strided) -> Tensor

@@ -252,44 +163,43 @@ diagonal, and similarly a negative value includes just as many diagonals below the main diagonal. The main diagonal are the set of indices \(\lbrace (i, i) \rbrace\) for \(i \in [0, \min\{d_{1}, d_{2}\} - 1]\) where \(d_{1}, d_{2}\) are the dimensions of the matrix.

+
-

Examples

-
if (torch_is_installed()) {
-if (FALSE) {
-a = torch_triu_indices(3, 3)
-a
-a = torch_triu_indices(4, 3, -1)
-a
-a = torch_triu_indices(4, 3, 1)
-a
-}
-}
-
+
+

Examples

+
if (torch_is_installed()) {
+if (FALSE) {
+a = torch_triu_indices(3, 3)
+a
+a = torch_triu_indices(4, 3, -1)
+a
+a = torch_triu_indices(4, 3, 1)
+a
+}
+}
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_true_divide.html b/dev/reference/torch_true_divide.html index 4afb4420b..cc035395e 100644 --- a/dev/reference/torch_true_divide.html +++ b/dev/reference/torch_true_divide.html @@ -1,79 +1,18 @@ - - - - - - - -TRUE_divide — torch_true_divide • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -TRUE_divide — torch_true_divide • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,72 +111,67 @@

TRUE_divide

-
torch_true_divide(self, other)
- -

Arguments

- - - - - - - - - - -
self

(Tensor) the dividend

other

(Tensor or Scalar) the divisor

- -

true_divide(dividend, divisor) -> Tensor

+
+
torch_true_divide(self, other)
+
+
+

Arguments

+
self
+

(Tensor) the dividend

+
other
+

(Tensor or Scalar) the divisor

+
+
+

true_divide(dividend, divisor) -> Tensor

Performs "true division" that always computes the division in floating point. Analogous to division in Python 3 and equivalent to -torch_div except when both inputs have bool or integer scalar types, +torch_div except when both inputs have bool or integer scalar types, in which case they are cast to the default (floating) scalar type before the division.

$$ \mbox{out}_i = \frac{\mbox{dividend}_i}{\mbox{divisor}} $$

+
-

Examples

-
if (torch_is_installed()) {
-
-dividend = torch_tensor(c(5, 3), dtype=torch_int())
-divisor = torch_tensor(c(3, 2), dtype=torch_int())
-torch_true_divide(dividend, divisor)
-torch_true_divide(dividend, 2)
-}
-#> torch_tensor
-#>  2.5000
-#>  1.5000
-#> [ CPUFloatType{2} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+dividend = torch_tensor(c(5, 3), dtype=torch_int())
+divisor = torch_tensor(c(3, 2), dtype=torch_int())
+torch_true_divide(dividend, divisor)
+torch_true_divide(dividend, 2)
+}
+#> torch_tensor
+#>  2.5000
+#>  1.5000
+#> [ CPUFloatType{2} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_trunc.html b/dev/reference/torch_trunc.html index faeda7546..3100a769f 100644 --- a/dev/reference/torch_trunc.html +++ b/dev/reference/torch_trunc.html @@ -1,79 +1,18 @@ - - - - - - - -Trunc — torch_trunc • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Trunc — torch_trunc • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_trunc(self)
- -

Arguments

- - - - - - -
self

(Tensor) the input tensor.

- -

trunc(input, out=NULL) -> Tensor

+
+
torch_trunc(self)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
+
+

trunc(input, out=NULL) -> Tensor

Returns a new tensor with the truncated integer values of the elements of input.

+
-

Examples

-
if (torch_is_installed()) {
-
-a = torch_randn(c(4))
-a
-torch_trunc(a)
-}
-#> torch_tensor
-#> -0
-#> -0
-#>  0
-#> -1
-#> [ CPUFloatType{4} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+a = torch_randn(c(4))
+a
+torch_trunc(a)
+}
+#> torch_tensor
+#> -0
+#>  1
+#> -0
+#> -1
+#> [ CPUFloatType{4} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_unbind.html b/dev/reference/torch_unbind.html index 1c7223640..147906f66 100644 --- a/dev/reference/torch_unbind.html +++ b/dev/reference/torch_unbind.html @@ -1,79 +1,18 @@ - - - - - - - -Unbind — torch_unbind • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Unbind — torch_unbind • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_unbind(self, dim = 1L)
- -

Arguments

- - - - - - - - - - -
self

(Tensor) the tensor to unbind

dim

(int) dimension to remove

- -

unbind(input, dim=0) -> seq

+
+
torch_unbind(self, dim = 1L)
+
+
+

Arguments

+
self
+

(Tensor) the tensor to unbind

+
dim
+

(int) dimension to remove

+
+
+

unbind(input, dim=0) -> seq

Removes a tensor dimension.

Returns a tuple of all slices along a given dimension, already without it.

+
-

Examples

-
if (torch_is_installed()) {
-
-torch_unbind(torch_tensor(matrix(1:9, ncol = 3, byrow=TRUE)))
-}
-#> [[1]]
-#> torch_tensor
-#>  1
-#>  2
-#>  3
-#> [ CPULongType{3} ]
-#> 
-#> [[2]]
-#> torch_tensor
-#>  4
-#>  5
-#>  6
-#> [ CPULongType{3} ]
-#> 
-#> [[3]]
-#> torch_tensor
-#>  7
-#>  8
-#>  9
-#> [ CPULongType{3} ]
-#> 
-
+
+

Examples

+
if (torch_is_installed()) {
+
+torch_unbind(torch_tensor(matrix(1:9, ncol = 3, byrow=TRUE)))
+}
+#> [[1]]
+#> torch_tensor
+#>  1
+#>  2
+#>  3
+#> [ CPULongType{3} ]
+#> 
+#> [[2]]
+#> torch_tensor
+#>  4
+#>  5
+#>  6
+#> [ CPULongType{3} ]
+#> 
+#> [[3]]
+#> torch_tensor
+#>  7
+#>  8
+#>  9
+#> [ CPULongType{3} ]
+#> 
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_unique_consecutive.html b/dev/reference/torch_unique_consecutive.html index 8d76b0880..bacc3f1fd 100644 --- a/dev/reference/torch_unique_consecutive.html +++ b/dev/reference/torch_unique_consecutive.html @@ -1,79 +1,18 @@ - - - - - - - -Unique_consecutive — torch_unique_consecutive • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Unique_consecutive — torch_unique_consecutive • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,101 +111,92 @@

Unique_consecutive

-
torch_unique_consecutive(
-  self,
-  return_inverse = FALSE,
-  return_counts = FALSE,
-  dim = NULL
-)
- -

Arguments

- - - - - - - - - - - - - - - - - - -
self

(Tensor) the input tensor

return_inverse

(bool) Whether to also return the indices for where elements in the original input ended up in the returned unique list.

return_counts

(bool) Whether to also return the counts for each unique element.

dim

(int) the dimension to apply unique. If NULL, the unique of the flattened input is returned. default: NULL

- -

TEST

+
+
torch_unique_consecutive(
+  self,
+  return_inverse = FALSE,
+  return_counts = FALSE,
+  dim = NULL
+)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor

+
return_inverse
+

(bool) Whether to also return the indices for where elements in the original input ended up in the returned unique list.

+
return_counts
+

(bool) Whether to also return the counts for each unique element.

+
dim
+

(int) the dimension to apply unique. If NULL, the unique of the flattened input is returned. default: NULL

+
+
+

TEST

-

Eliminates all but the first element from every consecutive group of equivalent elements.

.. note:: This function is different from [`torch_unique`] in the sense that this function
+

Eliminates all but the first element from every consecutive group of equivalent elements.

.. note:: This function is different from [`torch_unique`] in the sense that this function
     only eliminates consecutive duplicate values. This semantics is similar to `std::unique`
     in C++.
-
+
+
-

Examples

-
if (torch_is_installed()) {
-x = torch_tensor(c(1, 1, 2, 2, 3, 1, 1, 2))
-output = torch_unique_consecutive(x)
-output
-torch_unique_consecutive(x, return_inverse=TRUE)
-torch_unique_consecutive(x, return_counts=TRUE)
-}
-#> [[1]]
-#> torch_tensor
-#>  1
-#>  2
-#>  3
-#>  1
-#>  2
-#> [ CPUFloatType{5} ]
-#> 
-#> [[2]]
-#> torch_tensor
-#> [ CPULongType{0} ]
-#> 
-#> [[3]]
-#> torch_tensor
-#>  2
-#>  2
-#>  1
-#>  2
-#>  1
-#> [ CPULongType{5} ]
-#> 
-
+
+

Examples

+
if (torch_is_installed()) {
+x = torch_tensor(c(1, 1, 2, 2, 3, 1, 1, 2))
+output = torch_unique_consecutive(x)
+output
+torch_unique_consecutive(x, return_inverse=TRUE)
+torch_unique_consecutive(x, return_counts=TRUE)
+}
+#> [[1]]
+#> torch_tensor
+#>  1
+#>  2
+#>  3
+#>  1
+#>  2
+#> [ CPUFloatType{5} ]
+#> 
+#> [[2]]
+#> torch_tensor
+#> [ CPULongType{0} ]
+#> 
+#> [[3]]
+#> torch_tensor
+#>  2
+#>  2
+#>  1
+#>  2
+#>  1
+#> [ CPULongType{5} ]
+#> 
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_unsafe_chunk.html b/dev/reference/torch_unsafe_chunk.html index bdbb8b9ad..055375a57 100644 --- a/dev/reference/torch_unsafe_chunk.html +++ b/dev/reference/torch_unsafe_chunk.html @@ -1,79 +1,18 @@ - - - - - - - -Unsafe_chunk — torch_unsafe_chunk • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Unsafe_chunk — torch_unsafe_chunk • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,34 +111,29 @@

Unsafe_chunk

-
torch_unsafe_chunk(self, chunks, dim = 1L)
- -

Arguments

- - - - - - - - - - - - - - -
self

(Tensor) the tensor to split

chunks

(int) number of chunks to return

dim

(int) dimension along which to split the tensor

- -

unsafe_chunk(input, chunks, dim=0) -> List of Tensors

+
+
torch_unsafe_chunk(self, chunks, dim = 1L)
+
+
+

Arguments

+
self
+

(Tensor) the tensor to split

+
chunks
+

(int) number of chunks to return

+
dim
+

(int) dimension along which to split the tensor

+
+
+

unsafe_chunk(input, chunks, dim=0) -> List of Tensors

-

Works like torch_chunk() but without enforcing the autograd restrictions +

Works like torch_chunk() but without enforcing the autograd restrictions on inplace modification of the outputs.

-

Warning

- +
+
+

Warning

This function is safe to use as long as only the input, or only the outputs @@ -224,32 +141,29 @@ are modified inplace after calling this function. It is user's responsibility to ensure that is the case. If both the input and one or more of the outputs are modified inplace, gradients computed by autograd will be silently incorrect.

+
+
-
- +
- - + + diff --git a/dev/reference/torch_unsafe_split.html b/dev/reference/torch_unsafe_split.html index b98bf0422..eaa427460 100644 --- a/dev/reference/torch_unsafe_split.html +++ b/dev/reference/torch_unsafe_split.html @@ -1,79 +1,18 @@ - - - - - - - -Unsafe_split — torch_unsafe_split • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Unsafe_split — torch_unsafe_split • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,35 +111,30 @@

Unsafe_split

-
torch_unsafe_split(self, split_size, dim = 1L)
- -

Arguments

- - - - - - - - - - - - - - -
self

(Tensor) tensor to split.

split_size

(int) size of a single chunk or -list of sizes for each chunk

dim

(int) dimension along which to split the tensor.

- -

unsafe_split(tensor, split_size_or_sections, dim=0) -> List of Tensors

+
+
torch_unsafe_split(self, split_size, dim = 1L)
+
+
+

Arguments

+
self
+

(Tensor) tensor to split.

+
split_size
+

(int) size of a single chunk or +list of sizes for each chunk

+
dim
+

(int) dimension along which to split the tensor.

+
+
+

unsafe_split(tensor, split_size_or_sections, dim=0) -> List of Tensors

-

Works like torch_split() but without enforcing the autograd restrictions +

Works like torch_split() but without enforcing the autograd restrictions on inplace modification of the outputs.

-

Warning

- +
+
+

Warning

This function is safe to use as long as only the input, or only the outputs @@ -225,32 +142,29 @@ are modified inplace after calling this function. It is user's responsibility to ensure that is the case. If both the input and one or more of the outputs are modified inplace, gradients computed by autograd will be silently incorrect.

+
+
-
- +
- - + + diff --git a/dev/reference/torch_unsqueeze.html b/dev/reference/torch_unsqueeze.html index b7627039c..c5da35ccc 100644 --- a/dev/reference/torch_unsqueeze.html +++ b/dev/reference/torch_unsqueeze.html @@ -1,79 +1,18 @@ - - - - - - - -Unsqueeze — torch_unsqueeze • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Unsqueeze — torch_unsqueeze • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,23 +111,19 @@

Unsqueeze

-
torch_unsqueeze(self, dim)
- -

Arguments

- - - - - - - - - - -
self

(Tensor) the input tensor.

dim

(int) the index at which to insert the singleton dimension

- -

unsqueeze(input, dim) -> Tensor

+
+
torch_unsqueeze(self, dim)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
dim
+

(int) the index at which to insert the singleton dimension

+
+
+

unsqueeze(input, dim) -> Tensor

@@ -215,46 +133,45 @@ specified position.

A dim value within the range [-input.dim() - 1, input.dim() + 1) can be used. Negative dim will correspond to unsqueeze applied at dim = dim + input.dim() + 1.

+
-

Examples

-
if (torch_is_installed()) {
-
-x = torch_tensor(c(1, 2, 3, 4))
-torch_unsqueeze(x, 1)
-torch_unsqueeze(x, 2)
-}
-#> torch_tensor
-#>  1
-#>  2
-#>  3
-#>  4
-#> [ CPUFloatType{4,1} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+x = torch_tensor(c(1, 2, 3, 4))
+torch_unsqueeze(x, 1)
+torch_unsqueeze(x, 2)
+}
+#> torch_tensor
+#>  1
+#>  2
+#>  3
+#>  4
+#> [ CPUFloatType{4,1} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_vander.html b/dev/reference/torch_vander.html index 0f42c8144..e09c92477 100644 --- a/dev/reference/torch_vander.html +++ b/dev/reference/torch_vander.html @@ -1,79 +1,18 @@ - - - - - - - -Vander — torch_vander • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Vander — torch_vander • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,29 +111,23 @@

Vander

-
torch_vander(x, N = NULL, increasing = FALSE)
- -

Arguments

- - - - - - - - - - - - - - -
x

(Tensor) 1-D input tensor.

N

(int, optional) Number of columns in the output. If N is not specified, -a square array is returned \((N = len(x))\).

increasing

(bool, optional) Order of the powers of the columns. If TRUE, -the powers increase from left to right, if FALSE (the default) they are reversed.

- -

vander(x, N=None, increasing=FALSE) -> Tensor

+
+
torch_vander(x, N = NULL, increasing = FALSE)
+
+
+

Arguments

+
x
+

(Tensor) 1-D input tensor.

+
N
+

(int, optional) Number of columns in the output. If N is not specified, +a square array is returned \((N = len(x))\).

+
increasing
+

(bool, optional) Order of the powers of the columns. If TRUE, +the powers increase from left to right, if FALSE (the default) they are reversed.

+
+
+

vander(x, N=None, increasing=FALSE) -> Tensor

@@ -222,47 +138,46 @@ If increasing is TRUE, the order of the columns is reversed \(x^0, x^1, ..., x^{(N-1)}\). Such a matrix with a geometric progression in each row is named for Alexandre-Theophile Vandermonde.

+
-

Examples

-
if (torch_is_installed()) {
-
-x <- torch_tensor(c(1, 2, 3, 5))
-torch_vander(x)
-torch_vander(x, N=3)
-torch_vander(x, N=3, increasing=TRUE)
-}
-#> torch_tensor
-#>   1   1   1
-#>   1   2   4
-#>   1   3   9
-#>   1   5  25
-#> [ CPUFloatType{4,3} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+x <- torch_tensor(c(1, 2, 3, 5))
+torch_vander(x)
+torch_vander(x, N=3)
+torch_vander(x, N=3, increasing=TRUE)
+}
+#> torch_tensor
+#>   1   1   1
+#>   1   2   4
+#>   1   3   9
+#>   1   5  25
+#> [ CPUFloatType{4,3} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_var.html b/dev/reference/torch_var.html index cef75d6f0..d2b8605eb 100644 --- a/dev/reference/torch_var.html +++ b/dev/reference/torch_var.html @@ -1,79 +1,18 @@ - - - - - - - -Var — torch_var • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Var — torch_var • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_var(self, dim, correction, unbiased = TRUE, keepdim = FALSE)
- -

Arguments

- - - - - - - - - - - - - - - - - - - - - - -
self

(Tensor) the input tensor.

dim

(int or tuple of ints) the dimension or dimensions to reduce.

correction

The type of correction.

unbiased

(bool) whether to use the unbiased estimation or not

keepdim

(bool) whether the output tensor has dim retained or not.

- -

var(input, unbiased=TRUE) -> Tensor

+
+
torch_var(self, dim, correction, unbiased = TRUE, keepdim = FALSE)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
dim
+

(int or tuple of ints) the dimension or dimensions to reduce.

+
correction
+

The type of correction.

+
unbiased
+

(bool) whether to use the unbiased estimation or not

+
keepdim
+

(bool) whether the output tensor has dim retained or not.

+
+
+

var(input, unbiased=TRUE) -> Tensor

Returns the variance of all elements in the input tensor.

If unbiased is FALSE, then the variance will be calculated via the biased estimator. Otherwise, Bessel's correction will be used.

-

var(input, dim, keepdim=False, unbiased=TRUE, out=NULL) -> Tensor

- +
+
+

var(input, dim, keepdim=False, unbiased=TRUE, out=NULL) -> Tensor

@@ -233,55 +146,54 @@ biased estimator. Otherwise, Bessel's correction will be used.

dimension dim.

If keepdim is TRUE, the output tensor is of the same size as input except in the dimension(s) dim where it is of size 1. -Otherwise, dim is squeezed (see torch_squeeze), resulting in the +Otherwise, dim is squeezed (see torch_squeeze), resulting in the output tensor having 1 (or len(dim)) fewer dimension(s).

If unbiased is FALSE, then the variance will be calculated via the biased estimator. Otherwise, Bessel's correction will be used.

+
-

Examples

-
if (torch_is_installed()) {
-
-a = torch_randn(c(1, 3))
-a
-torch_var(a)
-
-
-a = torch_randn(c(4, 4))
-a
-torch_var(a, 1)
-}
-#> torch_tensor
-#>  0.2976
-#>  0.9193
-#>  0.2206
-#>  0.5509
-#> [ CPUFloatType{4} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+a = torch_randn(c(1, 3))
+a
+torch_var(a)
+
+
+a = torch_randn(c(4, 4))
+a
+torch_var(a, 1)
+}
+#> torch_tensor
+#>  2.2763
+#>  1.1094
+#>  0.1851
+#>  0.1529
+#> [ CPUFloatType{4} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_var_mean.html b/dev/reference/torch_var_mean.html index 56df8f585..bb31c3590 100644 --- a/dev/reference/torch_var_mean.html +++ b/dev/reference/torch_var_mean.html @@ -1,79 +1,18 @@ - - - - - - - -Var_mean — torch_var_mean • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Var_mean — torch_var_mean • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,43 +111,34 @@

Var_mean

-
torch_var_mean(self, dim, correction, unbiased = TRUE, keepdim = FALSE)
- -

Arguments

- - - - - - - - - - - - - - - - - - - - - - -
self

(Tensor) the input tensor.

dim

(int or tuple of ints) the dimension or dimensions to reduce.

correction

The type of correction.

unbiased

(bool) whether to use the unbiased estimation or not

keepdim

(bool) whether the output tensor has dim retained or not.

- -

var_mean(input, unbiased=TRUE) -> (Tensor, Tensor)

+
+
torch_var_mean(self, dim, correction, unbiased = TRUE, keepdim = FALSE)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
dim
+

(int or tuple of ints) the dimension or dimensions to reduce.

+
correction
+

The type of correction.

+
unbiased
+

(bool) whether to use the unbiased estimation or not

+
keepdim
+

(bool) whether the output tensor has dim retained or not.

+
+
+

var_mean(input, unbiased=TRUE) -> (Tensor, Tensor)

Returns the variance and mean of all elements in the input tensor.

If unbiased is FALSE, then the variance will be calculated via the biased estimator. Otherwise, Bessel's correction will be used.

-

var_mean(input, dim, keepdim=False, unbiased=TRUE) -> (Tensor, Tensor)

- +
+
+

var_mean(input, dim, keepdim=False, unbiased=TRUE) -> (Tensor, Tensor)

@@ -233,65 +146,64 @@ biased estimator. Otherwise, Bessel's correction will be used.

dimension dim.

If keepdim is TRUE, the output tensor is of the same size as input except in the dimension(s) dim where it is of size 1. -Otherwise, dim is squeezed (see torch_squeeze), resulting in the +Otherwise, dim is squeezed (see torch_squeeze), resulting in the output tensor having 1 (or len(dim)) fewer dimension(s).

If unbiased is FALSE, then the variance will be calculated via the biased estimator. Otherwise, Bessel's correction will be used.

+
-

Examples

-
if (torch_is_installed()) {
-
-a = torch_randn(c(1, 3))
-a
-torch_var_mean(a)
-
-
-a = torch_randn(c(4, 4))
-a
-torch_var_mean(a, 1)
-}
-#> [[1]]
-#> torch_tensor
-#>  0.2998
-#>  1.6334
-#>  1.4659
-#>  0.2498
-#> [ CPUFloatType{4} ]
-#> 
-#> [[2]]
-#> torch_tensor
-#>  0.2094
-#> -0.2655
-#> -0.4453
-#> -0.0898
-#> [ CPUFloatType{4} ]
-#> 
-
+
+

Examples

+
if (torch_is_installed()) {
+
+a = torch_randn(c(1, 3))
+a
+torch_var_mean(a)
+
+
+a = torch_randn(c(4, 4))
+a
+torch_var_mean(a, 1)
+}
+#> [[1]]
+#> torch_tensor
+#>  0.2556
+#>  0.5874
+#>  0.5766
+#>  1.2497
+#> [ CPUFloatType{4} ]
+#> 
+#> [[2]]
+#> torch_tensor
+#> -0.3067
+#>  0.8035
+#> -0.3865
+#>  0.7109
+#> [ CPUFloatType{4} ]
+#> 
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_vdot.html b/dev/reference/torch_vdot.html index 2c3a1df65..80c7acde6 100644 --- a/dev/reference/torch_vdot.html +++ b/dev/reference/torch_vdot.html @@ -1,79 +1,18 @@ - - - - - - - -Vdot — torch_vdot • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Vdot — torch_vdot • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_vdot(self, other)
- -

Arguments

- - - - - - - - - - -
self

(Tensor) first tensor in the dot product. Its conjugate is used -if it's complex.

other

(Tensor) second tensor in the dot product.

- -

Note

+
+
torch_vdot(self, other)
+
+
+

Arguments

+
self
+

(Tensor) first tensor in the dot product. Its conjugate is used +if it's complex.

+
other
+

(Tensor) second tensor in the dot product.

+
+
+

Note

This function does not broadcast .

-

vdot(input, other, *, out=None) -> Tensor

- +
+
+

vdot(input, other, *, out=None) -> Tensor

Computes the dot product (inner product) of two tensors. The vdot(a, b) function handles complex numbers differently than dot(a, b). If the first argument is complex, the complex conjugate of the first argument is used for the calculation of the dot product.

+
-

Examples

-
if (torch_is_installed()) {
-
-torch_vdot(torch_tensor(c(2, 3)), torch_tensor(c(2, 1)))
-if (FALSE) {
-a <- torch_tensor(list(1 +2i, 3 - 1i))
-b <- torch_tensor(list(2 +1i, 4 - 0i))
-torch_vdot(a, b)
-torch_vdot(b, a)
-}
-}
-
+
+

Examples

+
if (torch_is_installed()) {
+
+torch_vdot(torch_tensor(c(2, 3)), torch_tensor(c(2, 1)))
+if (FALSE) {
+a <- torch_tensor(list(1 +2i, 3 - 1i))
+b <- torch_tensor(list(2 +1i, 4 - 0i))
+torch_vdot(a, b)
+torch_vdot(b, a)
+}
+}
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_view_as_complex.html b/dev/reference/torch_view_as_complex.html index 174c7b127..08ecc054b 100644 --- a/dev/reference/torch_view_as_complex.html +++ b/dev/reference/torch_view_as_complex.html @@ -1,79 +1,18 @@ - - - - - - - -View_as_complex — torch_view_as_complex • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -View_as_complex — torch_view_as_complex • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,19 +111,17 @@

View_as_complex

-
torch_view_as_complex(self)
- -

Arguments

- - - - - - -
self

(Tensor) the input tensor.

- -

view_as_complex(input) -> Tensor

+
+
torch_view_as_complex(self)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
+
+

view_as_complex(input) -> Tensor

@@ -210,50 +130,50 @@ tensor of size \(m1, m2, \dots, mi, 2\), this function returns a new complex tensor of size \(m1, m2, \dots, mi\) where the last dimension of the input tensor is expected to represent the real and imaginary components of complex numbers.

-

Warning

- +
+
+

Warning

torch_view_as_complex is only supported for tensors with -torch_dtype torch_float64() and torch_float32(). The input is +torch_dtype torch_float64() and torch_float32(). The input is expected to have the last dimension of size 2. In addition, the tensor must have a stride of 1 for its last dimension. The strides of all other dimensions must be even numbers.

+
-

Examples

-
if (torch_is_installed()) {
-if (FALSE) {
-x=torch_randn(c(4, 2))
-x
-torch_view_as_complex(x)
-}
-}
-
+
+

Examples

+
if (torch_is_installed()) {
+if (FALSE) {
+x=torch_randn(c(4, 2))
+x
+torch_view_as_complex(x)
+}
+}
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_view_as_real.html b/dev/reference/torch_view_as_real.html index a7ab1cabb..35cf8efd1 100644 --- a/dev/reference/torch_view_as_real.html +++ b/dev/reference/torch_view_as_real.html @@ -1,79 +1,18 @@ - - - - - - - -View_as_real — torch_view_as_real • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -View_as_real — torch_view_as_real • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,19 +111,17 @@

View_as_real

-
torch_view_as_real(self)
- -

Arguments

- - - - - - -
self

(Tensor) the input tensor.

- -

view_as_real(input) -> Tensor

+
+
torch_view_as_real(self)
+
+
+

Arguments

+
self
+

(Tensor) the input tensor.

+
+
+

view_as_real(input) -> Tensor

@@ -209,47 +129,47 @@ size \(m1, m2, \dots, mi\), this function returns a new real tensor of size \(m1, m2, \dots, mi, 2\), where the last dimension of size 2 represents the real and imaginary components of complex numbers.

-

Warning

- +
+
+

Warning

torch_view_as_real() is only supported for tensors with complex dtypes.

+
-

Examples

-
if (torch_is_installed()) {
-
-if (FALSE) {
-x <- torch_randn(4, dtype=torch_cfloat())
-x
-torch_view_as_real(x)
-}
-}
-
+
+

Examples

+
if (torch_is_installed()) {
+
+if (FALSE) {
+x <- torch_randn(4, dtype=torch_cfloat())
+x
+torch_view_as_real(x)
+}
+}
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_vstack.html b/dev/reference/torch_vstack.html index 6f2df597c..b67bfe3f7 100644 --- a/dev/reference/torch_vstack.html +++ b/dev/reference/torch_vstack.html @@ -1,79 +1,18 @@ - - - - - - - -Vstack — torch_vstack • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Vstack — torch_vstack • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_vstack(tensors)
- -

Arguments

- - - - - - -
tensors

(sequence of Tensors) sequence of tensors to concatenate

- -

vstack(tensors, *, out=None) -> Tensor

+
+
torch_vstack(tensors)
+
+
+

Arguments

+
tensors
+

(sequence of Tensors) sequence of tensors to concatenate

+
+
+

vstack(tensors, *, out=None) -> Tensor

Stack tensors in sequence vertically (row wise).

This is equivalent to concatenation along the first axis after all 1-D tensors -have been reshaped by torch_atleast_2d().

+have been reshaped by torch_atleast_2d().

+
-

Examples

-
if (torch_is_installed()) {
-
-a <- torch_tensor(c(1, 2, 3))
-b <- torch_tensor(c(4, 5, 6))
-torch_vstack(list(a,b))
-a <- torch_tensor(rbind(1,2,3))
-b <- torch_tensor(rbind(4,5,6))
-torch_vstack(list(a,b))
-}
-#> torch_tensor
-#>  1
-#>  2
-#>  3
-#>  4
-#>  5
-#>  6
-#> [ CPUFloatType{6,1} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+a <- torch_tensor(c(1, 2, 3))
+b <- torch_tensor(c(4, 5, 6))
+torch_vstack(list(a,b))
+a <- torch_tensor(rbind(1,2,3))
+b <- torch_tensor(rbind(4,5,6))
+torch_vstack(list(a,b))
+}
+#> torch_tensor
+#>  1
+#>  2
+#>  3
+#>  4
+#>  5
+#>  6
+#> [ CPUFloatType{6,1} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_where.html b/dev/reference/torch_where.html index 8a76db75c..a52c2aaae 100644 --- a/dev/reference/torch_where.html +++ b/dev/reference/torch_where.html @@ -1,79 +1,18 @@ - - - - - - - -Where — torch_where • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Where — torch_where • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_where(condition, self, other)
- -

Arguments

- - - - - - - - - - - - - - -
condition

(BoolTensor) When TRUE (nonzero), yield x, otherwise yield y

self

(Tensor) values selected at indices where condition is TRUE

other

(Tensor) values selected at indices where condition is FALSE

- -

Note

+
+
torch_where(condition, self, other)
+
+
+

Arguments

+
condition
+

(BoolTensor) When TRUE (nonzero), yield x, otherwise yield y

+
self
+

(Tensor) values selected at indices where condition is TRUE

+
other
+

(Tensor) values selected at indices where condition is FALSE

+
+
+

Note

-
The tensors `condition`, `x`, `y` must be broadcastable .
-
- -

See also torch_nonzero().

-

where(condition, x, y) -> Tensor

+
The tensors `condition`, `x`, `y` must be broadcastable .
+
+

See also torch_nonzero().

+
+
+

where(condition, x, y) -> Tensor

@@ -229,53 +146,53 @@ \end{array} \right. $$

-

where(condition) -> tuple of LongTensor

- +
+
+

where(condition) -> tuple of LongTensor

torch_where(condition) is identical to torch_nonzero(condition, as_tuple=TRUE).

+
-

Examples

-
if (torch_is_installed()) {
-
-if (FALSE) {
-x = torch_randn(c(3, 2))
-y = torch_ones(c(3, 2))
-x
-torch_where(x > 0, x, y)
-}
-
-
-
-}
-
+
+

Examples

+
if (torch_is_installed()) {
+
+if (FALSE) {
+x = torch_randn(c(3, 2))
+y = torch_ones(c(3, 2))
+x
+torch_where(x > 0, x, y)
+}
+
+
+
+}
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_zeros.html b/dev/reference/torch_zeros.html index cc0d30aa7..8d92aa557 100644 --- a/dev/reference/torch_zeros.html +++ b/dev/reference/torch_zeros.html @@ -1,79 +1,18 @@ - - - - - - - -Zeros — torch_zeros • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Zeros — torch_zeros • torch - - - - - - - - + + -
-
- -
- -
+
-
torch_zeros(
-  ...,
-  names = NULL,
-  dtype = NULL,
-  layout = torch_strided(),
-  device = NULL,
-  requires_grad = FALSE
-)
- -

Arguments

- - - - - - - - - - - - - - - - - - - - - - - - - - -
...

a sequence of integers defining the shape of the output tensor. Can be a variable number of arguments or a collection like a list or tuple.

names

optional dimension names

dtype

(torch.dtype, optional) the desired data type of returned tensor. Default: if NULL, uses a global default (see torch_set_default_tensor_type).

layout

(torch.layout, optional) the desired layout of returned Tensor. Default: torch_strided.

device

(torch.device, optional) the desired device of returned tensor. Default: if NULL, uses the current device for the default tensor type (see torch_set_default_tensor_type). device will be the CPU for CPU tensor types and the current CUDA device for CUDA tensor types.

requires_grad

(bool, optional) If autograd should record operations on the returned tensor. Default: FALSE.

- -

zeros(*size, out=NULL, dtype=NULL, layout=torch.strided, device=NULL, requires_grad=False) -> Tensor

+
+
torch_zeros(
+  ...,
+  names = NULL,
+  dtype = NULL,
+  layout = torch_strided(),
+  device = NULL,
+  requires_grad = FALSE
+)
+
+
+

Arguments

+
...
+

a sequence of integers defining the shape of the output tensor. Can be a variable number of arguments or a collection like a list or tuple.

+
names
+

optional dimension names

+
dtype
+

(torch.dtype, optional) the desired data type of returned tensor. Default: if NULL, uses a global default (see torch_set_default_tensor_type).

+
layout
+

(torch.layout, optional) the desired layout of returned Tensor. Default: torch_strided.

+
device
+

(torch.device, optional) the desired device of returned tensor. Default: if NULL, uses the current device for the default tensor type (see torch_set_default_tensor_type). device will be the CPU for CPU tensor types and the current CUDA device for CUDA tensor types.

+
requires_grad
+

(bool, optional) If autograd should record operations on the returned tensor. Default: FALSE.

+
+
+

zeros(*size, out=NULL, dtype=NULL, layout=torch.strided, device=NULL, requires_grad=False) -> Tensor

Returns a tensor filled with the scalar value 0, with the shape defined by the variable argument size.

+
-

Examples

-
if (torch_is_installed()) {
-
-torch_zeros(c(2, 3))
-torch_zeros(c(5))
-}
-#> torch_tensor
-#>  0
-#>  0
-#>  0
-#>  0
-#>  0
-#> [ CPUFloatType{5} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+torch_zeros(c(2, 3))
+torch_zeros(c(5))
+}
+#> torch_tensor
+#>  0
+#>  0
+#>  0
+#>  0
+#>  0
+#> [ CPUFloatType{5} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/torch_zeros_like.html b/dev/reference/torch_zeros_like.html index c43e3111e..a6c1f27bd 100644 --- a/dev/reference/torch_zeros_like.html +++ b/dev/reference/torch_zeros_like.html @@ -1,79 +1,18 @@ - - - - - - - -Zeros_like — torch_zeros_like • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Zeros_like — torch_zeros_like • torch - - - - - - - - + + -
-
- -
- -
+
@@ -189,96 +111,84 @@

Zeros_like

-
torch_zeros_like(
-  input,
-  dtype = NULL,
-  layout = torch_strided(),
-  device = NULL,
-  requires_grad = FALSE,
-  memory_format = torch_preserve_format()
-)
- -

Arguments

- - - - - - - - - - - - - - - - - - - - - - - - - - -
input

(Tensor) the size of input will determine size of the output tensor.

dtype

(torch.dtype, optional) the desired data type of returned Tensor. Default: if NULL, defaults to the dtype of input.

layout

(torch.layout, optional) the desired layout of returned tensor. Default: if NULL, defaults to the layout of input.

device

(torch.device, optional) the desired device of returned tensor. Default: if NULL, defaults to the device of input.

requires_grad

(bool, optional) If autograd should record operations on the returned tensor. Default: FALSE.

memory_format

(torch.memory_format, optional) the desired memory format of returned Tensor. Default: torch_preserve_format.

- -

zeros_like(input, dtype=NULL, layout=NULL, device=NULL, requires_grad=False, memory_format=torch.preserve_format) -> Tensor

+
+
torch_zeros_like(
+  input,
+  dtype = NULL,
+  layout = torch_strided(),
+  device = NULL,
+  requires_grad = FALSE,
+  memory_format = torch_preserve_format()
+)
+
+
+

Arguments

+
input
+

(Tensor) the size of input will determine size of the output tensor.

+
dtype
+

(torch.dtype, optional) the desired data type of returned Tensor. Default: if NULL, defaults to the dtype of input.

+
layout
+

(torch.layout, optional) the desired layout of returned tensor. Default: if NULL, defaults to the layout of input.

+
device
+

(torch.device, optional) the desired device of returned tensor. Default: if NULL, defaults to the device of input.

+
requires_grad
+

(bool, optional) If autograd should record operations on the returned tensor. Default: FALSE.

+
memory_format
+

(torch.memory_format, optional) the desired memory format of returned Tensor. Default: torch_preserve_format.

+
+
+

zeros_like(input, dtype=NULL, layout=NULL, device=NULL, requires_grad=False, memory_format=torch.preserve_format) -> Tensor

Returns a tensor filled with the scalar value 0, with the same size as input. torch_zeros_like(input) is equivalent to torch_zeros(input.size(), dtype=input.dtype, layout=input.layout, device=input.device).

-

Warning

- +
+
+

Warning

As of 0.4, this function does not support an out keyword. As an alternative, the old torch_zeros_like(input, out=output) is equivalent to torch_zeros(input.size(), out=output).

+
-

Examples

-
if (torch_is_installed()) {
-
-input = torch_empty(c(2, 3))
-torch_zeros_like(input)
-}
-#> torch_tensor
-#>  0  0  0
-#>  0  0  0
-#> [ CPUFloatType{2,3} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+input = torch_empty(c(2, 3))
+torch_zeros_like(input)
+}
+#> torch_tensor
+#>  0  0  0
+#>  0  0  0
+#> [ CPUFloatType{2,3} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/with_detect_anomaly.html b/dev/reference/with_detect_anomaly.html index 405c1d3a5..c41754ee4 100644 --- a/dev/reference/with_detect_anomaly.html +++ b/dev/reference/with_detect_anomaly.html @@ -1,85 +1,24 @@ - - - - - - - -Context-manager that enable anomaly detection for the autograd engine. — with_detect_anomaly • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Context-manager that enable anomaly detection for the autograd engine. — with_detect_anomaly • torch - - - - - - - - + + -
-
- -
- -
+
-

This does two things:

    -
  • Running the forward pass with detection enabled will allow the backward +

    This does two things:

    • Running the forward pass with detection enabled will allow the backward pass to print the traceback of the forward operation that created the failing backward function.

    • Any backward computation that generate "nan" value will raise an error.

    • -
    +
+
+
with_detect_anomaly(code)
-
with_detect_anomaly(code)
- -

Arguments

- - - - - - -
code

Cod that will be execued in the detect anomaly context.

- -

Warning

- +
+

Arguments

+
code
+

Cod that will be execued in the detect anomaly context.

+
+
+

Warning

This mode should be enabled only for debugging as the different tests will slow down your program execution.

+
-

Examples

-
if (torch_is_installed()) {
-x <- torch_randn(2, requires_grad = TRUE)
-y <- torch_randn(1)
-b <- (x^y)$sum()
-y$add_(1)
-
-try({
-
-b$backward()
-
-with_detect_anomaly({
-  b$backward()
-})
-
-})
-
-}
-#> Error in (function (self, inputs, gradient, retain_graph, create_graph)  : 
-#>   one of the variables needed for gradient computation has been modified by an inplace operation: [CPUFloatType [1]] is at version 1; expected version 0 instead. Hint: enable anomaly detection to find the operation that failed to compute its gradient, with torch.autograd.set_detect_anomaly(True).
-
+
+

Examples

+
if (torch_is_installed()) {
+x <- torch_randn(2, requires_grad = TRUE)
+y <- torch_randn(1)
+b <- (x^y)$sum()
+y$add_(1)
+
+try({
+
+b$backward()
+
+with_detect_anomaly({
+  b$backward()
+})
+
+})
+
+}
+#> Error in (function (self, inputs, gradient, retain_graph, create_graph)  : 
+#>   one of the variables needed for gradient computation has been modified by an inplace operation: [CPUFloatType [1]] is at version 1; expected version 0 instead. Hint: enable anomaly detection to find the operation that failed to compute its gradient, with torch.autograd.set_detect_anomaly(True).
+
+
+
-
- +
- - + + diff --git a/dev/reference/with_enable_grad.html b/dev/reference/with_enable_grad.html index fad2bbe42..f40b6a8ae 100644 --- a/dev/reference/with_enable_grad.html +++ b/dev/reference/with_enable_grad.html @@ -1,80 +1,19 @@ - - - - - - - -Enable grad — with_enable_grad • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Enable grad — with_enable_grad • torch - - - - - - - - + + -
-
- -
- -
+

Context-manager that enables gradient calculation. -Enables gradient calculation, if it has been disabled via with_no_grad.

+Enables gradient calculation, if it has been disabled via with_no_grad.

-
with_enable_grad(code)
- -

Arguments

- - - - - - -
code

code to be executed with gradient recording.

- -

Details

+
+
with_enable_grad(code)
+
+
+

Arguments

+
code
+

code to be executed with gradient recording.

+
+
+

Details

This context manager is thread local; it will not affect computation in other threads.

+
-

Examples

-
if (torch_is_installed()) {
-
-x <- torch_tensor(1, requires_grad=TRUE)
-with_no_grad({
-  with_enable_grad({
-    y = x * 2
-  })
-})
-y$backward()
-x$grad
-
-}
-#> torch_tensor
-#>  2
-#> [ CPUFloatType{1} ]
-
+
+

Examples

+
if (torch_is_installed()) {
+
+x <- torch_tensor(1, requires_grad=TRUE)
+with_no_grad({
+  with_enable_grad({
+    y = x * 2
+  })
+})
+y$backward()
+x$grad
+
+}
+#> torch_tensor
+#>  2
+#> [ CPUFloatType{1} ]
+
+
+
-
- +
- - + + diff --git a/dev/reference/with_no_grad.html b/dev/reference/with_no_grad.html index 398e2fcde..2c3890238 100644 --- a/dev/reference/with_no_grad.html +++ b/dev/reference/with_no_grad.html @@ -1,79 +1,18 @@ - - - - - - - -Temporarily modify gradient recording. — with_no_grad • torch - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Temporarily modify gradient recording. — with_no_grad • torch - - - - - - + + - - -
-
- -
- -
+
@@ -189,56 +111,52 @@

Temporarily modify gradient recording.

-
with_no_grad(code)
- -

Arguments

- - - - - - -
code

code to be executed with no gradient recording.

- - -

Examples

-
if (torch_is_installed()) {
-x <- torch_tensor(runif(5), requires_grad = TRUE)
-with_no_grad({
-  x$sub_(torch_tensor(as.numeric(1:5)))
-})
-x
-x$grad
-
-}
-#> torch_tensor
-#> [ Tensor (undefined) ]
-
+
+
with_no_grad(code)
+
+ +
+

Arguments

+
code
+

code to be executed with no gradient recording.

+
+ +
+

Examples

+
if (torch_is_installed()) {
+x <- torch_tensor(runif(5), requires_grad = TRUE)
+with_no_grad({
+  x$sub_(torch_tensor(as.numeric(1:5)))
+})
+x
+x$grad
+
+}
+#> torch_tensor
+#> [ Tensor (undefined) ]
+
+
+
-
- +
- - + + diff --git a/dev/sitemap.xml b/dev/sitemap.xml new file mode 100644 index 000000000..cda1543cb --- /dev/null +++ b/dev/sitemap.xml @@ -0,0 +1,2019 @@ + + + + /LICENSE-text.html + + + /LICENSE.html + + + /articles/distributions.html + + + /articles/examples/basic-autograd.html + + + /articles/examples/basic-nn-module.html + + + /articles/examples/dataset.html + + + /articles/examples/index.html + + + /articles/extending-autograd.html + + + /articles/index.html + + + /articles/indexing.html + + + /articles/installation.html + + + /articles/loading-data.html + + + /articles/python-to-r.html + + + /articles/serialization.html + + + /articles/tensor/index.html + + + /articles/tensor-creation.html + + + /articles/torchscript.html + + + /articles/using-autograd.html + + + /authors.html + + + /index.html + + + /news/index.html + + + /reference/AutogradContext.html + + + /reference/Constraint.html + + + /reference/Distribution.html + + + /reference/as_array.html + + + /reference/autograd_backward.html + + + /reference/autograd_function.html + + + /reference/autograd_grad.html + + + /reference/autograd_set_grad_mode.html + + + /reference/backends_mkl_is_available.html + + + /reference/backends_mkldnn_is_available.html + + + /reference/backends_openmp_is_available.html + + + /reference/broadcast_all.html + + + /reference/call_torch_function.html + + + /reference/contrib_sort_vertices.html + + + /reference/cuda_current_device.html + + + /reference/cuda_device_count.html + + + /reference/cuda_get_device_capability.html + + + /reference/cuda_is_available.html + + + /reference/dataloader.html + + + /reference/dataloader_make_iter.html + + + /reference/dataloader_next.html + + + /reference/dataset.html + + + /reference/dataset_subset.html + + + /reference/default_dtype.html + + + /reference/distr_bernoulli.html + + + /reference/distr_categorical.html + + + /reference/distr_chi2.html + + + /reference/distr_gamma.html + + + /reference/distr_mixture_same_family.html + + + /reference/distr_multivariate_normal.html + + + /reference/distr_normal.html + + + /reference/distr_poisson.html + + + /reference/enumerate.dataloader.html + + + /reference/enumerate.html + + + /reference/get_install_libs_url.html + + + /reference/index.html + + + /reference/install_torch.html + + + /reference/install_torch_from_file.html + + + /reference/is_dataloader.html + + + /reference/is_nn_buffer.html + + + /reference/is_nn_module.html + + + /reference/is_nn_parameter.html + + + /reference/is_optimizer.html + + + /reference/is_torch_device.html + + + /reference/is_torch_dtype.html + + + /reference/is_torch_layout.html + + + /reference/is_torch_memory_format.html + + + /reference/is_torch_qscheme.html + + + /reference/is_undefined_tensor.html + + + /reference/jit_compile.html + + + /reference/jit_load.html + + + /reference/jit_save.html + + + /reference/jit_save_for_mobile.html + + + /reference/jit_scalar.html + + + /reference/jit_trace.html + + + /reference/jit_trace_module.html + + + /reference/jit_tuple.html + + + /reference/linalg_cholesky.html + + + /reference/linalg_cholesky_ex.html + + + /reference/linalg_cond.html + + + /reference/linalg_det.html + + + /reference/linalg_eig.html + + + /reference/linalg_eigh.html + + + /reference/linalg_eigvals.html + + + /reference/linalg_eigvalsh.html + + + /reference/linalg_householder_product.html + + + /reference/linalg_inv.html + + + /reference/linalg_inv_ex.html + + + /reference/linalg_lstsq.html + + + /reference/linalg_matrix_norm.html + + + /reference/linalg_matrix_power.html + + + /reference/linalg_matrix_rank.html + + + /reference/linalg_multi_dot.html + + + /reference/linalg_norm.html + + + /reference/linalg_pinv.html + + + /reference/linalg_qr.html + + + /reference/linalg_slogdet.html + + + /reference/linalg_solve.html + + + /reference/linalg_svd.html + + + /reference/linalg_svdvals.html + + + /reference/linalg_tensorinv.html + + + /reference/linalg_tensorsolve.html + + + /reference/linalg_vector_norm.html + + + /reference/load_state_dict.html + + + /reference/lr_lambda.html + + + /reference/lr_multiplicative.html + + + /reference/lr_one_cycle.html + + + /reference/lr_scheduler.html + + + /reference/lr_step.html + + + /reference/nn_adaptive_avg_pool1d.html + + + /reference/nn_adaptive_avg_pool2d.html + + + /reference/nn_adaptive_avg_pool3d.html + + + /reference/nn_adaptive_log_softmax_with_loss.html + + + /reference/nn_adaptive_max_pool1d.html + + + /reference/nn_adaptive_max_pool2d.html + + + /reference/nn_adaptive_max_pool3d.html + + + /reference/nn_avg_pool1d.html + + + /reference/nn_avg_pool2d.html + + + /reference/nn_avg_pool3d.html + + + /reference/nn_batch_norm1d.html + + + /reference/nn_batch_norm2d.html + + + /reference/nn_batch_norm3d.html + + + /reference/nn_bce_loss.html + + + /reference/nn_bce_with_logits_loss.html + + + /reference/nn_bilinear.html + + + /reference/nn_buffer.html + + + /reference/nn_celu.html + + + /reference/nn_contrib_sparsemax.html + + + /reference/nn_conv1d.html + + + /reference/nn_conv2d.html + + + /reference/nn_conv3d.html + + + /reference/nn_conv_transpose1d.html + + + /reference/nn_conv_transpose2d.html + + + /reference/nn_conv_transpose3d.html + + + /reference/nn_cosine_embedding_loss.html + + + /reference/nn_cross_entropy_loss.html + + + /reference/nn_ctc_loss.html + + + /reference/nn_dropout.html + + + /reference/nn_dropout2d.html + + + /reference/nn_dropout3d.html + + + /reference/nn_elu.html + + + /reference/nn_embedding.html + + + /reference/nn_fractional_max_pool2d.html + + + /reference/nn_fractional_max_pool3d.html + + + /reference/nn_gelu.html + + + /reference/nn_glu.html + + + /reference/nn_group_norm.html + + + /reference/nn_gru.html + + + /reference/nn_hardshrink.html + + + /reference/nn_hardsigmoid.html + + + /reference/nn_hardswish.html + + + /reference/nn_hardtanh.html + + + /reference/nn_hinge_embedding_loss.html + + + /reference/nn_identity.html + + + /reference/nn_init_calculate_gain.html + + + /reference/nn_init_constant_.html + + + /reference/nn_init_dirac_.html + + + /reference/nn_init_eye_.html + + + /reference/nn_init_kaiming_normal_.html + + + /reference/nn_init_kaiming_uniform_.html + + + /reference/nn_init_normal_.html + + + /reference/nn_init_ones_.html + + + /reference/nn_init_orthogonal_.html + + + /reference/nn_init_sparse_.html + + + /reference/nn_init_trunc_normal_.html + + + /reference/nn_init_uniform_.html + + + /reference/nn_init_xavier_normal_.html + + + /reference/nn_init_xavier_uniform_.html + + + /reference/nn_init_zeros_.html + + + /reference/nn_kl_div_loss.html + + + /reference/nn_l1_loss.html + + + /reference/nn_layer_norm.html + + + /reference/nn_leaky_relu.html + + + /reference/nn_linear.html + + + /reference/nn_log_sigmoid.html + + + /reference/nn_log_softmax.html + + + /reference/nn_lp_pool1d.html + + + /reference/nn_lp_pool2d.html + + + /reference/nn_lstm.html + + + /reference/nn_margin_ranking_loss.html + + + /reference/nn_max_pool1d.html + + + /reference/nn_max_pool2d.html + + + /reference/nn_max_pool3d.html + + + /reference/nn_max_unpool1d.html + + + /reference/nn_max_unpool2d.html + + + /reference/nn_max_unpool3d.html + + + /reference/nn_module.html + + + /reference/nn_module_list.html + + + /reference/nn_mse_loss.html + + + /reference/nn_multi_margin_loss.html + + + /reference/nn_multihead_attention.html + + + /reference/nn_multilabel_margin_loss.html + + + /reference/nn_multilabel_soft_margin_loss.html + + + /reference/nn_nll_loss.html + + + /reference/nn_pairwise_distance.html + + + /reference/nn_parameter.html + + + /reference/nn_poisson_nll_loss.html + + + /reference/nn_prelu.html + + + /reference/nn_relu.html + + + /reference/nn_relu6.html + + + /reference/nn_rnn.html + + + /reference/nn_rrelu.html + + + /reference/nn_selu.html + + + /reference/nn_sequential.html + + + /reference/nn_sigmoid.html + + + /reference/nn_smooth_l1_loss.html + + + /reference/nn_soft_margin_loss.html + + + /reference/nn_softmax.html + + + /reference/nn_softmax2d.html + + + /reference/nn_softmin.html + + + /reference/nn_softplus.html + + + /reference/nn_softshrink.html + + + /reference/nn_softsign.html + + + /reference/nn_tanh.html + + + /reference/nn_tanhshrink.html + + + /reference/nn_threshold.html + + + /reference/nn_triplet_margin_loss.html + + + /reference/nn_triplet_margin_with_distance_loss.html + + + /reference/nn_utils_clip_grad_norm_.html + + + /reference/nn_utils_clip_grad_value_.html + + + /reference/nn_utils_rnn_pack_padded_sequence.html + + + /reference/nn_utils_rnn_pack_sequence.html + + + /reference/nn_utils_rnn_pad_packed_sequence.html + + + /reference/nn_utils_rnn_pad_sequence.html + + + /reference/nnf_adaptive_avg_pool1d.html + + + /reference/nnf_adaptive_avg_pool2d.html + + + /reference/nnf_adaptive_avg_pool3d.html + + + /reference/nnf_adaptive_max_pool1d.html + + + /reference/nnf_adaptive_max_pool2d.html + + + /reference/nnf_adaptive_max_pool3d.html + + + /reference/nnf_affine_grid.html + + + /reference/nnf_alpha_dropout.html + + + /reference/nnf_avg_pool1d.html + + + /reference/nnf_avg_pool2d.html + + + /reference/nnf_avg_pool3d.html + + + /reference/nnf_batch_norm.html + + + /reference/nnf_bilinear.html + + + /reference/nnf_binary_cross_entropy.html + + + /reference/nnf_binary_cross_entropy_with_logits.html + + + /reference/nnf_celu.html + + + /reference/nnf_contrib_sparsemax.html + + + /reference/nnf_conv1d.html + + + /reference/nnf_conv2d.html + + + /reference/nnf_conv3d.html + + + /reference/nnf_conv_tbc.html + + + /reference/nnf_conv_transpose1d.html + + + /reference/nnf_conv_transpose2d.html + + + /reference/nnf_conv_transpose3d.html + + + /reference/nnf_cosine_embedding_loss.html + + + /reference/nnf_cosine_similarity.html + + + /reference/nnf_cross_entropy.html + + + /reference/nnf_ctc_loss.html + + + /reference/nnf_dropout.html + + + /reference/nnf_dropout2d.html + + + /reference/nnf_dropout3d.html + + + /reference/nnf_elu.html + + + /reference/nnf_embedding.html + + + /reference/nnf_embedding_bag.html + + + /reference/nnf_fold.html + + + /reference/nnf_fractional_max_pool2d.html + + + /reference/nnf_fractional_max_pool3d.html + + + /reference/nnf_gelu.html + + + /reference/nnf_glu.html + + + /reference/nnf_grid_sample.html + + + /reference/nnf_group_norm.html + + + /reference/nnf_gumbel_softmax.html + + + /reference/nnf_hardshrink.html + + + /reference/nnf_hardsigmoid.html + + + /reference/nnf_hardswish.html + + + /reference/nnf_hardtanh.html + + + /reference/nnf_hinge_embedding_loss.html + + + /reference/nnf_instance_norm.html + + + /reference/nnf_interpolate.html + + + /reference/nnf_kl_div.html + + + /reference/nnf_l1_loss.html + + + /reference/nnf_layer_norm.html + + + /reference/nnf_leaky_relu.html + + + /reference/nnf_linear.html + + + /reference/nnf_local_response_norm.html + + + /reference/nnf_log_softmax.html + + + /reference/nnf_logsigmoid.html + + + /reference/nnf_lp_pool1d.html + + + /reference/nnf_lp_pool2d.html + + + /reference/nnf_margin_ranking_loss.html + + + /reference/nnf_max_pool1d.html + + + /reference/nnf_max_pool2d.html + + + /reference/nnf_max_pool3d.html + + + /reference/nnf_max_unpool1d.html + + + /reference/nnf_max_unpool2d.html + + + /reference/nnf_max_unpool3d.html + + + /reference/nnf_mse_loss.html + + + /reference/nnf_multi_head_attention_forward.html + + + /reference/nnf_multi_margin_loss.html + + + /reference/nnf_multilabel_margin_loss.html + + + /reference/nnf_multilabel_soft_margin_loss.html + + + /reference/nnf_nll_loss.html + + + /reference/nnf_normalize.html + + + /reference/nnf_one_hot.html + + + /reference/nnf_pad.html + + + /reference/nnf_pairwise_distance.html + + + /reference/nnf_pdist.html + + + /reference/nnf_pixel_shuffle.html + + + /reference/nnf_poisson_nll_loss.html + + + /reference/nnf_prelu.html + + + /reference/nnf_relu.html + + + /reference/nnf_relu6.html + + + /reference/nnf_rrelu.html + + + /reference/nnf_selu.html + + + /reference/nnf_sigmoid.html + + + /reference/nnf_smooth_l1_loss.html + + + /reference/nnf_soft_margin_loss.html + + + /reference/nnf_softmax.html + + + /reference/nnf_softmin.html + + + /reference/nnf_softplus.html + + + /reference/nnf_softshrink.html + + + /reference/nnf_softsign.html + + + /reference/nnf_tanhshrink.html + + + /reference/nnf_threshold.html + + + /reference/nnf_triplet_margin_loss.html + + + /reference/nnf_triplet_margin_with_distance_loss.html + + + /reference/nnf_unfold.html + + + /reference/optim_adadelta.html + + + /reference/optim_adagrad.html + + + /reference/optim_adam.html + + + /reference/optim_asgd.html + + + /reference/optim_lbfgs.html + + + /reference/optim_required.html + + + /reference/optim_rmsprop.html + + + /reference/optim_rprop.html + + + /reference/optim_sgd.html + + + /reference/optimizer.html + + + /reference/pipe.html + + + /reference/reexports.html + + + /reference/slc.html + + + /reference/tensor_dataset.html + + + /reference/threads.html + + + /reference/torch_abs.html + + + /reference/torch_absolute.html + + + /reference/torch_acos.html + + + /reference/torch_acosh.html + + + /reference/torch_adaptive_avg_pool1d.html + + + /reference/torch_add.html + + + /reference/torch_addbmm.html + + + /reference/torch_addcdiv.html + + + /reference/torch_addcmul.html + + + /reference/torch_addmm.html + + + /reference/torch_addmv.html + + + /reference/torch_addr.html + + + /reference/torch_allclose.html + + + /reference/torch_amax.html + + + /reference/torch_amin.html + + + /reference/torch_angle.html + + + /reference/torch_arange.html + + + /reference/torch_arccos.html + + + /reference/torch_arccosh.html + + + /reference/torch_arcsin.html + + + /reference/torch_arcsinh.html + + + /reference/torch_arctan.html + + + /reference/torch_arctanh.html + + + /reference/torch_argmax.html + + + /reference/torch_argmin.html + + + /reference/torch_argsort.html + + + /reference/torch_as_strided.html + + + /reference/torch_asin.html + + + /reference/torch_asinh.html + + + /reference/torch_atan.html + + + /reference/torch_atan2.html + + + /reference/torch_atanh.html + + + /reference/torch_atleast_1d.html + + + /reference/torch_atleast_2d.html + + + /reference/torch_atleast_3d.html + + + /reference/torch_avg_pool1d.html + + + /reference/torch_baddbmm.html + + + /reference/torch_bartlett_window.html + + + /reference/torch_bernoulli.html + + + /reference/torch_bincount.html + + + /reference/torch_bitwise_and.html + + + /reference/torch_bitwise_not.html + + + /reference/torch_bitwise_or.html + + + /reference/torch_bitwise_xor.html + + + /reference/torch_blackman_window.html + + + /reference/torch_block_diag.html + + + /reference/torch_bmm.html + + + /reference/torch_broadcast_tensors.html + + + /reference/torch_bucketize.html + + + /reference/torch_can_cast.html + + + /reference/torch_cartesian_prod.html + + + /reference/torch_cat.html + + + /reference/torch_cdist.html + + + /reference/torch_ceil.html + + + /reference/torch_celu.html + + + /reference/torch_celu_.html + + + /reference/torch_chain_matmul.html + + + /reference/torch_channel_shuffle.html + + + /reference/torch_cholesky.html + + + /reference/torch_cholesky_inverse.html + + + /reference/torch_cholesky_solve.html + + + /reference/torch_chunk.html + + + /reference/torch_clamp.html + + + /reference/torch_clip.html + + + /reference/torch_clone.html + + + /reference/torch_combinations.html + + + /reference/torch_complex.html + + + /reference/torch_conj.html + + + /reference/torch_conv1d.html + + + /reference/torch_conv2d.html + + + /reference/torch_conv3d.html + + + /reference/torch_conv_tbc.html + + + /reference/torch_conv_transpose1d.html + + + /reference/torch_conv_transpose2d.html + + + /reference/torch_conv_transpose3d.html + + + /reference/torch_cos.html + + + /reference/torch_cosh.html + + + /reference/torch_cosine_similarity.html + + + /reference/torch_count_nonzero.html + + + /reference/torch_cross.html + + + /reference/torch_cummax.html + + + /reference/torch_cummin.html + + + /reference/torch_cumprod.html + + + /reference/torch_cumsum.html + + + /reference/torch_deg2rad.html + + + /reference/torch_dequantize.html + + + /reference/torch_det.html + + + /reference/torch_device.html + + + /reference/torch_diag.html + + + /reference/torch_diag_embed.html + + + /reference/torch_diagflat.html + + + /reference/torch_diagonal.html + + + /reference/torch_diff.html + + + /reference/torch_digamma.html + + + /reference/torch_dist.html + + + /reference/torch_div.html + + + /reference/torch_divide.html + + + /reference/torch_dot.html + + + /reference/torch_dstack.html + + + /reference/torch_dtype.html + + + /reference/torch_eig.html + + + /reference/torch_einsum.html + + + /reference/torch_empty.html + + + /reference/torch_empty_like.html + + + /reference/torch_empty_strided.html + + + /reference/torch_eq.html + + + /reference/torch_equal.html + + + /reference/torch_erf.html + + + /reference/torch_erfc.html + + + /reference/torch_erfinv.html + + + /reference/torch_exp.html + + + /reference/torch_exp2.html + + + /reference/torch_expm1.html + + + /reference/torch_eye.html + + + /reference/torch_fft_fft.html + + + /reference/torch_fft_ifft.html + + + /reference/torch_fft_irfft.html + + + /reference/torch_fft_rfft.html + + + /reference/torch_finfo.html + + + /reference/torch_fix.html + + + /reference/torch_flatten.html + + + /reference/torch_flip.html + + + /reference/torch_fliplr.html + + + /reference/torch_flipud.html + + + /reference/torch_floor.html + + + /reference/torch_floor_divide.html + + + /reference/torch_fmod.html + + + /reference/torch_frac.html + + + /reference/torch_full.html + + + /reference/torch_full_like.html + + + /reference/torch_gather.html + + + /reference/torch_gcd.html + + + /reference/torch_ge.html + + + /reference/torch_generator.html + + + /reference/torch_geqrf.html + + + /reference/torch_ger.html + + + /reference/torch_greater.html + + + /reference/torch_greater_equal.html + + + /reference/torch_gt.html + + + /reference/torch_hamming_window.html + + + /reference/torch_hann_window.html + + + /reference/torch_heaviside.html + + + /reference/torch_histc.html + + + /reference/torch_hstack.html + + + /reference/torch_hypot.html + + + /reference/torch_i0.html + + + /reference/torch_iinfo.html + + + /reference/torch_imag.html + + + /reference/torch_index.html + + + /reference/torch_index_put.html + + + /reference/torch_index_put_.html + + + /reference/torch_index_select.html + + + /reference/torch_inverse.html + + + /reference/torch_is_complex.html + + + /reference/torch_is_floating_point.html + + + /reference/torch_is_installed.html + + + /reference/torch_is_nonzero.html + + + /reference/torch_isclose.html + + + /reference/torch_isfinite.html + + + /reference/torch_isinf.html + + + /reference/torch_isnan.html + + + /reference/torch_isneginf.html + + + /reference/torch_isposinf.html + + + /reference/torch_isreal.html + + + /reference/torch_istft.html + + + /reference/torch_kaiser_window.html + + + /reference/torch_kthvalue.html + + + /reference/torch_layout.html + + + /reference/torch_lcm.html + + + /reference/torch_le.html + + + /reference/torch_lerp.html + + + /reference/torch_less.html + + + /reference/torch_less_equal.html + + + /reference/torch_lgamma.html + + + /reference/torch_linspace.html + + + /reference/torch_load.html + + + /reference/torch_log.html + + + /reference/torch_log10.html + + + /reference/torch_log1p.html + + + /reference/torch_log2.html + + + /reference/torch_logaddexp.html + + + /reference/torch_logaddexp2.html + + + /reference/torch_logcumsumexp.html + + + /reference/torch_logdet.html + + + /reference/torch_logical_and.html + + + /reference/torch_logical_not.html + + + /reference/torch_logical_or.html + + + /reference/torch_logical_xor.html + + + /reference/torch_logit.html + + + /reference/torch_logspace.html + + + /reference/torch_logsumexp.html + + + /reference/torch_lstsq.html + + + /reference/torch_lt.html + + + /reference/torch_lu.html + + + /reference/torch_lu_solve.html + + + /reference/torch_manual_seed.html + + + /reference/torch_masked_select.html + + + /reference/torch_matmul.html + + + /reference/torch_matrix_exp.html + + + /reference/torch_matrix_power.html + + + /reference/torch_matrix_rank.html + + + /reference/torch_max.html + + + /reference/torch_maximum.html + + + /reference/torch_mean.html + + + /reference/torch_median.html + + + /reference/torch_memory_format.html + + + /reference/torch_meshgrid.html + + + /reference/torch_min.html + + + /reference/torch_minimum.html + + + /reference/torch_mm.html + + + /reference/torch_mode.html + + + /reference/torch_movedim.html + + + /reference/torch_mul.html + + + /reference/torch_multinomial.html + + + /reference/torch_multiply.html + + + /reference/torch_mv.html + + + /reference/torch_mvlgamma.html + + + /reference/torch_nanquantile.html + + + /reference/torch_nansum.html + + + /reference/torch_narrow.html + + + /reference/torch_ne.html + + + /reference/torch_neg.html + + + /reference/torch_negative.html + + + /reference/torch_nextafter.html + + + /reference/torch_nonzero.html + + + /reference/torch_norm.html + + + /reference/torch_normal.html + + + /reference/torch_not_equal.html + + + /reference/torch_ones.html + + + /reference/torch_ones_like.html + + + /reference/torch_orgqr.html + + + /reference/torch_ormqr.html + + + /reference/torch_outer.html + + + /reference/torch_pdist.html + + + /reference/torch_pinverse.html + + + /reference/torch_pixel_shuffle.html + + + /reference/torch_poisson.html + + + /reference/torch_polar.html + + + /reference/torch_polygamma.html + + + /reference/torch_pow.html + + + /reference/torch_prod.html + + + /reference/torch_promote_types.html + + + /reference/torch_qr.html + + + /reference/torch_qscheme.html + + + /reference/torch_quantile.html + + + /reference/torch_quantize_per_channel.html + + + /reference/torch_quantize_per_tensor.html + + + /reference/torch_rad2deg.html + + + /reference/torch_rand.html + + + /reference/torch_rand_like.html + + + /reference/torch_randint.html + + + /reference/torch_randint_like.html + + + /reference/torch_randn.html + + + /reference/torch_randn_like.html + + + /reference/torch_randperm.html + + + /reference/torch_range.html + + + /reference/torch_real.html + + + /reference/torch_reciprocal.html + + + /reference/torch_reduction.html + + + /reference/torch_relu.html + + + /reference/torch_relu_.html + + + /reference/torch_remainder.html + + + /reference/torch_renorm.html + + + /reference/torch_repeat_interleave.html + + + /reference/torch_reshape.html + + + /reference/torch_result_type.html + + + /reference/torch_roll.html + + + /reference/torch_rot90.html + + + /reference/torch_round.html + + + /reference/torch_rrelu_.html + + + /reference/torch_rsqrt.html + + + /reference/torch_save.html + + + /reference/torch_scalar_tensor.html + + + /reference/torch_searchsorted.html + + + /reference/torch_selu.html + + + /reference/torch_selu_.html + + + /reference/torch_sgn.html + + + /reference/torch_sigmoid.html + + + /reference/torch_sign.html + + + /reference/torch_signbit.html + + + /reference/torch_sin.html + + + /reference/torch_sinh.html + + + /reference/torch_slogdet.html + + + /reference/torch_solve.html + + + /reference/torch_sort.html + + + /reference/torch_sparse_coo_tensor.html + + + /reference/torch_split.html + + + /reference/torch_sqrt.html + + + /reference/torch_square.html + + + /reference/torch_squeeze.html + + + /reference/torch_stack.html + + + /reference/torch_std.html + + + /reference/torch_std_mean.html + + + /reference/torch_stft.html + + + /reference/torch_sub.html + + + /reference/torch_subtract.html + + + /reference/torch_sum.html + + + /reference/torch_svd.html + + + /reference/torch_symeig.html + + + /reference/torch_t.html + + + /reference/torch_take.html + + + /reference/torch_tan.html + + + /reference/torch_tanh.html + + + /reference/torch_tensor.html + + + /reference/torch_tensordot.html + + + /reference/torch_threshold_.html + + + /reference/torch_topk.html + + + /reference/torch_trace.html + + + /reference/torch_transpose.html + + + /reference/torch_trapz.html + + + /reference/torch_triangular_solve.html + + + /reference/torch_tril.html + + + /reference/torch_tril_indices.html + + + /reference/torch_triu.html + + + /reference/torch_triu_indices.html + + + /reference/torch_true_divide.html + + + /reference/torch_trunc.html + + + /reference/torch_unbind.html + + + /reference/torch_unique_consecutive.html + + + /reference/torch_unsafe_chunk.html + + + /reference/torch_unsafe_split.html + + + /reference/torch_unsqueeze.html + + + /reference/torch_vander.html + + + /reference/torch_var.html + + + /reference/torch_var_mean.html + + + /reference/torch_vdot.html + + + /reference/torch_view_as_complex.html + + + /reference/torch_view_as_real.html + + + /reference/torch_vstack.html + + + /reference/torch_where.html + + + /reference/torch_zeros.html + + + /reference/torch_zeros_like.html + + + /reference/with_detect_anomaly.html + + + /reference/with_enable_grad.html + + + /reference/with_no_grad.html + + -- GitLab