Clean all using namespaces from the headers.

Signed-off-by: Omar Shrit <omar@shrit.me>
This commit is contained in:
Omar Shrit
2022-04-27 17:57:32 -04:00
committed by Ryan Curtin
parent 4a713818ab
commit 407b563330
4 changed files with 503 additions and 68 deletions
+441
View File
@@ -0,0 +1,441 @@
/**
* @file methods/ann/layer_names.hpp
* @author Sreenik Seal
*
* Implementation of a class that converts a given ann layer to string format.
*
* mlpack is free software; you may redistribute it and/or modify it under the
* terms of the 3-clause BSD license. You should have received a copy of the
* 3-clause BSD license along with mlpack. If not, see
* http://www.opensource.org/licenses/BSD-3-Clause for more information.
*/
#include <mlpack/core.hpp>
#include <mlpack/methods/ann/layer/layer.hpp>
#include <mlpack/methods/ann/layer/layer_types.hpp>
#include <boost/variant/static_visitor.hpp>
#include <string>
/**
* Implementation of a class that returns the string representation of the
* name of the given layer.
*/
class LayerNameVisitor : public boost::static_visitor<std::string>
{
public:
//! Create the LayerNameVisitor object.
LayerNameVisitor()
{
}
/**
* Return the name of the given layer of type AdaptiveMaxPooling as string.
*
* @param * Given layer of type AdaptiveMaxPooling.
* @return The string representation of the layer.
*/
std::string LayerString(mlpack::ann::AdaptiveMaxPooling<> * /*layer*/) const
{
return "adaptivemaxpooling";
}
/**
* Return the name of the given layer of type AdaptiveMeanPooling as string.
*
* @param * Given layer of type AdaptiveMeanPooling.
* @return The string representation of the layer.
*/
std::string LayerString(mlpack::ann::AdaptiveMeanPooling<> * /*layer*/) const
{
return "adaptivemeanpooling";
}
/**
* Return the name of the given layer of type AtrousConvolution as a string.
*
* @param * Given layer of type AtrousConvolution.
* @return The string representation of the layer.
*/
std::string LayerString(mlpack::ann::AtrousConvolution<>* /*layer*/) const
{
return "atrousconvolution";
}
/**
* Return the name of the given layer of type AlphaDropout as a string.
*
* @param * Given layer of type AlphaDropout.
* @return The string representation of the layer.
*/
std::string LayerString(mlpack::ann::AlphaDropout<>* /*layer*/) const
{
return "alphadropout";
}
/**
* Return the name of the given layer of type BatchNorm as a string.
*
* @param * Given layer of type BatchNorm.
* @return The string representation of the layer.
*/
std::string LayerString(mlpack::ann::BatchNorm<>* /*layer*/) const
{
return "batchnorm";
}
/**
* Return the name of the given layer of type Constant as a string.
*
* @param * Given layer of type Constant.
* @return The string representation of the layer.
*/
std::string LayerString(mlpack::ann::Constant<>* /*layer*/) const
{
return "constant";
}
/**
* Return the name of the given layer of type Convolution as a string.
*
* @param * Given layer of type Convolution.
* @return The string representation of the layer.
*/
std::string LayerString(mlpack::ann::Convolution<>* /*layer*/) const
{
return "convolution";
}
/**
* Return the name of the given layer of type DropConnect as a string.
*
* @param * Given layer of type DropConnect.
* @return The string representation of the layer.
*/
std::string LayerString(mlpack::ann::DropConnect<>* /*layer*/) const
{
return "dropconnect";
}
/**
* Return the name of the given layer of type Dropout as a string.
*
* @param * Given layer of type Dropout.
* @return The string representation of the layer.
*/
std::string LayerString(mlpack::ann::Dropout<>* /*layer*/) const
{
return "dropout";
}
/**
* Return the name of the given layer of type FlexibleReLU as a string.
*
* @param * Given layer of type FlexibleReLU.
* @return The string representation of the layer.
*/
std::string LayerString(mlpack::ann::FlexibleReLU<>* /*layer*/) const
{
return "flexiblerelu";
}
/**
* Return the name of the given layer of type LayerNorm as a string.
*
* @param * Given layer of type LayerNorm.
* @return The string representation of the layer.
*/
std::string LayerString(mlpack::ann::LayerNorm<>* /*layer*/) const
{
return "layernorm";
}
/**
* Return the name of the given layer of type Linear as a string.
*
* @param * Given layer of type Linear.
* @return The string representation of the layer.
*/
std::string LayerString(mlpack::ann::Linear<>* /*layer*/) const
{
return "linear";
}
/**
* Return the name of the given layer of type LinearNoBias as a string.
*
* @param * Given layer of type LinearNoBias.
* @return The string representation of the layer.
*/
std::string LayerString(mlpack::ann::LinearNoBias<>* /*layer*/) const
{
return "linearnobias";
}
/**
* Return the name of the given layer of type NoisyLinear as a string.
*
* @param * Given layer of type NoisyLinear.
* @return The string representation of the layer.
*/
std::string LayerString(mlpack::ann::NoisyLinear<>* /*layer*/) const
{
return "noisylinear";
}
/**
* Return the name of the given layer of type MaxPooling as a string.
*
* @param * Given layer of type MaxPooling.
* @return The string representation of the layer.
*/
std::string LayerString(mlpack::ann::MaxPooling<>* /*layer*/) const
{
return "maxpooling";
}
/**
* Return the name of the given layer of type MeanPooling as a string.
*
* @param * Given layer of type MeanPooling.
* @return The string representation of the layer.
*/
std::string LayerString(mlpack::ann::MeanPooling<>* /*layer*/) const
{
return "meanpooling";
}
/**
* Return the name of the given layer of type LpPooling as a string.
*
* @param * Given layer of type LpPooling.
* @return The string representation of the layer.
*/
std::string LayerString(mlpack::ann::LpPooling<>* /*layer*/) const
{
return "lppooling";
}
/**
* Return the name of the given layer of type MultiplyConstant as a string.
*
* @param * Given layer of type MultiplyConstant.
* @return The string representation of the layer.
*/
std::string LayerString(mlpack::ann::MultiplyConstant<>* /*layer*/) const
{
return "multiplyconstant";
}
/**
* Return the name of the given layer of type ReLULayer as a string.
*
* @param * Given layer of type ReLULayer.
* @return The string representation of the layer.
*/
std::string LayerString(mlpack::ann::ReLULayer<>* /*layer*/) const
{
return "relu";
}
/**
* Return the name of the given layer of type TransposedConvolution as a
* string.
*
* @param * Given layer of type TransposedConvolution.
* @return The string representation of the layer.
*/
std::string LayerString(mlpack::ann::TransposedConvolution<>* /*layer*/) const
{
return "transposedconvolution";
}
/**
* Return the name of the given layer of type IdentityLayer as a string.
*
* @param * Given layer of type IdentityLayer.
* @return The string representation of the layer.
*/
std::string LayerString(mlpack::ann::IdentityLayer<>* /*layer*/) const
{
return "identity";
}
/**
* Return the name of the given layer of type TanHLayer as a string.
*
* @param * Given layer of type TanHLayer.
* @return The string representation of the layer.
*/
std::string LayerString(mlpack::ann::TanHLayer<>* /*layer*/) const
{
return "tanh";
}
/**
* Return the name of the given layer of type ELU as a string.
*
* @param * Given layer of type ELU.
* @return The string representation of the layer.
*/
std::string LayerString(mlpack::ann::ELU<>* /*layer*/) const
{
return "elu";
}
/**
* Return the name of the given layer of type HardTanH as a string.
*
* @param * Given layer of type HardTanH.
* @return The string representation of the layer.
*/
std::string LayerString(mlpack::ann::HardTanH<>* /*layer*/) const
{
return "hardtanh";
}
/**
* Return the name of the given layer of type LeakyReLU as a string.
*
* @param * Given layer of type LeakyReLU.
* @return The string representation of the layer.
*/
std::string LayerString(mlpack::ann::LeakyReLU<>* /*layer*/) const
{
return "leakyrelu";
}
/**
* Return the name of the given layer of type PReLU as a string.
*
* @param * Given layer of type PReLU.
* @return The string representation of the layer.
*/
std::string LayerString(mlpack::ann::PReLU<>* /*layer*/) const
{
return "prelu";
}
/**
* Return the name of the given layer of type SigmoidLayer as a string.
*
* @param * Given layer of type SigmoidLayer.
* @return The string representation of the layer.
*/
std::string LayerString(mlpack::ann::SigmoidLayer<>* /*layer*/) const
{
return "sigmoid";
}
/**
* Return the name of the given layer of type LogSoftMax as a string.
*
* @param * Given layer of type LogSoftMax.
* @return The string representation of the layer.
*/
std::string LayerString(mlpack::ann::LogSoftMax<>* /*layer*/) const
{
return "logsoftmax";
}
/*
* Return the name of the given layer of type LSTM as a string.
*
* @param * Given layer of type LSTM.
* @return The string representation of the layer.
*/
std::string LayerString(mlpack::ann::LSTM<>* /*layer*/) const
{
return "lstm";
}
/**
* Return the name of the given layer of type CReLU as a string.
*
* @param * Given layer of type CReLU.
* @return The string representation of the layer.
*/
std::string LayerString(mlpack::ann::CReLU<>* /*layer*/) const
{
return "crelu";
}
/**
* Return the name of the given layer of type Highway as a string.
*
* @param * Given layer of type Highway.
* @return The string representation of the layer.
*/
std::string LayerString(mlpack::ann::Highway<>* /*layer*/) const
{
return "highway";
}
/**
* Return the name of the given layer of type GRU as a string.
*
* @param * Given layer of type GRU.
* @return The string representation of the layer.
*/
std::string LayerString(mlpack::ann::GRU<>* /*layer*/) const
{
return "gru";
}
/**
* Return the name of the given layer of type Glimpse as a string.
*
* @param * Given layer of type Glimpse.
* @return The string representation of the layer.
*/
std::string LayerString(mlpack::ann::Glimpse<>* /*layer*/) const
{
return "glimpse";
}
/**
* Return the name of the given layer of type FastLSTM as a string.
*
* @param * Given layer of type FastLSTM.
* @return The string representation of the layer.
*/
std::string LayerString(mlpack::ann::FastLSTM<>* /*layer*/) const
{
return "fastlstm";
}
/**
* Return the name of the given layer of type WeightNorm as a string.
*
* @param * Given layer of type WeightNorm.
* @return The string representation of the layer.
*/
std::string LayerString(mlpack::ann::WeightNorm<>* /*layer*/) const
{
return "weightnorm";
}
/**
* Return the name of the layer of specified type as a string.
*
* @param * Given layer of any type.
* @return A string declaring that the layer is unsupported.
*/
template<typename T>
std::string LayerString(T* /*layer*/) const
{
return "unsupported";
}
//! Overload function call.
std::string operator()(MoreTypes layer) const
{
return layer.apply_visitor(*this);
}
//! Overload function call.
template<typename LayerType>
std::string operator()(LayerType* layer) const
{
return LayerString(layer);
}
};
@@ -23,8 +23,6 @@
namespace mlpack {
namespace rl {
using namespace mlpack::ann;
/**
* Implementation of the Categorical Deep Q-Learning network.
* For more information, see the following.
@@ -43,9 +41,9 @@ using namespace mlpack::ann;
* @tparam NetworkType The type of network used for simple dqn.
*/
template<
typename OutputLayerType = EmptyLoss<>,
typename InitType = GaussianInitialization,
typename NetworkType = FFN<OutputLayerType, InitType>
typename OutputLayerType = mlpack::ann::EmptyLoss<>,
typename InitType = mlpack::ann::GaussianInitialization,
typename NetworkType = mlpack::ann::FFN<OutputLayerType, InitType>
>
class CategoricalDQN
{
@@ -83,21 +81,21 @@ class CategoricalDQN
vMax(config.VMax()),
isNoisy(isNoisy)
{
network.Add(new Linear<>(inputDim, h1));
network.Add(new ReLULayer<>());
network.Add(new mlpack::ann::Linear<>(inputDim, h1));
network.Add(new mlpack::ann::ReLULayer<>());
if (isNoisy)
{
noisyLayerIndex.push_back(network.Model().size());
network.Add(new NoisyLinear<>(h1, h2));
network.Add(new ReLULayer<>());
network.Add(new mlpack::ann::NoisyLinear<>(h1, h2));
network.Add(new mlpack::ann::ReLULayer<>());
noisyLayerIndex.push_back(network.Model().size());
network.Add(new NoisyLinear<>(h2, outputDim * atomSize));
network.Add(new mlpack::ann::NoisyLinear<>(h2, outputDim * atomSize));
}
else
{
network.Add(new Linear<>(h1, h2));
network.Add(new ReLULayer<>());
network.Add(new Linear<>(h2, outputDim * atomSize));
network.Add(new mlpack::ann::Linear<>(h1, h2));
network.Add(new mlpack::ann::ReLULayer<>());
network.Add(new mlpack::ann::Linear<>(h2, outputDim * atomSize));
}
}
@@ -181,9 +179,9 @@ class CategoricalDQN
*/
void ResetNoise()
{
for (size_t i = 0; i < noisyLayerIndex.size(); i++)
for (size_t i = 0; i < noisyLayerIndex.size(); ++i)
{
boost::get<NoisyLinear<>*>
boost::get<mlpack::ann::NoisyLinear<>*>
(network.Model()[noisyLayerIndex[i]])->ResetNoise();
}
}
@@ -236,7 +234,7 @@ class CategoricalDQN
std::vector<size_t> noisyLayerIndex;
//! Locally-stored softmax activation function.
Softmax<> softMax;
mlpack::ann::Softmax<> softMax;
//! Locally-stored activations from softMax.
arma::mat activations;
@@ -22,8 +22,6 @@
namespace mlpack {
namespace rl {
using namespace mlpack::ann;
/**
* Implementation of the Dueling Deep Q-Learning network.
* For more information, see the following.
@@ -46,12 +44,12 @@ using namespace mlpack::ann;
* @tparam ValueNetworkType The type of network used for value network.
*/
template <
typename OutputLayerType = EmptyLoss<>,
typename InitType = GaussianInitialization,
typename CompleteNetworkType = FFN<OutputLayerType, InitType>,
typename FeatureNetworkType = Sequential<>,
typename AdvantageNetworkType = Sequential<>,
typename ValueNetworkType = Sequential<>
typename OutputLayerType = mlpack::ann::EmptyLoss<>,
typename InitType = mlpack::ann::GaussianInitialization,
typename CompleteNetworkType = mlpack::ann::FFN<OutputLayerType, InitType>,
typename FeatureNetworkType = mlpack::ann::Sequential<>,
typename AdvantageNetworkType = mlpack::ann::Sequential<>,
typename ValueNetworkType = mlpack::ann::Sequential<>
>
class DuelingDQN
{
@@ -59,14 +57,14 @@ class DuelingDQN
//! Default constructor.
DuelingDQN() : isNoisy(false)
{
featureNetwork = new Sequential<>();
valueNetwork = new Sequential<>();
advantageNetwork = new Sequential<>();
concat = new Concat<>(true);
featureNetwork = new mlpack::ann::Sequential<>();
valueNetwork = new mlpack::ann::Sequential<>();
advantageNetwork = new mlpack::ann::Sequential<>();
concat = new mlpack::ann::Concat<>(true);
concat->Add(valueNetwork);
concat->Add(advantageNetwork);
completeNetwork.Add(new IdentityLayer<>());
completeNetwork.Add(new mlpack::ann::IdentityLayer<>());
completeNetwork.Add(featureNetwork);
completeNetwork.Add(concat);
}
@@ -92,42 +90,42 @@ class DuelingDQN
completeNetwork(outputLayer, init),
isNoisy(isNoisy)
{
featureNetwork = new Sequential<>();
featureNetwork->Add(new Linear<>(inputDim, h1));
featureNetwork->Add(new ReLULayer<>());
featureNetwork = new mlpack::ann::Sequential<>();
featureNetwork->Add(new mlpack::ann::Linear<>(inputDim, h1));
featureNetwork->Add(new mlpack::ann::ReLULayer<>());
valueNetwork = new Sequential<>();
advantageNetwork = new Sequential<>();
valueNetwork = new mlpack::ann::Sequential<>();
advantageNetwork = new mlpack::ann::Sequential<>();
if (isNoisy)
{
noisyLayerIndex.push_back(valueNetwork->Model().size());
valueNetwork->Add(new NoisyLinear<>(h1, h2));
advantageNetwork->Add(new NoisyLinear<>(h1, h2));
valueNetwork->Add(new mlpack::ann::NoisyLinear<>(h1, h2));
advantageNetwork->Add(new mlpack::ann::NoisyLinear<>(h1, h2));
valueNetwork->Add(new ReLULayer<>());
advantageNetwork->Add(new ReLULayer<>());
valueNetwork->Add(new mlpack::ann::ReLULayer<>());
advantageNetwork->Add(new mlpack::ann::ReLULayer<>());
noisyLayerIndex.push_back(valueNetwork->Model().size());
valueNetwork->Add(new NoisyLinear<>(h2, 1));
advantageNetwork->Add(new NoisyLinear<>(h2, outputDim));
valueNetwork->Add(new mlpack::ann::NoisyLinear<>(h2, 1));
advantageNetwork->Add(new mlpack::ann::NoisyLinear<>(h2, outputDim));
}
else
{
valueNetwork->Add(new Linear<>(h1, h2));
valueNetwork->Add(new ReLULayer<>());
valueNetwork->Add(new Linear<>(h2, 1));
valueNetwork->Add(new mlpack::ann::Linear<>(h1, h2));
valueNetwork->Add(new mlpack::ann::ReLULayer<>());
valueNetwork->Add(new mlpack::ann::Linear<>(h2, 1));
advantageNetwork->Add(new Linear<>(h1, h2));
advantageNetwork->Add(new ReLULayer<>());
advantageNetwork->Add(new Linear<>(h2, outputDim));
advantageNetwork->Add(new mlpack::ann::Linear<>(h1, h2));
advantageNetwork->Add(new mlpack::ann::ReLULayer<>());
advantageNetwork->Add(new mlpack::ann::Linear<>(h2, outputDim));
}
concat = new Concat<>(true);
concat = new mlpack::ann::Concat<>(true);
concat->Add(valueNetwork);
concat->Add(advantageNetwork);
completeNetwork.Add(new IdentityLayer<>());
completeNetwork.Add(new mlpack::ann::IdentityLayer<>());
completeNetwork.Add(featureNetwork);
completeNetwork.Add(concat);
this->ResetParameters();
@@ -150,10 +148,10 @@ class DuelingDQN
valueNetwork(valueNetwork),
isNoisy(isNoisy)
{
concat = new Concat<>(true);
concat = new mlpack::ann::Concat<>(true);
concat->Add(valueNetwork);
concat->Add(advantageNetwork);
completeNetwork.Add(new IdentityLayer<>());
completeNetwork.Add(new mlpack::ann::IdentityLayer<>());
completeNetwork.Add(featureNetwork);
completeNetwork.Add(concat);
this->ResetParameters();
@@ -245,9 +243,9 @@ class DuelingDQN
{
for (size_t i = 0; i < noisyLayerIndex.size(); i++)
{
boost::get<NoisyLinear<>*>
boost::get<mlpack::ann::NoisyLinear<>*>
(valueNetwork->Model()[noisyLayerIndex[i]])->ResetNoise();
boost::get<NoisyLinear<>*>
boost::get<mlpack::ann::NoisyLinear<>*>
(advantageNetwork->Model()[noisyLayerIndex[i]])->ResetNoise();
}
}
@@ -262,7 +260,7 @@ class DuelingDQN
CompleteNetworkType completeNetwork;
//! Locally-stored concat network.
Concat<>* concat;
mlpack::ann::Concat<>* concat;
//! Locally-stored feature network.
FeatureNetworkType* featureNetwork;
@@ -283,7 +281,7 @@ class DuelingDQN
arma::mat actionValues;
//! Locally-stored loss function.
MeanSquaredError<> lossFunction;
mlpack::ann::MeanSquaredError<> lossFunction;
};
} // namespace rl
@@ -21,17 +21,15 @@
namespace mlpack {
namespace rl {
using namespace mlpack::ann;
/**
* @tparam OutputLayerType The output layer type of the network.
* @tparam InitType The initialization type used for the network.
* @tparam NetworkType The type of network used for simple dqn.
*/
template<
typename OutputLayerType = MeanSquaredError<>,
typename InitType = GaussianInitialization,
typename NetworkType = FFN<OutputLayerType, InitType>
typename OutputLayerType = mlpack::ann::MeanSquaredError<>,
typename InitType = mlpack::ann::GaussianInitialization,
typename NetworkType = mlpack::ann::FFN<OutputLayerType, InitType>
>
class SimpleDQN
{
@@ -61,21 +59,21 @@ class SimpleDQN
network(outputLayer, init),
isNoisy(isNoisy)
{
network.Add(new Linear(h1));
network.Add(new ReLU());
network.Add(new mlpack::ann::Linear(h1));
network.Add(new mlpack::ann::ReLU());
if (isNoisy)
{
noisyLayerIndex.push_back(network.Network().size());
network.Add(new NoisyLinear(h2));
network.Add(new ReLU());
network.Add(new mlpack::ann::NoisyLinear(h2));
network.Add(new mlpack::ann::ReLU());
noisyLayerIndex.push_back(network.Network().size());
network.Add(new NoisyLinear(outputDim));
network.Add(new mlpack::ann::NoisyLinear(outputDim));
}
else
{
network.Add(new Linear(h2));
network.Add(new ReLU());
network.Add(new Linear(outputDim));
network.Add(new mlpack::ann::Linear(h2));
network.Add(new mlpack::ann::ReLU());
network.Add(new mlpack::ann::Linear(outputDim));
}
}
@@ -132,7 +130,7 @@ class SimpleDQN
{
for (size_t i = 0; i < noisyLayerIndex.size(); i++)
{
dynamic_cast<NoisyLinear*>(
dynamic_cast<mlpack::ann::NoisyLinear*>(
network.Network()[noisyLayerIndex[i]])->ResetNoise();
}
}