Class ModuleListImpl#
Defined in File modulelist.h
Page Contents
Inheritance Relationships#
Base Type#
public torch::nn::Cloneable< ModuleListImpl >
(Template Class Cloneable)
Class Documentation#
-
class ModuleListImpl : public torch::nn::Cloneable<ModuleListImpl>#
A list of
Module
s that registers its elements.torch::nn::ModuleList mlist( torch::nn::Linear(3, 4), torch::nn::BatchNorm1d(4), torch::nn::Dropout(0.5) ); for (const auto &module : *mlist) { module->pretty_print(std::cout); }
Why should you use
ModuleList
instead of a simplestd::vector
? The value aModuleList
provides over manually calling a sequence of modules is that it allows treating the whole container as a single module, such that performing a transformation on theModuleList
applies to each of the modules it stores (which are each a registered submodule of theModuleList
). For example, calling.to(torch::kCUDA)
on aModuleList
will move each module in the list to CUDA memory. For example:torch::nn::ModuleList mlist( torch::nn::Linear(3, 4), torch::nn::BatchNorm1d(4), torch::nn::Dropout(0.5) ); // Convert all modules to CUDA. mlist->to(torch::kCUDA);
Finally,
ModuleList
provides a lightweight container API, such as allowing iteration over submodules, positional access, adding a new module after construction viapush_back
, as well as joining twoModuleList
s viaextend
.Public Types
Public Functions
-
ModuleListImpl() = default#
-
template<typename ...Modules>
inline explicit ModuleListImpl(Modules&&... modules)# Constructs the
ModuleList
from a variadic list of modules.
-
inline virtual std::shared_ptr<Module> clone(const std::optional<Device> &device = std::nullopt) const override#
Special cloning function for
ModuleList
because it does not usereset()
.
-
inline virtual void reset() override#
reset()
is empty forModuleList
, since it does not have parameters of its own.
-
inline virtual void pretty_print(std::ostream &stream) const override#
Pretty prints the
ModuleList
module into the givenstream
.
-
template<typename M, typename = torch::detail::enable_if_module_t<M>>
inline void push_back(M &&module)# Adds a new
Module
to theModuleList
container, moving or copying it into ashared_ptr
internally.This method allows passing value types, and letting the container deal with the boxing.
-
template<typename M>
inline void push_back(const ModuleHolder<M> &module_holder)# Unwraps the contained module of a
ModuleHolder
and adds it to theModuleList
.
-
template<typename Container>
inline void extend(const Container &container)# Iterates over the container and calls
push_back()
on each value.
-
inline Iterator begin()#
Returns an iterator to the start of the
ModuleList
.
-
inline ConstIterator begin() const#
Returns a const iterator to the start of the
ModuleList
.
-
inline Iterator end()#
Returns an iterator to the end of the
ModuleList
.
-
inline ConstIterator end() const#
Returns a const iterator to the end of the
ModuleList
.
-
template<typename T>
inline T &at(size_t index)# Attempts to return the module at the given index as the requested type.
Throws an exception if the index is out of bounds or the types do not match.
-
template<typename T>
inline const T &at(size_t index) const# Attempts to return the module at the given index as the requested type.
Throws an exception if the index is out of bounds or the types do not match.
-
inline std::shared_ptr<Module> ptr(size_t index) const#
Attempts to return a
std::shared_ptr
whose dynamic type is that of the underlying module at the given index.Throws an exception if the index is out of bounds.
Attempts to return a
std::shared_ptr
whose type is the one provided.Throws an exception if the index is out of bounds or the types do not match.
-
inline size_t size() const noexcept#
The current size of the
ModuleList
container.
-
inline bool is_empty() const noexcept#
True if there are no modules in the
ModuleList
.
-
template<typename M>
inline void insert(size_t index, const ModuleHolder<M> &module_holder)# Unwraps the contained module of a
ModuleHolder
and inserts it in theModuleList
.
-
template<typename M, typename = torch::detail::enable_if_module_t<M>>
inline void insert(size_t index, M &&module)# inserts a new
Module
to theModuleList
container, moving or copying it into ashared_ptr
internally.This method allows passing value types, and letting the container deal with the boxing.
-
ModuleListImpl() = default#