29 template<
typename Real_t>
 
   30 void TReference<Real_t>::AddBiases(TMatrixT<Real_t> &A,
 
   31                                    const TMatrixT<Real_t> &biases)
 
   36    for(
size_t i = 0; i<m; i++)
 
   38       for(
size_t j=0; j<n; j++)
 
   40          A(i, j) += biases(i, 0);
 
   47 template <
typename Real_t>
 
   48 void TReference<Real_t>::UpdateParams(
 
   49    TMatrixT<Real_t> &x, TMatrixT<Real_t> &tildeX, TMatrixT<Real_t> &y,
 
   50    TMatrixT<Real_t> &z, TMatrixT<Real_t> &fVBiases, TMatrixT<Real_t> &fHBiases,
 
   51    TMatrixT<Real_t> &fWeights, TMatrixT<Real_t> &VBiasError,
 
   52    TMatrixT<Real_t> &HBiasError, Real_t learningRate, 
size_t fBatchSize) {
 
   55    for (
size_t i = 0; i < (size_t)fVBiases.GetNrows(); i++)
 
   57       for (
size_t j = 0; j < (size_t)fVBiases.GetNcols(); j++) {
 
   58          VBiasError(i, j) = x(i, j) - z(i, j);
 
   59          fVBiases(i, j) += learningRate * VBiasError(i, j) / fBatchSize;
 
   64    for (Int_t i = 0; i < fHBiases.GetNrows(); i++) {
 
   66       for (Int_t j = 0; j < fVBiases.GetNrows(); j++) {
 
   67          HBiasError(i, 0) += fWeights(i, j) * VBiasError(j, 0);
 
   69       HBiasError(i, 0) *= y(i, 0) * (1 - y(i, 0));
 
   70       fHBiases(i, 0) += learningRate * HBiasError(i, 0) / fBatchSize;
 
   74    for (Int_t i = 0; i < fHBiases.GetNrows(); i++) {
 
   75       for (Int_t j = 0; j < fVBiases.GetNrows(); j++) {
 
   76          fWeights(i, j) += learningRate * (HBiasError(i, 0) * tildeX(j, 0) +
 
   77                                           VBiasError(j, 0) * y(i, 0)) / fBatchSize;
 
   84 template<
typename Real_t>
 
   85 void TReference<Real_t>::SoftmaxAE(TMatrixT<Real_t> & A)
 
   92    for (
size_t i = 0; i < m; i++) {
 
   93       for (
size_t j = 0; j < n; j++) {
 
   98    for (
size_t i = 0; i < m; i++) {
 
   99       for (
size_t j = 0; j < n; j++) {
 
  100          A(i, j) = exp(A(i, j)) / sum;
 
  107 template <
typename Real_t>
 
  108 void TReference<Real_t>::CorruptInput(TMatrixT<Real_t> &input,
 
  109                                       TMatrixT<Real_t> &corruptedInput,
 
  110                                       Real_t corruptionLevel) {
 
  111    for(
size_t i=0; i< (size_t)input.GetNrows(); i++)
 
  113       for(
size_t j=0; j<(size_t)input.GetNcols(); j++ )
 
  116          if ((
size_t)((rand() / (RAND_MAX + 1.0)) * 100) %
 
  117               ((size_t)(corruptionLevel * 10)) ==
 
  120             corruptedInput(i, j) = 0;
 
  124             corruptedInput(i, j) = input(i, j);
 
  133 template <
typename Real_t>
 
  134 void TReference<Real_t>::EncodeInput(TMatrixT<Real_t> &input,
 
  135                                      TMatrixT<Real_t> &compressedInput,
 
  136                                      TMatrixT<Real_t> &Weights) {
 
  139    m = compressedInput.GetNrows();
 
  140    a = input.GetNrows();
 
  142    for (
size_t i = 0; i < m; i++) {
 
  143       compressedInput(i, 0) = 0;
 
  144       for (
size_t j = 0; j < a; j++) {
 
  145          compressedInput(i, 0) =
 
  146           compressedInput(i, 0) + (Weights(i, j) * input(j, 0));
 
  151 template <
typename Real_t>
 
  152 void TReference<Real_t>::ReconstructInput(TMatrixT<Real_t> &compressedInput,
 
  153                                           TMatrixT<Real_t> &reconstructedInput,
 
  154                                           TMatrixT<Real_t> &fWeights) {
 
  155   for (
size_t i=0; i<(size_t)reconstructedInput.GetNrows(); i++)
 
  157       reconstructedInput(i, 0) = 0;
 
  158       for(
size_t j=0; j<(size_t)compressedInput.GetNrows();j++)
 
  160          reconstructedInput(i, 0) += fWeights(j, i) * compressedInput(j, 0);
 
  170 template<
typename Real_t>
 
  171 void TReference<Real_t>::ForwardLogReg(TMatrixT<Real_t> &input,
 
  173                                        TMatrixT<Real_t> &fWeights)
 
  177    n = input.GetNrows();
 
  178    for(
size_t i= 0; i < m; i++)
 
  181       for(
size_t j=0; j < n; j++)
 
  183          p(i, 0) += fWeights(i, j) * input(j, 0);
 
  190 template<
typename Real_t>
 
  191 void TReference<Real_t>::UpdateParamsLogReg(TMatrixT<Real_t> &input,
 
  192                                             TMatrixT<Real_t> &output,
 
  193                                             TMatrixT<Real_t> &difference,
 
  195                                             TMatrixT<Real_t> &fWeights,
 
  196                                             TMatrixT<Real_t> &fBiases,
 
  202    n = input.GetNrows();
 
  204    for(
size_t i= 0; i<m; i++)
 
  206       difference(i, 0) = output(i, 0) - p(i, 0);
 
  207       for(
size_t j=0; j<n; j++)
 
  210           learningRate * difference(i, 0) * input(j, 0) / fBatchSize;
 
  213       fBiases(i, 0) += learningRate * difference(i, 0) / fBatchSize;