Learn R Programming

⚠️There's a newer version (0.14.2) of this package.Take me there.

torch

Installation

Run:

remotes::install_github("mlverse/torch")

At the first package load additional software will be installed.

Example

Currently this package is only a proof of concept and you can only create a Torch Tensor from an R object. And then convert back from a torch Tensor to an R object.

library(torch)
x <- array(runif(8), dim = c(2, 2, 2))
y <- torch_tensor(x, dtype = torch_float64())
y
#> torch_tensor 
#> (1,.,.) = 
#>   0.5406  0.8648
#>   0.3097  0.9715
#> 
#> (2,.,.) = 
#>   0.1309  0.8992
#>   0.4849  0.1902
#> [ CPUDoubleType{2,2,2} ]
identical(x, as_array(y))
#> [1] TRUE

Simple Autograd Example

In the following snippet we let torch, using the autograd feature, calculate the derivatives:

x <- torch_tensor(1, requires_grad = TRUE)
w <- torch_tensor(2, requires_grad = TRUE)
b <- torch_tensor(3, requires_grad = TRUE)
y <- w * x + b
y$backward()
x$grad
#> torch_tensor 
#>  2
#> [ CPUFloatType{1} ]
w$grad
#> torch_tensor 
#>  1
#> [ CPUFloatType{1} ]
b$grad
#> torch_tensor 
#>  1
#> [ CPUFloatType{1} ]

Linear Regression

In the following example we are going to fit a linear regression from scratch using torch’s Autograd.

Note all methods that end with _ (eg. sub_), will modify the tensors in place.

x <- torch_randn(100, 2)
y <- 0.1 + 0.5*x[,1] - 0.7*x[,2]

w <- torch_randn(2, 1, requires_grad = TRUE)
b <- torch_zeros(1, requires_grad = TRUE)

lr <- 0.5
for (i in 1:100) {
  y_hat <- torch_mm(x, w) + b
  loss <- torch_mean((y - y_hat$squeeze(1))^2)
  
  loss$backward()
  
  with_no_grad({
    w$sub_(w$grad*lr)
    b$sub_(b$grad*lr)   
    
    w$grad$zero_()
    b$grad$zero_()
  })
}
print(w)
#> torch_tensor 
#> 1e-09 *
#>  5.2672
#>  -6.7969
#> [ CPUFloatType{2,1} ]
print(b) 
#> torch_tensor 
#> 0.01 *
#> -9.6802
#> [ CPUFloatType{1} ]

Contributing

No matter your current skills it’s possible to contribute to torch development. See the contributing guide for more information.

Copy Link

Version

Install

install.packages('torch')

Monthly Downloads

7,962

Version

0.0.3

License

MIT + file LICENSE

Issues

Pull Requests

Stars

Forks

Maintainer

Daniel Falbel

Last Published

September 18th, 2020

Functions in torch (0.0.3)

autograd_grad

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

Set grad mode
as_array

Converts to array
dataloader

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

Returns the index of a currently selected device.
AutogradContext

Class representing the context.
autograd_backward

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

Returns the number of GPUs available.
cuda_is_available

Returns a bool indicating if CUDA is currently available.
install_torch

Install Torch
is_dataloader

Checks if the object is a dataloader
is_torch_qscheme

Checks if an object is a QScheme
is_torch_device

Checks if object is a device
is_torch_dtype

Check if object is a torch data type
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_dropout

Dropout module
nn_adaptive_log_softmax_with_loss

AdaptiveLogSoftmaxWithLoss module
nn_cross_entropy_loss

CrossEntropyLoss module
nn_adaptive_max_pool3d

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

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

Creates an iterator from a DataLoader
nn_fractional_max_pool3d

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

Ones initialization
dataset

An abstract class representing a Dataset.
nn_avg_pool1d

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

Conv3D module
is_undefined_tensor

Checks if a tensor is undefined
autograd_function

Records operation history and defines formulas for differentiating ops.
nn_avg_pool2d

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

Get the next element of a dataloader iterator
torch_set_default_dtype

Gets and sets the default floating point dtype.
nn_elu

ELU module
nn_conv_transpose1d

ConvTranspose1D
nn_init_orthogonal_

Orthogonal initialization
nn_adaptive_avg_pool2d

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

Uniform initialization
nn_init_xavier_normal_

Xavier normal initialization
nn_max_pool3d

Applies a 3D max 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_batch_norm2d

BatchNorm2D
nn_embedding

Embedding module
is_torch_layout

Check if an object is a torch layout.
is_torch_memory_format

Check if an object is a memory format
enumerate.dataloader

Enumerate an iterator
enumerate

Enumerate an iterator
nn_bilinear

Bilinear module
load_state_dict

Load a state dict file
nn_celu

CELU module
nn_max_unpool1d

Computes a partial inverse of MaxPool1d.
nn_identity

Identity module
nn_conv_transpose2d

ConvTranpose2D module
nn_conv1d

Conv1D module
nn_bce_loss

Binary cross entropy loss
nn_conv2d

Conv2D module
nn_sigmoid

Sigmoid module
nn_avg_pool3d

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

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

Calculate gain
nn_batch_norm1d

BatchNorm1D module
nn_softmax

Softmax module
nn_softmax2d

Softmax2d module
nn_dropout3d

Dropout3D module
nn_dropout2d

Dropout2D module
nn_hardswish

Hardswish module
nn_hardshrink

Hardshwink module
nn_gelu

GELU module
nn_glu

GLU module
nn_conv_transpose3d

ConvTranpose3D module
nn_hardtanh

Hardtanh module
nn_init_kaiming_uniform_

Kaiming uniform initialization
nn_init_constant_

Constant initialization
nn_init_dirac_

Dirac initialization
nn_hardsigmoid

Hardsigmoid module
nn_leaky_relu

LeakyReLU module
nn_init_eye_

Eye initialization
nn_linear

Linear module
nn_module

Base class for all neural network modules.
nn_init_kaiming_normal_

Kaiming normal initialization
nn_init_xavier_uniform_

Xavier uniform initialization
nn_init_zeros_

Zeros initialization
nn_module_list

Holds submodules in a list.
nn_multihead_attention

MultiHead attention
nn_softmin

Softmin
nn_init_normal_

Normal initialization
nnf_affine_grid

Affine_grid
nn_init_sparse_

Sparse initialization
nn_log_sigmoid

LogSigmoid module
nnf_alpha_dropout

Alpha_dropout
nn_softplus

Softplus module
nn_prelu

PReLU module
nn_init_trunc_normal_

Truncated normal initialization
nnf_conv1d

Conv1d
nn_max_pool1d

MaxPool1D module
nnf_adaptive_avg_pool3d

Adaptive_avg_pool3d
nn_softshrink

Softshrink module
nnf_adaptive_max_pool1d

Adaptive_max_pool1d
nn_log_softmax

LogSoftmax module
nnf_batch_norm

Batch_norm
nnf_avg_pool3d

Avg_pool3d
nnf_conv2d

Conv2d
nn_selu

SELU module
nn_lp_pool2d

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

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

A sequential container
nnf_conv_transpose3d

Conv_transpose3d
nnf_cosine_embedding_loss

Cosine_embedding_loss
nn_threshold

Threshoold module
nn_tanhshrink

Tanhshrink module
nnf_dropout2d

Dropout2d
nnf_dropout3d

Dropout3d
nn_utils_rnn_pad_sequence

Pad a list of variable length Tensors with padding_value
nnf_celu

Celu
nnf_binary_cross_entropy_with_logits

Binary_cross_entropy_with_logits
nn_utils_rnn_pad_packed_sequence

Pads a packed batch of variable length sequences.
nn_max_pool2d

MaxPool2D module
nnf_hardtanh

Hardtanh
nnf_cross_entropy

Cross_entropy
nnf_embedding

Embedding
nnf_cosine_similarity

Cosine_similarity
nnf_hardsigmoid

Hardsigmoid
nnf_elu

Elu
nnf_hinge_embedding_loss

Hinge_embedding_loss
nn_relu

ReLU module
nnf_hardswish

Hardswish
nnf_logsigmoid

Logsigmoid
nnf_log_softmax

Log_softmax
nnf_multi_head_attention_forward

Multi head attention forward
nnf_multi_margin_loss

Multi_margin_loss
nnf_conv_transpose2d

Conv_transpose2d
nnf_embedding_bag

Embedding_bag
nnf_conv_transpose1d

Conv_transpose1d
nnf_nll_loss

Nll_loss
nn_relu6

ReLu6 module
nn_softsign

Softsign module
nn_max_unpool2d

Computes a partial inverse of MaxPool2d.
nnf_adaptive_max_pool2d

Adaptive_max_pool2d
nn_tanh

Tanh module
nnf_fold

Fold
nn_rnn

RNN module
nn_rrelu

RReLU module
nn_max_unpool3d

Computes a partial inverse of MaxPool3d.
nn_utils_rnn_pack_padded_sequence

Packs a Tensor containing padded sequences of variable length.
nnf_linear

Linear
nnf_max_unpool3d

Max_unpool3d
nnf_local_response_norm

Local_response_norm
nn_utils_rnn_pack_sequence

Packs a list of variable length Tensors
nnf_adaptive_max_pool3d

Adaptive_max_pool3d
nnf_prelu

Prelu
nnf_mse_loss

Mse_loss
nnf_pixel_shuffle

Pixel_shuffle
nnf_poisson_nll_loss

Poisson_nll_loss
nnf_bilinear

Bilinear
nnf_normalize

Normalize
nnf_grid_sample

Grid_sample
nnf_relu

Relu
nnf_adaptive_avg_pool1d

Adaptive_avg_pool1d
nnf_triplet_margin_loss

Triplet_margin_loss
torch_addcmul

Addcmul
nnf_smooth_l1_loss

Smooth_l1_loss
nnf_soft_margin_loss

Soft_margin_loss
nnf_adaptive_avg_pool2d

Adaptive_avg_pool2d
nnf_binary_cross_entropy

Binary_cross_entropy
nnf_layer_norm

Layer_norm
nnf_group_norm

Group_norm
nnf_unfold

Unfold
nnf_avg_pool1d

Avg_pool1d
%>%

Pipe operator
torch_as_strided

As_strided
tensor_dataset

Dataset wrapping tensors.
optim_adam

Implements Adam algorithm.
torch_asin

Asin
torch_addmm

Addmm
torch_argsort

Argsort
torch_argmin

Argmin
torch_avg_pool1d

Avg_pool1d
torch_baddbmm

Baddbmm
nnf_avg_pool2d

Avg_pool2d
nnf_ctc_loss

Ctc_loss
torch_bartlett_window

Bartlett_window
nnf_dropout

Dropout
torch_ceil

Ceil
nnf_leaky_relu

Leaky_relu
nnf_margin_ranking_loss

Margin_ranking_loss
nnf_max_pool1d

Max_pool1d
torch_conj

Conj
torch_celu

Celu
torch_bitwise_xor

Bitwise_xor
torch_bernoulli

Bernoulli
nnf_conv3d

Conv3d
torch_blackman_window

Blackman_window
nnf_pdist

Pdist
nnf_pairwise_distance

Pairwise_distance
nnf_conv_tbc

Conv_tbc
torch_conv1d

Conv1d
torch_cosine_similarity

Cosine_similarity
torch_cross

Cross
nnf_selu

Selu
nnf_sigmoid

Sigmoid
nnf_fractional_max_pool2d

Fractional_max_pool2d
nnf_fractional_max_pool3d

Fractional_max_pool3d
nnf_gelu

Gelu
nnf_glu

Glu
nnf_gumbel_softmax

Gumbel_softmax
nnf_instance_norm

Instance_norm
torch_diagflat

Diagflat
torch_diagonal

Diagonal
torch_eq

Eq
torch_div

Div
torch_dot

Dot
nnf_hardshrink

Hardshrink
nnf_kl_div

Kl_div
torch_chain_matmul

Chain_matmul
torch_celu_

Celu_
nnf_l1_loss

L1_loss
nnf_max_unpool1d

Max_unpool1d
nnf_softplus

Softplus
torch_equal

Equal
nnf_softshrink

Softshrink
nnf_lp_pool1d

Lp_pool1d
nnf_lp_pool2d

Lp_pool2d
nnf_interpolate

Interpolate
torch_gt

Gt
nnf_max_unpool2d

Max_unpool2d
torch_gather

Gather
torch_ger

Ger
torch_ge

Ge
torch_adaptive_avg_pool1d

Adaptive_avg_pool1d
torch_isnan

Isnan
torch_lerp

Lerp
torch_kthvalue

Kthvalue
torch_add

Add
nnf_one_hot

One_hot
torch_logsumexp

Logsumexp
torch_lgamma

Lgamma
nnf_multilabel_margin_loss

Multilabel_margin_loss
nnf_max_pool2d

Max_pool2d
nnf_multilabel_soft_margin_loss

Multilabel_soft_margin_loss
nnf_max_pool3d

Max_pool3d
nnf_pad

Pad
nnf_relu6

Relu6
nnf_softmax

Softmax
torch_lstsq

Lstsq
torch_addr

Addr
torch_addmv

Addmv
torch_atan

Atan
torch_conv_transpose2d

Conv_transpose2d
torch_conv_transpose3d

Conv_transpose3d
torch_diag

Diag
torch_mean

Mean
torch_max

Max
nnf_softmin

Softmin
optim_required

Dummy value indicating a required value.
torch_meshgrid

Meshgrid
nnf_softsign

Softsign
nnf_rrelu

Rrelu
torch_atan2

Atan2
torch_addbmm

Addbmm
torch_argmax

Argmax
torch_bitwise_not

Bitwise_not
nnf_tanhshrink

Tanhshrink
torch_addcdiv

Addcdiv
torch_arange

Arange
torch_diag_embed

Diag_embed
torch_cat

Cat
torch_abs

Abs
optim_sgd

SGD optimizer
torch_bitwise_or

Bitwise_or
torch_cartesian_prod

Cartesian_prod
torch_cholesky_inverse

Cholesky_inverse
torch_can_cast

Can_cast
torch_cholesky

Cholesky
torch_conv2d

Conv2d
torch_clamp

Clamp
torch_cdist

Cdist
torch_combinations

Combinations
torch_cos

Cos
torch_cosh

Cosh
torch_cumprod

Cumprod
torch_acos

Acos
torch_dist

Dist
torch_digamma

Digamma
torch_cumsum

Cumsum
torch_dtype

Torch data types
torch_exp

Exp
torch_eig

Eig
torch_erfinv

Erfinv
torch_fmod

Fmod
torch_allclose

Allclose
torch_angle

Angle
torch_pixel_shuffle

Pixel_shuffle
torch_conv3d

Conv3d
torch_cummax

Cummax
torch_finfo

Floating point type info
torch_floor_divide

Floor_divide
torch_geqrf

Geqrf
torch_floor

Floor
torch_index_select

Index_select
torch_fft

Fft
torch_generator

Create a Generator object
torch_cummin

Cummin
torch_bincount

Bincount
torch_inverse

Inverse
torch_bitwise_and

Bitwise_and
torch_bmm

Bmm
torch_broadcast_tensors

Broadcast_tensors
torch_cholesky_solve

Cholesky_solve
torch_erf

Erf
torch_empty

Empty
torch_einsum

Einsum
torch_log1p

Log1p
torch_frac

Frac
torch_histc

Histc
torch_chunk

Chunk
torch_conv_transpose1d

Conv_transpose1d
torch_conv_tbc

Conv_tbc
torch_det

Det
torch_min

Min
torch_empty_like

Empty_like
torch_device

Create a Device object
torch_empty_strided

Empty_strided
torch_log2

Log2
torch_logdet

Logdet
torch_logical_and

Logical_and
torch_ifft

Ifft
torch_is_installed

Verifies if torch is installed
torch_is_floating_point

Is_floating_point
torch_log10

Log10
torch_lt

Lt
torch_log

Log
torch_matrix_power

Matrix_power
torch_randperm

Randperm
torch_matrix_rank

Matrix_rank
torch_mul

Mul
torch_erfc

Erfc
torch_flatten

Flatten
torch_lu

LU
torch_rsqrt

Rsqrt
torch_flip

Flip
torch_hamming_window

Hamming_window
torch_orgqr

Orgqr
torch_eye

Eye
torch_expm1

Expm1
torch_full

Full
torch_median

Median
torch_ormqr

Ormqr
torch_memory_format

Memory format
torch_randn

Randn
torch_poisson

Poisson
torch_roll

Roll
torch_randn_like

Randn_like
torch_hann_window

Hann_window
torch_narrow

Narrow
torch_isfinite

Isfinite
torch_randint

Randint
torch_t

T
torch_rrelu_

Rrelu_
torch_sparse_coo_tensor

Sparse_coo_tensor
torch_rfft

Rfft
torch_norm

Norm
torch_multinomial

Multinomial
torch_quantize_per_channel

Quantize_per_channel
torch_normal

Normal
torch_range

Range
torch_full_like

Full_like
torch_iinfo

Integer type info
torch_pinverse

Pinverse
torch_ne

Ne
torch_pdist

Pdist
torch_linspace

Linspace
torch_irfft

Irfft
torch_imag

Imag
torch_is_complex

Is_complex
torch_triangular_solve

Triangular_solve
torch_take

Take
torch_quantize_per_tensor

Quantize_per_tensor
torch_sigmoid

Sigmoid
torch_isinf

Isinf
torch_randint_like

Randint_like
torch_relu

Relu
torch_std

Std
torch_selu_

Selu_
torch_reduction

Creates the reduction objet
torch_squeeze

Squeeze
torch_repeat_interleave

Repeat_interleave
torch_polygamma

Polygamma
torch_layout

Creates the corresponding layout
torch_le

Le
torch_pow

Pow
torch_logical_not

Logical_not
torch_split

Split
torch_trapz

Trapz
torch_sqrt

Sqrt
torch_rot90

Rot90
torch_stack

Stack
torch_var_mean

Var_mean
torch_renorm

Renorm
torch_std_mean

Std_mean
with_no_grad

Temporarily modify gradient recording.
torch_load

Loads a saved object
torch_logical_xor

Logical_xor
torch_logspace

Logspace
torch_tensordot

Tensordot
torch_where

Where
torch_tensor

Converts R objects to a torch tensor
torch_lu_solve

Lu_solve
torch_unbind

Unbind
torch_triu

Triu
torch_unique_consecutive

Unique_consecutive
torch_mm

Mm
torch_manual_seed

Sets the seed for generating random numbers.
torch_logical_or

Logical_or
torch_masked_select

Masked_select
torch_round

Round
torch_mode

Mode
torch_neg

Neg
torch_matmul

Matmul
torch_mv

Mv
torch_square

Square
with_enable_grad

Enable grad
torch_tril_indices

Tril_indices
torch_tan

Tan
torch_tanh

Tanh
torch_mvlgamma

Mvlgamma
torch_tril

Tril
torch_reshape

Reshape
torch_ones

Ones
torch_rand

Rand
torch_result_type

Result_type
torch_ones_like

Ones_like
torch_prod

Prod
torch_nonzero

Nonzero
torch_real

Real
torch_relu_

Relu_
torch_qr

Qr
torch_sign

Sign
torch_qscheme

Creates the corresponding Scheme object
torch_promote_types

Promote_types
torch_triu_indices

Triu_indices
torch_zeros

Zeros
torch_zeros_like

Zeros_like
torch_rand_like

Rand_like
torch_sum

Sum
torch_remainder

Remainder
torch_sin

Sin
torch_reciprocal

Reciprocal
torch_sort

Sort
torch_sinh

Sinh
torch_save

Saves an object to a disk file.
torch_selu

Selu
torch_symeig

Symeig
torch_var

Var
torch_unsqueeze

Unsqueeze
torch_solve

Solve
torch_svd

Svd
torch_true_divide

TRUE_divide
torch_slogdet

Slogdet
torch_stft

Stft
torch_threshold_

Threshold_
torch_trace

Trace
torch_transpose

Transpose
torch_topk

Topk
torch_trunc

Trunc
nnf_threshold

Threshold