/// samples seen for the current run to calculate the centroid
auto samples_seen = nntrainer::TensorDim({num_class});
- weight_idx[KNNParams::map] = context.requestWeight(
- map_dim, nntrainer::Tensor::Initializer::ZEROS,
- nntrainer::WeightRegularizer::NONE, 1.0f, "centroidNN:map", false);
-
- weight_idx[KNNParams::num_samples] = context.requestWeight(
- samples_seen, nntrainer::Tensor::Initializer::ZEROS,
- nntrainer::WeightRegularizer::NONE, 1.0f, "centroidNN:num_samples", false);
+ weight_idx[KNNParams::map] =
+ context.requestWeight(map_dim, nntrainer::Tensor::Initializer::ZEROS,
+ nntrainer::WeightRegularizer::NONE, 1.0f,
+ context.getName() + ":map", false);
+
+ weight_idx[KNNParams::num_samples] =
+ context.requestWeight(samples_seen, nntrainer::Tensor::Initializer::ZEROS,
+ nntrainer::WeightRegularizer::NONE, 1.0f,
+ context.getName() + ":num_samples", false);
}
void CentroidKNN::forwarding(nntrainer::RunLayerContext &context,
axes_to_reduce.push_back(i);
}
- wt_idx[BNParams::mu] = context.requestWeight(dim, initializers[BNParams::mu],
- WeightRegularizer::NONE, 1.0f,
- "BN::moving_mean", false);
+ wt_idx[BNParams::mu] = context.requestWeight(
+ dim, initializers[BNParams::mu], WeightRegularizer::NONE, 1.0f,
+ context.getName() + ":moving_mean", false);
wt_idx[BNParams::var] = context.requestWeight(
dim, initializers[BNParams::var], WeightRegularizer::NONE, 1.0f,
"BN::moving_variance", false);
- wt_idx[BNParams::gamma] =
- context.requestWeight(dim, initializers[BNParams::gamma],
- WeightRegularizer::NONE, 1.0f, "BN::gamma", true);
- wt_idx[BNParams::beta] =
- context.requestWeight(dim, initializers[BNParams::beta],
- WeightRegularizer::NONE, 1.0f, "BN::beta", true);
+ wt_idx[BNParams::gamma] = context.requestWeight(
+ dim, initializers[BNParams::gamma], WeightRegularizer::NONE, 1.0f,
+ context.getName() + ":gamma", true);
+ wt_idx[BNParams::beta] = context.requestWeight(
+ dim, initializers[BNParams::beta], WeightRegularizer::NONE, 1.0f,
+ context.getName() + ":beta", true);
wt_idx[BNParams::deviation] =
- context.requestTensor(in_dim, "BN::deviation", Tensor::Initializer::NONE,
- false, ITERATION_LIFESPAN);
+ context.requestTensor(in_dim, context.getName() + ":deviation",
+ Tensor::Initializer::NONE, false, ITERATION_LIFESPAN);
}
void BatchNormalizationLayer::setProperty(
padding = std::get<props::Padding2D>(conv_props).compute(in_dim, dim);
- wt_idx[ConvParams::weight] =
- context.requestWeight(dim, weight_initializer, weight_regularizer,
- weight_regularizer_constant, "Conv2d:filter", true);
+ wt_idx[ConvParams::weight] = context.requestWeight(
+ dim, weight_initializer, weight_regularizer, weight_regularizer_constant,
+ context.getName() + ":filter", true);
wt_idx[ConvParams::bias] =
context.requestWeight(bias_dim, bias_initializer, WeightRegularizer::NONE,
- 1.0f, "Conv2d:bias", true);
+ 1.0f, context.getName() + ":bias", true);
/// we don't have same padding for now but later, same padding don't apply
/// when kernel size is even in current implementation (we need to handle
}
wt_idx[ConvParams::im2col_result] = context.requestTensor(
- calcIm2ColOutputDim(in_dim, dim, padding, stride, {1, 1}), "Conv2d:im2col",
- Tensor::Initializer::NONE, false, ITERATION_LIFESPAN);
+ calcIm2ColOutputDim(in_dim, dim, padding, stride, {1, 1}),
+ context.getName() + ":im2col", Tensor::Initializer::NONE, false,
+ ITERATION_LIFESPAN);
wt_idx[ConvParams::col2im_result] = context.requestTensor(
- calcCol2ImOutputDim(out_dim, dim), "Conv2d:col2im",
+ calcCol2ImOutputDim(out_dim, dim), context.getName() + ":col2im",
Tensor::Initializer::NONE, false, BACKWARD_FUNC_LIFESPAN);
}
mask_idx.reserve(input_dims.size());
for (auto &t : input_dims) {
- mask_idx.push_back(context.requestTensor(
- t, "DropoutMask", Tensor::Initializer::NONE, false, ITERATION_LIFESPAN));
+ mask_idx.push_back(context.requestTensor(t, context.getName() + ":Mask",
+ Tensor::Initializer::NONE, false,
+ ITERATION_LIFESPAN));
}
}
dim.width(out_dim);
dim.batch(1);
- weight_idx =
- context.requestWeight(dim, weight_initializer, weight_regularizer,
- weight_regularizer_constant, "Embedding", true);
+ weight_idx = context.requestWeight(
+ dim, weight_initializer, weight_regularizer, weight_regularizer_constant,
+ context.getName() + ":Embedding", true);
}
void EmbeddingLayer::setProperty(const std::vector<std::string> &values) {
TensorDim bias_dim(1, 1, 1, unit, 0b0001);
TensorDim weight_dim(1, 1, in_dim.width(), unit, 0b0011);
- weight_idx[FCParams::weight] =
- context.requestWeight(weight_dim, weight_initializer, weight_regularizer,
- weight_regularizer_constant, "FC:weight", true);
+ weight_idx[FCParams::weight] = context.requestWeight(
+ weight_dim, weight_initializer, weight_regularizer,
+ weight_regularizer_constant, context.getName() + ":weight", true);
- weight_idx[FCParams::bias] = context.requestWeight(
- bias_dim, bias_initializer, WeightRegularizer::NONE, 1.0f, "FC:bias", true);
+ weight_idx[FCParams::bias] =
+ context.requestWeight(bias_dim, bias_initializer, WeightRegularizer::NONE,
+ 1.0f, context.getName() + ":bias", true);
}
void FullyConnectedLayer::exportTo(Exporter &exporter,
// weight_initializer can be set sepeartely. weight_xh initializer,
// weight_hh initializer kernel initializer & recurrent_initializer in keras
// for now, it is set same way.
- wt_idx[GRUParams::weight_xh] =
- context.requestWeight(dim_xh, weight_initializer, weight_regularizer,
- weight_regularizer_constant, "GRU:weight_xh", true);
- wt_idx[GRUParams::weight_hh] =
- context.requestWeight(dim_hh, weight_initializer, weight_regularizer,
- weight_regularizer_constant, "GRU:weight_hh", true);
+ wt_idx[GRUParams::weight_xh] = context.requestWeight(
+ dim_xh, weight_initializer, weight_regularizer, weight_regularizer_constant,
+ context.getName() + ":weight_xh", true);
+ wt_idx[GRUParams::weight_hh] = context.requestWeight(
+ dim_hh, weight_initializer, weight_regularizer, weight_regularizer_constant,
+ context.getName() + ":weight_hh", true);
wt_idx[GRUParams::bias_h] =
context.requestWeight(bias_dim, bias_initializer, WeightRegularizer::NONE,
- 1.0f, "GRU:bias_h", true);
+ 1.0f, context.getName() + ":bias_h", true);
TensorDim d = input_dim;
d.width(unit);
- wt_idx[GRUParams::hidden_state] = context.requestTensor(
- d, "GRU:hidden_state", Tensor::Initializer::NONE, true, ITERATION_LIFESPAN);
+ wt_idx[GRUParams::hidden_state] =
+ context.requestTensor(d, context.getName() + ":hidden_state",
+ Tensor::Initializer::NONE, true, ITERATION_LIFESPAN);
d.width(unit * NUM_GATE);
- wt_idx[GRUParams::zrg] = context.requestTensor(
- d, "GRU:zrg", Tensor::Initializer::NONE, true, ITERATION_LIFESPAN);
+ wt_idx[GRUParams::zrg] =
+ context.requestTensor(d, context.getName() + ":zrg",
+ Tensor::Initializer::NONE, true, ITERATION_LIFESPAN);
TensorDim h_dim = TensorDim();
h_dim.setTensorDim(3, unit);
h_dim.batch(input_dim.batch());
- wt_idx[GRUParams::h_prev] =
- context.requestTensor(h_dim, "GRU:h_prev", Tensor::Initializer::NONE, false,
- FORWARD_FUNC_LIFESPAN);
+ wt_idx[GRUParams::h_prev] = context.requestTensor(
+ h_dim, context.getName() + ":h_prev", Tensor::Initializer::NONE, false,
+ FORWARD_FUNC_LIFESPAN);
if (hidden_state_activation_type == ActivationType::ACT_NONE) {
hidden_state_activation_type = ActivationType::ACT_TANH;
*
* @param dim Input dimensions for the layer
*/
- InitLayerContext(const std::vector<TensorDim> &dim, unsigned int num_out) :
+ InitLayerContext(const std::vector<TensorDim> &dim, unsigned int num_out,
+ const std::string &n = "") :
input_dim(dim),
- num_outputs(num_out) {}
+ num_outputs(num_out),
+ name(n) {}
+
+ const std::string &getName() const { return name; }
/**
* @brief Get the number of inputs for the layer
}
}
+ if (name.empty())
+ return false;
+
return true;
}
variables) */
unsigned int num_outputs; /**< number of outputs for the layer */
+ std::string name; /**< name of the layer */
};
/**
if (finalized)
throw std::runtime_error("Finalizing a layer which is already finalized");
+ init_context = InitLayerContext(init_context.getInputDimensions(),
+ init_context.getNumOutputs(), getName());
if (!init_context.validate())
throw std::invalid_argument(
"Invalid init context for finalizing the layer");
if (dropout_rate > epsilon) {
wt_idx[LSTMParams::dropout_mask] = context.requestTensor(
- output_dim, "LSTM:dropout_mask", Tensor::Initializer::NONE, false,
- ITERATION_LIFESPAN);
+ output_dim, context.getName() + ":dropout_mask",
+ Tensor::Initializer::NONE, false, ITERATION_LIFESPAN);
}
if (!return_sequences) {
// weight_initializer can be set sepeartely. weight_xh initializer,
// weight_hh initializer kernel initializer & recurrent_initializer in keras
// for now, it is set same way.
- wt_idx[LSTMParams::weight_xh] =
- context.requestWeight(dim_xh, weight_initializer, weight_regularizer,
- weight_regularizer_constant, "LSTM:weight_xh", true);
- wt_idx[LSTMParams::weight_hh] =
- context.requestWeight(dim_hh, weight_initializer, weight_regularizer,
- weight_regularizer_constant, "LSTM:weight_hh", true);
+ wt_idx[LSTMParams::weight_xh] = context.requestWeight(
+ dim_xh, weight_initializer, weight_regularizer, weight_regularizer_constant,
+ context.getName() + ":weight_xh", true);
+ wt_idx[LSTMParams::weight_hh] = context.requestWeight(
+ dim_hh, weight_initializer, weight_regularizer, weight_regularizer_constant,
+ context.getName() + ":weight_hh", true);
wt_idx[LSTMParams::bias_h] =
context.requestWeight(bias_dim, bias_initializer, WeightRegularizer::NONE,
- 1.0f, "LSTM:bias_h", true);
+ 1.0f, context.getName() + ":bias_h", true);
TensorDim d = input_dim;
d.width(unit);
wt_idx[LSTMParams::hidden_state] =
- context.requestTensor(d, "LSTM:hidden_state", Tensor::Initializer::NONE,
- true, ITERATION_LIFESPAN);
- wt_idx[LSTMParams::mem_cell] = context.requestTensor(
- d, "LSTM:mem_cell", Tensor::Initializer::NONE, true, ITERATION_LIFESPAN);
+ context.requestTensor(d, context.getName() + ":hidden_state",
+ Tensor::Initializer::NONE, true, ITERATION_LIFESPAN);
+ wt_idx[LSTMParams::mem_cell] =
+ context.requestTensor(d, context.getName() + ":mem_cell",
+ Tensor::Initializer::NONE, true, ITERATION_LIFESPAN);
d.width(unit * NUM_GATE);
- wt_idx[LSTMParams::fgio] = context.requestTensor(
- d, "LSTM:fgio", Tensor::Initializer::NONE, true, ITERATION_LIFESPAN);
+ wt_idx[LSTMParams::fgio] =
+ context.requestTensor(d, context.getName() + ":fgio",
+ Tensor::Initializer::NONE, true, ITERATION_LIFESPAN);
if (hidden_state_activation_type == ActivationType::ACT_NONE) {
hidden_state_activation_type = ActivationType::ACT_TANH;
* // clang-format on
*/
if (pooling_type == PoolingType::global_max) {
- pool_helper_idx = context.requestTensor(in_dim, "Pooling2d::helper_idx",
- Tensor::Initializer::NONE, false,
- ITERATION_LIFESPAN);
+ pool_helper_idx = context.requestTensor(
+ in_dim, context.getName() + ":helper_idx", Tensor::Initializer::NONE,
+ false, ITERATION_LIFESPAN);
pool_helper_size.resize(in_dim.batch() * in_dim.channel());
} else {
- pool_helper_idx = context.requestTensor(out_dim, "Pooling2d::helper_idx",
- Tensor::Initializer::NONE, false,
- ITERATION_LIFESPAN);
+ pool_helper_idx = context.requestTensor(
+ out_dim, context.getName() + ":helper_idx", Tensor::Initializer::NONE,
+ false, ITERATION_LIFESPAN);
}
}
if (dropout_rate > epsilon) {
wt_idx[RNNParams::dropout_mask] = context.requestTensor(
- output_dim, "RNN:dropout_mask", Tensor::Initializer::NONE, false,
- ITERATION_LIFESPAN);
+ output_dim, context.getName() + ":dropout_mask",
+ Tensor::Initializer::NONE, false, ITERATION_LIFESPAN);
}
if (!return_sequences) {
// weight_hh initializer kernel initializer & recurrent_initializer in keras
// for now, it is set same way.
- wt_idx[RNNParams::weight_xh] =
- context.requestWeight(dim_xh, weight_initializer, weight_regularizer,
- weight_regularizer_constant, "RNN:weight_xh", true);
- wt_idx[RNNParams::weight_hh] =
- context.requestWeight(dim_hh, weight_initializer, weight_regularizer,
- weight_regularizer_constant, "RNN:weight_hh", true);
+ wt_idx[RNNParams::weight_xh] = context.requestWeight(
+ dim_xh, weight_initializer, weight_regularizer, weight_regularizer_constant,
+ context.getName() + ":weight_xh", true);
+ wt_idx[RNNParams::weight_hh] = context.requestWeight(
+ dim_hh, weight_initializer, weight_regularizer, weight_regularizer_constant,
+ context.getName() + ":weight_hh", true);
wt_idx[RNNParams::bias_h] =
context.requestWeight(bias_dim, bias_initializer, WeightRegularizer::NONE,
- 1.0f, "RNN:bias_h", true);
+ 1.0f, context.getName() + ":bias_h", true);
// We do not need this if we reuse net_hidden[0]. But if we do, then the unit
// test will fail. Becuase it modifies the date during gradient calculation
// TODO : We could control with something like #define test to save memory
TensorDim d = input_dim;
d.width(unit);
- wt_idx[RNNParams::hidden_state] = context.requestTensor(
- d, "RNN:hidden_state", Tensor::Initializer::NONE, true, ITERATION_LIFESPAN);
+ wt_idx[RNNParams::hidden_state] =
+ context.requestTensor(d, context.getName() + ":hidden_state",
+ Tensor::Initializer::NONE, true, ITERATION_LIFESPAN);
if (hidden_state_activation_type == ActivationType::ACT_NONE) {
hidden_state_activation_type = ActivationType::ACT_TANH;
TEST_P(LayerSemantics, finalizeValidate_p) {
nntrainer::TensorDim in_dim({1, 1, 1, 1});
nntrainer::InitLayerContext init_context =
- nntrainer::InitLayerContext({in_dim}, 1);
+ nntrainer::InitLayerContext({in_dim}, 1, "layer");
EXPECT_EQ(init_context.validate(), true);
// set necessary properties only
TEST_P(LayerSemantics, setBatchValidate_p) {
nntrainer::TensorDim in_dim({1, 1, 1, 1});
nntrainer::InitLayerContext init_context =
- nntrainer::InitLayerContext({in_dim}, 1);
+ nntrainer::InitLayerContext({in_dim}, 1, "layer");
init_context.validate();
// set necessary properties only