Skip to contents

Ingress for a single lazy_tensor column.

Parameters

  • shape :: integer()
    The shape of the tensor, where the first dimension (batch) must be NA. When it is not specified, the lazy tensor input column needs to have a known shape.

Internals

The returned batchgetter materializes the lazy tensor column to a tensor.

Input and Output Channels

One input channel called "input" and one output channel called "output". For an explanation see PipeOpTorch.

State

The state is set to the input shape.

See also

Other PipeOps: mlr_pipeops_nn_adaptive_avg_pool1d, mlr_pipeops_nn_adaptive_avg_pool2d, mlr_pipeops_nn_adaptive_avg_pool3d, mlr_pipeops_nn_avg_pool1d, mlr_pipeops_nn_avg_pool2d, mlr_pipeops_nn_avg_pool3d, mlr_pipeops_nn_batch_norm1d, mlr_pipeops_nn_batch_norm2d, mlr_pipeops_nn_batch_norm3d, mlr_pipeops_nn_block, mlr_pipeops_nn_celu, mlr_pipeops_nn_conv1d, mlr_pipeops_nn_conv2d, mlr_pipeops_nn_conv3d, mlr_pipeops_nn_conv_transpose1d, mlr_pipeops_nn_conv_transpose2d, mlr_pipeops_nn_conv_transpose3d, mlr_pipeops_nn_dropout, mlr_pipeops_nn_elu, mlr_pipeops_nn_flatten, mlr_pipeops_nn_gelu, mlr_pipeops_nn_glu, mlr_pipeops_nn_hardshrink, mlr_pipeops_nn_hardsigmoid, mlr_pipeops_nn_hardtanh, mlr_pipeops_nn_head, mlr_pipeops_nn_layer_norm, mlr_pipeops_nn_leaky_relu, mlr_pipeops_nn_linear, mlr_pipeops_nn_log_sigmoid, mlr_pipeops_nn_max_pool1d, mlr_pipeops_nn_max_pool2d, mlr_pipeops_nn_max_pool3d, mlr_pipeops_nn_merge, mlr_pipeops_nn_merge_cat, mlr_pipeops_nn_merge_prod, mlr_pipeops_nn_merge_sum, mlr_pipeops_nn_prelu, mlr_pipeops_nn_relu, mlr_pipeops_nn_relu6, mlr_pipeops_nn_reshape, mlr_pipeops_nn_rrelu, mlr_pipeops_nn_selu, mlr_pipeops_nn_sigmoid, mlr_pipeops_nn_softmax, mlr_pipeops_nn_softplus, mlr_pipeops_nn_softshrink, mlr_pipeops_nn_softsign, mlr_pipeops_nn_squeeze, mlr_pipeops_nn_tanh, mlr_pipeops_nn_tanhshrink, mlr_pipeops_nn_threshold, mlr_pipeops_nn_unsqueeze, mlr_pipeops_torch_ingress, mlr_pipeops_torch_ingress_categ, mlr_pipeops_torch_ingress_num, mlr_pipeops_torch_loss, mlr_pipeops_torch_model, mlr_pipeops_torch_model_classif, mlr_pipeops_torch_model_regr

Other Graph Network: ModelDescriptor(), TorchIngressToken(), mlr_learners_torch_model, mlr_pipeops_module, mlr_pipeops_torch, mlr_pipeops_torch_ingress, mlr_pipeops_torch_ingress_categ, mlr_pipeops_torch_ingress_num, model_descriptor_to_learner(), model_descriptor_to_module(), model_descriptor_union(), nn_graph()

Super classes

mlr3pipelines::PipeOp -> mlr3torch::PipeOpTorchIngress -> PipeOpTorchIngressLazyTensor

Methods

Inherited methods


Method new()

Creates a new instance of this R6 class.

Usage

PipeOpTorchIngressLazyTensor$new(
  id = "torch_ingress_ltnsr",
  param_vals = list()
)

Arguments

id

(character(1))
Identifier of the resulting object.

param_vals

(list())
List of hyperparameter settings, overwriting the hyperparameter settings that would otherwise be set during construction.


Method clone()

The objects of this class are cloneable with this method.

Usage

PipeOpTorchIngressLazyTensor$clone(deep = FALSE)

Arguments

deep

Whether to make a deep clone.

Examples

po_ingress = po("torch_ingress_ltnsr")
task = tsk("lazy_iris")

md = po_ingress$train(list(task))[[1L]]

ingress = md$ingress
x_batch = ingress[[1L]]$batchgetter(data = task$data(1, "x"), device = "cpu", cache = NULL)
x_batch
#> torch_tensor
#>  5.1000  3.5000  1.4000  0.2000
#> [ CPUFloatType{1,4} ]

# Now we try a lazy tensor with unknown shape, i.e. the shapes between the rows can differ

ds = dataset(
  initialize = function() self$x = list(torch_randn(3, 10, 10), torch_randn(3, 8, 8)),
  .getitem = function(i) list(x = self$x[[i]]),
  .length = function() 2)()

task_unknown = as_task_regr(data.table(
  x = as_lazy_tensor(ds, dataset_shapes = list(x = NULL)),
  y = rnorm(2)
), target = "y", id = "example2")

# this task (as it is) can NOT be processed by PipeOpTorchIngressLazyTensor
# It therefore needs to be preprocessed
po_resize = po("trafo_resize", size = c(6, 6))
task_unknown_resize = po_resize$train(list(task_unknown))[[1L]]

# printing the transformed column still shows unknown shapes,
# because the preprocessing pipeop cannot infer them,
# however we know that the shape is now (3, 10, 10) for all rows
task_unknown_resize$data(1:2, "x")
#>                x
#>    <lazy_tensor>
#> 1:      <tnsr[]>
#> 2:      <tnsr[]>
po_ingress$param_set$set_values(shape = c(NA, 3, 6, 6))

md2 = po_ingress$train(list(task_unknown_resize))[[1L]]

ingress2 = md2$ingress
x_batch2 = ingress2[[1L]]$batchgetter(
  data = task_unknown_resize$data(1:2, "x"),
  device = "cpu",
  cache = NULL
)

x_batch2
#> torch_tensor
#> (1,1,.,.) = 
#>   0.1449 -0.7019 -0.3521 -0.0491 -1.7385 -0.5847
#>  -0.8391 -1.4985 -0.6923  0.7996  0.4785  0.5215
#>   0.3497 -0.0709  1.2281 -0.4835  0.4081  0.0466
#>  -0.2712 -1.6234 -0.3864  0.1636  1.1627  0.9997
#>  -0.2890  0.1777  1.3893 -1.2745  1.0467 -0.7197
#>   0.0156  0.1764  0.6456 -0.0333 -0.4097  0.1578
#> 
#> (2,1,.,.) = 
#>   1.0986 -0.1841  0.8730  0.1146  0.9023  0.1112
#>   0.9094  0.3374  0.1289  0.2231  0.7119 -0.0117
#>   0.1584  0.8659 -0.1255  0.5785 -0.1748  1.2001
#>   0.0245  0.7896  0.2707  0.2722  1.1083 -0.7059
#>   0.1058 -0.3097  0.5502  0.6818 -0.7135 -0.4190
#>   1.0454 -0.5466 -0.3665 -0.2877 -0.1238  0.2257
#> 
#> (1,2,.,.) = 
#>  -1.0097  0.8060  0.0781 -0.5706  0.6929 -1.1018
#>  -0.6435  0.4388  0.3039 -0.9457 -0.7491 -0.7958
#>   0.2781 -0.2517  0.7829 -0.7085 -1.0625  0.7910
#>   0.4273  0.4935  0.2813  0.8131 -0.0913 -0.9181
#>   0.1782  0.1244  0.0531  0.6148  0.4526 -0.2287
#>  -0.2312  1.2950  0.0757 -0.2358 -0.5711  1.0204
#> 
#> (2,2,.,.) = 
#>   1.0439e+00 -1.0122e-02 -6.1007e-01 -3.0304e-01 -9.2154e-02 -5.4351e-01
#>  -4.2073e-01  3.3601e-02 -1.0326e-02 -5.7285e-01 -5.1729e-05 -8.3567e-01
#>  -4.0730e-01 -1.1399e-01 -4.6574e-01  1.8683e-01  4.4185e-01  4.4938e-01
#>   1.8344e+00 -1.9484e-01 -8.9078e-01  7.7812e-01  6.4956e-01 -9.9950e-01
#>   1.0212e+00 -9.2776e-02  1.8537e-01 -7.1413e-01 -1.1227e-01  1.7768e-01
#> ... [the output was truncated (use n=-1 to disable)]
#> [ CPUFloatType{2,3,6,6} ]